84 lines
2.0 KiB
ObjectPascal
84 lines
2.0 KiB
ObjectPascal
// SPDX-License-Identifier: LGPL-3.0-linking-exception
|
|
unit CopyFile;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, ReleaserTypes;
|
|
|
|
type
|
|
|
|
{ TCopyFile }
|
|
|
|
TCopyFile = class(TReleaserObject)
|
|
private
|
|
FSourceFilename, FDestFilename: String;
|
|
FVersion: TVersion;
|
|
FVersionDefined: boolean;
|
|
public
|
|
constructor Create(AParameters: TStringList; ALogicDir: string); override;
|
|
procedure Save; override;
|
|
procedure GetVersions({%H-}AVersionList: TStringList); override;
|
|
procedure UpdateVersion(AVersion: TVersion); override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{ TCopyFile }
|
|
|
|
constructor TCopyFile.Create(AParameters: TStringList; ALogicDir: string);
|
|
begin
|
|
inherited Create(AParameters, ALogicDir);
|
|
ExpectParamCount(2);
|
|
FSourceFilename := ExpandFileName(Param[0]);
|
|
FDestFilename := ExpandFileName(Param[1]);
|
|
end;
|
|
|
|
procedure TCopyFile.Save;
|
|
var
|
|
dest: String;
|
|
streamIn,streamOut: TStream;
|
|
buf: array of byte;
|
|
bufCount: LongInt;
|
|
begin
|
|
if not FVersionDefined then exit;
|
|
streamIn := TFileStream.Create(ReplaceVariables(FSourceFilename), fmOpenRead);
|
|
streamOut := nil;
|
|
buf := nil;
|
|
try
|
|
dest := ReplaceVariables(FDestFilename);
|
|
if FileExists(dest) then
|
|
writeln('Replacing file "',ExtractFilename(dest),'"');
|
|
streamOut := TFileStream.Create(dest, fmCreate);
|
|
setlength(buf, 4096);
|
|
repeat
|
|
bufCount:= streamIn.Read(buf[0], length(buf));
|
|
streamOut.WriteBuffer(buf[0], bufCount);
|
|
until bufCount = 0;
|
|
finally
|
|
buf := nil;
|
|
streamOut.Free;
|
|
streamIn.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TCopyFile.GetVersions(AVersionList: TStringList);
|
|
begin
|
|
//nothing
|
|
end;
|
|
|
|
procedure TCopyFile.UpdateVersion(AVersion: TVersion);
|
|
begin
|
|
if not FileExists(ReplaceVariables(FSourceFilename)) then
|
|
raise exception.Create('Source file not found: '+FSourceFilename);
|
|
if not DirectoryExists(ExtractFilePath(ReplaceVariables(FDestFilename))) then
|
|
raise exception.Create('Target directory not found: '+ExtractFilePath(ReplaceVariables(FDestFilename)));
|
|
FVersion := AVersion;
|
|
FVersionDefined := true;
|
|
end;
|
|
|
|
end.
|
|
|