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

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



On Wed, May 27 22:51, Alexander Siol wrote:
> diff --git a/trunk/src/modules/pas/lpt/repositories.pas b/trunk/src/modules/pas/lpt/repositories.pas
> index 5386421..5d2d7f4 100644
> --- a/trunk/src/modules/pas/lpt/repositories.pas
> +++ b/trunk/src/modules/pas/lpt/repositories.pas
> @@ -60,11 +62,15 @@ begin
>              if Pos('http://', url) > 0 then begin
>                  repostype := http;
>              end else begin
> +                TextColor(6);
>                  WriteLn('Ungueltige Paketquelle: ' + url);
> +                TextColor(7);
>                  continue;
>              end
>          end else begin
> +            TextColor(6);
>              WriteLn('Ungueltige Paketquelle: ' + url);
> +            TextColor(7);
>              continue;
>          end;

Dieser Hunk hat nichts mit den lokalen Paketen zu tun, oder?

> diff --git a/trunk/src/modules/pas/lpt/repository_single.pas b/trunk/src/modules/pas/lpt/repository_single.pas
> new file mode 100644
> index 0000000..9409f34
> --- /dev/null
> +++ b/trunk/src/modules/pas/lpt/repository_single.pas
> @@ -0,0 +1,112 @@
> +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;
> +            function PrepareLists: boolean; override;
> +            function FetchLists(pkgset: TPackageSet): boolean; 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;
> +
> +function TSFRepository.PrepareLists: boolean;
> +begin
> +    (* Einzelpakete haben keine Listen. *)
> +    exit(true);
> +end;
> +
> +function TSFRepository.FetchLists(pkgset: TPackageSet): boolean;
> +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 else begin
> +                WriteLn('Metadaten passen nicht zu Paket!');

Sollte hier nicht vielleicht eher eine Exception fliegen? Oder dann
wenigstens mit bunt! ;-) Aber ich glaube eine Exception wäre the right
thing (tm)

> +            end;
> +        end else begin
> +            package.skipFile();
> +        end;
> +    end;
> +    package.destroy();
> +    exit(true);
> +end;
> +
> +begin
> +end.

Mehr fällt mir da im Moment nicht auf. ;-)

-- 
Antoine Kaufmann
<toni@xxxxxxxxxxxxxxxx>

Attachment: pgpnyp4Sp9LbH.pgp
Description: PGP signature