[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 8/9] lpt: Alle Pakete Updaten (lpt upgrade-all)
+ lpt: Alle Pakete Updaten (lpt upgrade-all)
Signed-off-by: Antoine Kaufmann <toni@xxxxxxxxxx>
---
src/modules/pas/lpt/lang/lang_en.c | 15 ++++++-
src/modules/pas/lpt/lang/resstr.h | 3 +
src/modules/pas/lpt/lpt.pas | 90 +++++++++++++++++++++++++++++++++++-
3 files changed, 105 insertions(+), 3 deletions(-)
diff --git a/src/modules/pas/lpt/lang/lang_en.c b/src/modules/pas/lpt/lang/lang_en.c
index dd3b228..3c45acf 100644
--- a/src/modules/pas/lpt/lang/lang_en.c
+++ b/src/modules/pas/lpt/lang/lang_en.c
@@ -63,7 +63,8 @@ static const struct tms_strings dict[] = {
" get: Install a package\n"
" install: Install a package from a local file\n"
" (speficy file name as last parameter)\n"
- " remove: Remove a package",
+ " remove: Remove a package\n"
+ " upgrade-all: Upgrade all installed packages",
// Herunterladen und Entpacken von %s
&RESSTR_P$LPT_RSDOWNLOADANDEXTRACT,
@@ -81,6 +82,14 @@ static const struct tms_strings dict[] = {
&RESSTR_P$LPT_RSREMOVING,
"Removing %s",
+ // Folgende Pakete werden aktualisiert:
+ &RESSTR_P$LPT_RSPACKAGESTOUPGRADE,
+ "The following packages will be upgraded:",
+
+ // Aenderungen uebernehmen? (j/N)
+ &RESSTR_P$LPT_RSAPPLYCHANGESYESNO,
+ "Apply changes? (y/N)",
+
// Fehler:
&RESSTR_P$LPT_RSERROR,
"Error:",
@@ -125,6 +134,10 @@ static const struct tms_strings dict[] = {
&RESSTR_P$LPT_RSNOPKGCONTENTFILE,
"Could not remove package, pkgcontent file is missing.",
+ // Keine Aktualisierungen verfuegbar
+ &RESSTR_P$LPT_RSNOUPDATESAVAILABLE,
+ "No updates available",
+
// Paket %s fehlt
&RESSTR_PACKAGES_RSPACKAGEMISSING,
"Package %s is not available",
diff --git a/src/modules/pas/lpt/lang/resstr.h b/src/modules/pas/lpt/lang/resstr.h
index 10f95e7..296a381 100644
--- a/src/modules/pas/lpt/lang/resstr.h
+++ b/src/modules/pas/lpt/lang/resstr.h
@@ -39,6 +39,8 @@ extern void* RESSTR_P$LPT_RSDOWNLOADANDEXTRACT;
extern void* RESSTR_P$LPT_RSSEARCHING;
extern void* RESSTR_P$LPT_RSCONFIGURING;
extern void* RESSTR_P$LPT_RSREMOVING;
+extern void* RESSTR_P$LPT_RSPACKAGESTOUPGRADE;
+extern void* RESSTR_P$LPT_RSAPPLYCHANGESYESNO;
extern void* RESSTR_P$LPT_RSERROR;
extern void* RESSTR_P$LPT_RSCANTLOADREPOLIST;
extern void* RESSTR_P$LPT_RSFAILDOWNLOADREPOLIST;
@@ -50,6 +52,7 @@ extern void* RESSTR_P$LPT_RSCANNOTRESOLVEDEP;
extern void* RESSTR_P$LPT_RSWRONGPARAMCOUNT;
extern void* RESSTR_P$LPT_RSINVALIDACTION;
extern void* RESSTR_P$LPT_RSNOPKGCONTENTFILE;
+extern void* RESSTR_P$LPT_RSNOUPDATESAVAILABLE;
extern void* RESSTR_PACKAGES_RSPACKAGEMISSING;
extern void* RESSTR_REPOSITORIES_RSUNKNOWNREPOTYPE;
extern void* RESSTR_REPOSITORIES_RSINVALIDPKGSRC;
diff --git a/src/modules/pas/lpt/lpt.pas b/src/modules/pas/lpt/lpt.pas
index cef2d56..97da589 100644
--- a/src/modules/pas/lpt/lpt.pas
+++ b/src/modules/pas/lpt/lpt.pas
@@ -13,13 +13,15 @@ resourcestring
' get: Installiert das angegebene Paket'#10 +
' install: Installiert das angegebene Paket aus lokaler Datei'#10 +
' Achtung, Datei als letzten Parameter angeben!'#10 +
- ' remove: Paket deinstallieren';
-
+ ' remove: Paket deinstallieren'#10 +
+ ' upgrade-all: Alle installierten Pakete aktualisieren';
rsDownloadAndExtract = 'Herunterladen und Entpacken von %s';
rsSearching = 'Suche %s';
rsConfiguring = 'Richte %s ein';
rsRemoving = 'Entferne %s';
+ rsPackagesToUpgrade = 'Folgende Pakete werden aktualisiert:';
+ rsApplyChangesYesNo = '�nderungen übernehmen? (j/N)';
rsError = 'Fehler:';
rsCantLoadRepoList = 'Kann Repository-Liste nicht laden:';
@@ -33,6 +35,7 @@ resourcestring
rsInvalidAction = 'Ungütige Aktion:';
rsNoPkgcontentFile = 'Kann Paket nicht deinstallieren, da die pkgcontent-' +
'Datei fehlt.';
+ rsNoUpdatesAvailable = 'Keine Aktualisierungen verfügbar';
procedure PrintUsage;
@@ -454,6 +457,82 @@ begin
RemoveVersion(version);
end;
+(**
+ * Alle installierten Pakete aktualisieren
+ *)
+procedure UpgradeAll;
+var
+ pkgset, installed, toInstall, toRemove: TPackageSet;
+ pkg: TPackage;
+ sect: TPackageSection;
+ verInst, verRepo: TPackageVersion;
+
+ i, j: Integer;
+ answer: Char;
+begin
+ pkgset := TPackageSet.create;
+ installed := TPackageSet.create;
+ toInstall := TPackageSet.create;
+ toRemove := TPackageSet.create;
+
+ FindInstalledPackages(installed);
+ ReadPkgsrc(getConfigRoot + 'pkgsrc');
+ ReadPkglists(pkgset);
+
+
+ (* Pakete zum Aktualisieren finden *)
+ WriteLn(rsPackagesToUpgrade);
+ for i := 0 to installed.packages.count - 1 do begin
+ pkg := TPackage(installed.packages.items[i]);
+ for j := 0 to pkg.sections.count - 1 do begin
+ sect := TPackageSection(pkg.sections.items[j]);
+ verInst := installed.GetCurrentVersion(pkg.name, sect.section);
+ verRepo := pkgset.GetCurrentVersion(pkg.name, sect.section);
+
+ (* Das Paket ist nicht im Repo oder nicht installiert *)
+ if (verInst = nil) or (verRepo = nil) then begin
+ continue;
+ end;
+
+ (* Wenn die Version im Repo neuer ist als unsere Lokale koennen wir
+ updaten *)
+ if verInst.compareTo(verRepo) < 0 then begin
+ WriteLn(' ' + pkg.name + ': ' + verInst.version + '=>' +
+ verRepo.version);
+ toInstall.addVersion(verRepo);
+ toRemove.addVersion(verInst);
+ end;
+ end;
+ end;
+
+ if toInstall.packages.count < 1 then begin
+ WriteLn(' ', rsNoUpdatesAvailable);
+ Exit;
+ end;
+
+ WriteLn(rsApplyChangesYesNo);
+ Read(answer);
+ if (answer <> 'j') and (answer <> 'J') and (answer <> 'y') and
+ (answer <> 'Y') then
+ begin
+ Exit;
+ end;
+
+ (* Alte Versionen deinstallieren *)
+ for i := 0 to toRemove.packages.count - 1 do begin
+ pkg := TPackage(toRemove.packages.items[i]);
+ sect := TPackageSection(pkg.sections.items[0]);
+ verInst := TPackageVersion(sect.versions.items[0]);
+ RemoveVersion(verInst);
+ end;
+
+ (* Neue Versionen installieren *)
+ for i := 0 to toInstall.packages.count - 1 do begin
+ pkg := TPackage(toInstall.packages.items[i]);
+ Get(pkg.name, false);
+ end;
+end;
+
function c_lostio_create_link(target, link: PChar; hard: boolean): integer; cdecl; external name 'io_create_link';
procedure CfgAddbin(path, pubname: String);
@@ -553,6 +632,13 @@ begin
WriteLn(rsWrongParamCount);
PrintUsage;
end;
+ end else if system.ParamStr(1) = 'upgrade-all' then begin
+ if system.ParamCount = 1 then begin
+ UpgradeAll;
+ end else begin
+ WriteLn('Falsche Parameterzahl');
+ PrintUsage;
+ end;
end else if system.ParamStr(1) = 'cfg-addbin' then begin
if system.ParamCount = 3 then begin
CfgAddbin(system.ParamStr(2), system.ParamStr(3));
--
1.6.3.3