[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