[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 6/9] lpt: Liste mit installierten Dateien anlegen fuer jedes Paket
* lpt: Untar so modifiziert, dass es eine Liste als Parameter nimmt, in
der es die Pfade zu entpackten Dateien eintraegt.
+ lpt: Liste mit installierten Dateien anlegen fuer jedes Paket
Signed-off-by: Antoine Kaufmann <toni@xxxxxxxxxx>
---
src/modules/pas/lpt/helpers.pas | 55 ++++++++++++++++++++++++++++++++++-----
src/modules/pas/lpt/lpt.pas | 28 +++++++++++++++++++-
2 files changed, 75 insertions(+), 8 deletions(-)
diff --git a/src/modules/pas/lpt/helpers.pas b/src/modules/pas/lpt/helpers.pas
index b8b4cee..e58a3a0 100644
--- a/src/modules/pas/lpt/helpers.pas
+++ b/src/modules/pas/lpt/helpers.pas
@@ -11,8 +11,26 @@ function StartDownload(url: String): HTTPRequest;
function DownloadToFile(url, filename: String): boolean;
function DownloadToTarArchive(url: String): TTarArchive;
function getConfigRoot: String;
-procedure Untar(tarfile: String; targetpath: String = 'file:/');
-procedure Untar(tar: TTarArchive; targetpath: String = 'file:/');
+
+(**
+ * Tar-Archiv entpacken.
+ *
+ * @param tar Das zu entpackende Archiv
+ * @param filelist Liste in die die Pfade der erstellten Dateien und
+ * Verzeichnisse eingetragen werden sollen, wenn nicht nil.
+ * @param targetpath Pfad wohin das Archiv entpackt werden soll.
+ *)
+procedure Untar(tar: TTarArchive; filelist: TStrings = nil;
+ targetpath: String = 'file:/');
+
+(**
+ * Tar-Archiv entpacken.
+ *
+ * @see Untar
+ *)
+procedure Untar(tarfile: String; filelist: TStrings = nil;
+ targetpath: String = 'file:/');
+
function getArch: String;
procedure mkpath(path: string);
@@ -83,6 +101,7 @@ var
httpc: HTTPRequest;
begin
httpc := HTTPRequest.create(url);
+
httpc.setRequestHeader('Pragma', 'no-cache');
httpc.setRequestHeader('Cache-Control', 'no-cache');
WriteLn(Format(rsDownloading, [url]));
@@ -141,36 +160,58 @@ begin
plp.ProcessFile(filename, repository);
end;
-procedure Untar(tar: TTarArchive; targetpath: String = 'file:/');
+(**
+ * Tar-Archiv entpacken.
+ *
+ * @param tar Das zu entpackende Archiv
+ * @param filelist Liste in die die Pfade der erstellten Dateien und
+ * Verzeichnisse eingetragen werden sollen, wenn nicht nil.
+ * @param targetpath Pfad wohin das Archiv entpackt werden soll.
+ *)
+procedure Untar(tar: TTarArchive; filelist: TStrings = nil;
+ targetpath: String = 'file:/');
var
path: String;
dir, filename, ext: String;
+ target: String;
f: file;
begin
while tar.hasNext do begin
path := tar.NextFilename;
- dos.FSplit(path, dir, filename, ext);
+ target := targetpath + '/' + path;
+ dos.FSplit(path, dir, filename, ext);
mkpath(targetpath + '/' + dir);
if tar.NextFiletype = TAR_TYPE_FILE then begin
- Assign(f, targetpath + '/' + path);
+ Assign(f, target);
Rewrite(f, 1);
tar.ExtractFile(f);
Close(f);
+
+ (* In Dateiliste eingtragen falls gewuenscht *)
+ if filelist <> nil then begin
+ filelist.add(target);
+ end;
end else begin
tar.SkipFile;
end;
end;
end;
-procedure Untar(tarfile: String; targetpath: String = 'file:/');
+(**
+ * Tar-Archiv entpacken.
+ *
+ * @see Untar
+ *)
+procedure Untar(tarfile: String; filelist: TStrings = nil;
+ targetpath: String = 'file:/');
var
tar: TTarArchive;
begin
tar := TTarArchive.create(tarfile);
- Untar(tar, targetpath);
+ Untar(tar, filelist, targetpath);
end;
(**
diff --git a/src/modules/pas/lpt/lpt.pas b/src/modules/pas/lpt/lpt.pas
index d4d1630..5fda323 100644
--- a/src/modules/pas/lpt/lpt.pas
+++ b/src/modules/pas/lpt/lpt.pas
@@ -110,13 +110,37 @@ begin
end;
procedure Get(pkgname: String; reinstall: boolean);
+ (**
+ * Liste mit beim Installieren des Pakets angelegten Dateien speichern,
+ * sodass das Paket spaeter einfach wieder weggeworfen werden kann.
+ *
+ * @param version Version, die installiert wurde
+ * @param filenames Liste mit den erstellten Dateien und Verzeichnissen
+ *)
+ procedure saveFilelist(version: TPackageVersion; filenames: TStrings);
+ var
+ filename: String;
+ f: Text;
+ i: Integer;
+ begin
+ filename := 'file:/packages/' + version.pkg.name + '/' +
+ version.version + '/pkgcontent-' + version.section.section;
+ Assign(f, filename);
+ Rewrite(f);
+ for i := 0 to filenames.count - 1 do begin
+ WriteLn(f, filenames[i]);
+ end;
+
+ Close(f);
+ end;
function Install(version: TPackageVersion; reinstall: boolean): boolean;
var
filename: String;
repos: TRepository;
installarchive: TTarArchive;
+ filenames: TStringList;
begin
Install := false;
@@ -142,7 +166,9 @@ procedure Get(pkgname: String; reinstall: boolean);
TextColor(7);
installarchive := repos.Download(version);
if installarchive <> nil then begin
- Untar(installarchive);
+ filenames := TStringList.create;
+ Untar(installarchive, filenames);
+ saveFilelist(version, filenames);
end;
filename := 'file:/packages/' + version.pkg.name + '/' +
--
1.6.3.3