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

Re: [tyndur-devel] [PATCH] lpt: Lokale Pakete



On Fri, May 29 22:49, Alexander Siol wrote:
> new file mode 100644
> index 0000000..1a62681
> --- /dev/null
> +++ b/trunk/src/modules/pas/lpt/repository_single.pas
> @@ -0,0 +1,108 @@
> +unit repository_single;
> +{$MODE ObjFPC}
> +
> +interface
> +uses sysutils, classes, tar, packages, helpers, repository_base;
> +
> +type
> +    TSFRepository = class(TRepository)
> +        public
> +            function repostype: Trepostype; virtual;
> +            constructor create(parent : TCollection);
> +            function Download(version: TPackageVersion): TTarArchive; override;
> +            procedure PrepareLists; override;
> +            procedure FetchLists(pkgset: TPackageSet); override;
> +    end;
> +
> +implementation
> +
> +constructor TSFRepository.create(parent : TCollection);
> +begin
> +    inherited;
> +end;
> +
> +function TSFRepository.repostype: Trepostype;
> +begin
> +    exit(singlefile);
> +end;
> +
> +function TSFRepository.Download(version: TPackageVersion): TTarArchive;
> +var
> +    tar: TTarArchive;
> +begin
> +    (* Einzelpakete enthalten nur sich selbst. Nur als Tar öffnen reicht. *)
> +    tar := TTarArchive.create(self.url);
> +    exit(tar);
> +end;
> +
> +procedure TSFRepository.PrepareLists;
> +begin
> +    (* Einzelpakete haben keine Listen. *)
> +    exit;
> +end;
> +
> +procedure TSFRepository.FetchLists(pkgset: TPackageSet);
> +var
> +    package: TTarArchive;
> +    line: String;
> +    i: integer;
> +    size: integer;
> +
> +    package_file_string: String;
> +    pkg_name, pkg_version, pkg_section, pkg_arch: String;
> +
> +    pkg: TPackage;
> +    section: TPackageSection;
> +    version: TPackageVersion;
> +begin
> +    package := TTarArchive.create(self.url);
> +    while package.hasNext do begin
> +        line := package.nextFilename;
> +        size := package.nextSize;
> +        i := Pos('packageinfo', line);
> +        if i > 0 then begin
> +            (* Metadaten laden *)
> +            package_file_string :=  package.ExtractString();
> +
> +            (* Newline-getrennte Infos auslesen. *)
> +            (* In Reihenfolge: Name, Version, Sektion, Architektur *)
> +            i := Pos(#10, package_file_string);
> +            pkg_name := Copy(package_file_string, 1, i - 1);
> +            package_file_string :=
> +                Copy(package_file_string, i + 1, Length(package_file_string));
> +
> +            i := Pos(#10, package_file_string);
> +            pkg_version := Copy(package_file_string, 1, i - 1);
> +            package_file_string :=
> +                Copy(package_file_string, i + 1, Length(package_file_string));
> +
> +            i := Pos(#10, package_file_string);
> +            pkg_section := Copy(package_file_string, 1, i - 1);
> +            package_file_string :=
> +                Copy(package_file_string, i + 1, Length(package_file_string));
> +
> +            i := Pos(#10, package_file_string);
> +            pkg_arch := Copy(package_file_string, 1, i - 1);
> +            package_file_string :=
> +                Copy(package_file_string, i + 1, Length(package_file_string));
> +
> +            (* Prüfen ob Metadaten zu Paket passen *)
> +            if (line = 'packages/'+pkg_name+'/'+pkg_version+'/packageinfo-'+pkg_section) then begin
> +                pkg := pkgset.add(pkg_name);
> +                pkg.desc := 'Keine (lokale Datei)';
> +                section := pkg.add(pkg_section);
> +                version := section.add(pkg_version);
> +                version.pkg := pkg;
> +                version.section := section;
> +                version.repository := self.name;
> +                break;
> +            end;
> +        end else begin
> +            package.skipFile();

Hm was passiert wenn keine (vernünftige) pkginfo drin ist? Wird das schon
irgendwie abgefangen.

> +        end;
> +    end;
> +    package.destroy();
> +end;
> +
> +begin
> +end.

Aber wenn du das schon abfängst:
Acked-by: Antoine Kaufmann <toni@xxxxxxxxxx>

-- 
Antoine Kaufmann
<toni@xxxxxxxxxxxxxxxx>

Attachment: pgpKSR6Naeyh5.pgp
Description: PGP signature