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