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

Re: [tyndur-devel] [PATCH] + lpt: Unterstützung für Repositorybau aus lokalen Files



Am Donnerstag, 14. Mai 2009 18:51 schrieb Alexander Siol:
> ---
>  trunk/src/modules/pas/lpt/packages.pas |   58
> +++++++++++++++++++++++++++++++- 1 files changed, 57 insertions(+), 1
> deletions(-)
>
> diff --git a/trunk/src/modules/pas/lpt/packages.pas
> b/trunk/src/modules/pas/lpt/packages.pas index 67ca831..9ae8302 100644
> --- a/trunk/src/modules/pas/lpt/packages.pas
> +++ b/trunk/src/modules/pas/lpt/packages.pas
> @@ -2,7 +2,7 @@ unit packages;
>  {$MODE ObjFPC}
>
>  interface
> -uses sysutils, classes, repositories;
> +uses sysutils, classes, repositories, tar;
>
>  type
>      EPackageFileFormat = class(Exception) end;
> @@ -24,6 +24,7 @@ type
>              destructor destroy; override;
>
>              procedure ScanFile(filename: String; repository: TRepository);
> +            procedure ScanPackage(filename: String; repository:
> TRepository); function add(name: String): TPackage;
>              procedure AddAll(pkgset: TPackageSet);
>              procedure AddVersion(ver: TPackageVersion);
> @@ -182,6 +183,61 @@ begin
>      end;
>  end;
>
> +procedure TPackageSet.ScanPackage(filename: String; repository:
> TRepository); +var
> +    package: TTarArchive;
> +    line: String;
> +    i: integer;
> +    size: integer;
> +
> +    package_file: ^String;
> +    package_file_string: String;
> +    pkg_name, pkg_version, pkg_section, pkg_arch: String;
> +
> +    packageinfo_data: PChar;
> +
> +    pkg: TPackage;
> +    section: TPackageSection;
> +    version: TPackageVersion;
> +begin
> +    package := TTarArchive.create(filename);
> +    while package.hasNext do begin
> +        line := package.nextFilename;
> +        size := package.nextSize;
> +        i := Pos('packageinfo', line);

Du solltest wenigstens noch schauen, ob sich das packageinfo am Ende befindet. 
Eigentlich würde ich sogar den kompletten Pfad vergleichen wir wollen ja 
nicht die falsche Datei erwischen.

> +        if i > 0 then begin
> +            package_file_string :=  package.ExtractString();
> +            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)); 

Leerzeilen und Kommentare sind tolle Erfindungen.

> +            pkg := self.add(pkg_name); 
> +            pkg.desc := 'none (local file)';

Das sollte deutsch sein

> +            section := pkg.add(pkg_section);
> +            version := section.add(pkg_version);
> +            version.pkg := pkg;
> +            version.section := section;
> +            version.repository := repository;
> +        end else begin
> +            package.skipFile();
> +        end;
> +    end;
> +    package.destroy();
> +    WriteLn('finished scanpackage');

Übriggebliebene Debugmeldung?