[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH] + lpt: FileRepository



Selbsterklärend. Lokale Variante der HTTPRepositories. Für die Paketindexlisten werden die Namen pkglist.[archivname] sowie 
packages.[arch] erkannt. Zum Testen einfach ne Kopie des Webrepository auf das Image verfrachten

-- 
Alexander Siol
alex@xxxxxxxxxx
dunklermeuchler@xxxxxxxxx
diff --git a/trunk/src/modules/pas/lpt/filerepository.pas b/trunk/src/modules/pas/lpt/filerepository.pas
new file mode 100644
index 0000000..186b81d
--- /dev/null
+++ b/trunk/src/modules/pas/lpt/filerepository.pas
@@ -0,0 +1,56 @@
+unit filerepository;
+{$MODE ObjFPC}
+
+interface
+uses sysutils, classes, tar, packages, helpers, baserepository;
+
+type
+    TFileRepository = class(TRepository)
+        public
+            constructor create(parent : TCollection);
+            function Download(version: TPackageVersion): TTarArchive; override;
+            function PrepareLists: boolean; override;
+            function FetchLists(pkgset: TPackageSet): boolean; override;
+    end;
+
+implementation
+
+constructor TFileRepository.create(parent : TCollection);
+begin
+    inherited;
+    repostype := 'file';
+end;
+
+function TFileRepository.Download(version: TPackageVersion): TTarArchive;
+var
+    archiveURI: String;
+begin
+    archiveURI := self.url + version.pkg.name + '-'
+        + version.section.section + '-' + version.version + '-' + getArch +
+        '.tar';
+    exit(TTarArchive.create(archiveURI));
+end;
+
+function TFileRepository.PrepareLists: boolean;
+var
+    pkglisturl: String;
+begin
+    (* Die Paketliste liegt bereits lokal, wozu also kopieren? *)
+    exit(true);
+end;
+
+function TFileRepository.FetchLists(pkgset: TPackageSet): boolean;
+begin
+    if FileExists(self.url + 'pkglist.' + self.name) then begin
+        ScanFile(pkgset, self.url + 'pkglist.' + self.name, self.name);
+        exit(true);
+    end else if FileExists(self.url + 'packages.' + getArch) then begin
+        ScanFile(pkgset, self.url + 'packages.' + getArch, self.name);
+        exit(true);
+    end else begin
+        exit(false);
+    end;
+end;
+
+begin
+end.
diff --git a/trunk/src/modules/pas/lpt/repositories.pas b/trunk/src/modules/pas/lpt/repositories.pas
index a68908d..28cde8d 100644
--- a/trunk/src/modules/pas/lpt/repositories.pas
+++ b/trunk/src/modules/pas/lpt/repositories.pas
@@ -2,7 +2,7 @@ unit repositories;
 {$MODE ObjFPC}
 
 interface
-uses sysutils, classes, helpers, baserepository, httprepository, sfrepository;
+uses sysutils, classes, helpers, baserepository, httprepository, sfrepository, filerepository;
 
 procedure ReadPkgsrc(filename: String);
 procedure AddRepository(name, url, repostype: String);
@@ -20,6 +20,8 @@ var
 begin
     if repostype = 'http' then begin
         repo := THTTPRepository.create(repos);
+    end else if repostype = 'file' then begin
+        repo := TFileRepository.create(repos);
     end else if repostype = 'singlefile' then begin
         repo := TSFRepository.create(repos);
     end else begin
@@ -61,11 +63,13 @@ begin
         if  space > 0 then begin
             name := Copy(url, 1, space - 1);
             url := Copy(url, space + 1, length(url));
-            protofinder := Pos('http://', url);
-            if protofinder > 0 then begin
+            if Pos('http://', url) > 0 then begin
                 repostype := 'http';
+            end else if Pos('file:/', url) > 0 then begin
+                repostype := 'file';
             end else begin
-                repostype := '';
+                WriteLn('Ungueltige Paketquelle: ' + url);
+                continue;
             end
         end else begin
             WriteLn('Ungueltige Paketquelle: ' + url);

Attachment: signature.asc
Description: Digital signature