123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- unit pkgarchive;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes,SysUtils,pkghandler;
- type
- { TUnzipArchive }
- TUnzipArchive = Class(TPackagehandler)
- Private
- Procedure UnzipArchive;
- Public
- Function Execute(const Args:TActionArgs):boolean;override;
- end;
- implementation
- uses
- zipper,
- uriparser,
- pkgglobals,
- pkgmessages;
- Procedure DeleteDir(const ADir:string);
- const
- {$ifdef unix}
- AllFiles='*';
- {$else}
- AllFiles='*.*';
- {$endif}
- var
- Info : TSearchRec;
- begin
- if FindFirst(ADir+PathDelim+AllFiles,faAnyFile, Info)=0 then
- try
- repeat
- if (Info.Attr and faDirectory)=faDirectory then
- DeleteDir(ADir+PathDelim+Info.Name)
- else
- DeleteFile(ADir+PathDelim+Info.Name);
- until FindNext(Info)<>0;
- finally
- FindClose(Info);
- end;
- end;
- { TFPMakeCompiler }
- Procedure TUnzipArchive.UnzipArchive;
- Var
- BuildDir : string;
- ArchiveFile : String;
- begin
- ArchiveFile:=PackageLocalArchive;
- BuildDir:=PackageBuildPath;
- { Remove existing builddir }
- if DirectoryExists(BuildDir) then
- DeleteDir(BuildDir);
- { Unzip Archive }
- ForceDirectories(BuildDir);
- SetCurrentDir(BuildDir);
- With TUnZipper.Create do
- try
- Log(vCommands,SLogUnzippping,[ArchiveFile]);
- OutputPath:=PackageBuildPath;
- UnZipAllFiles(ArchiveFile);
- Finally
- Free;
- end;
- end;
- function TUnzipArchive.Execute(const Args:TActionArgs):boolean;
- begin
- {$warning TODO Check arguments}
- UnzipArchive;
- result:=true;
- end;
- initialization
- RegisterPkgHandler('unziparchive',TUnzipArchive);
- end.
|