|
|
@@ -238,15 +238,23 @@ bool pkgDPkgPM::Remove(PkgIterator Pkg,bool Purge)
|
|
|
return true;
|
|
|
}
|
|
|
/*}}}*/
|
|
|
-// DPkgPM::SendV2Pkgs - Send version 2 package info /*{{{*/
|
|
|
+// DPkgPM::SendPkgInfo - Send info for install-pkgs hook /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
|
/* This is part of the helper script communication interface, it sends
|
|
|
very complete information down to the other end of the pipe.*/
|
|
|
bool pkgDPkgPM::SendV2Pkgs(FILE *F)
|
|
|
{
|
|
|
- fprintf(F,"VERSION 2\n");
|
|
|
-
|
|
|
- /* Write out all of the configuration directives by walking the
|
|
|
+ return SendPkgsInfo(F, 2);
|
|
|
+}
|
|
|
+bool pkgDPkgPM::SendPkgsInfo(FILE * const F, unsigned int const &Version)
|
|
|
+{
|
|
|
+ // This version of APT supports only v3, so don't sent higher versions
|
|
|
+ if (Version <= 3)
|
|
|
+ fprintf(F,"VERSION %u\n", Version);
|
|
|
+ else
|
|
|
+ fprintf(F,"VERSION 3\n");
|
|
|
+
|
|
|
+ /* Write out all of the configuration directives by walking the
|
|
|
configuration tree */
|
|
|
const Configuration::Item *Top = _config->Tree(0);
|
|
|
for (; Top != 0;)
|
|
|
@@ -280,30 +288,51 @@ bool pkgDPkgPM::SendV2Pkgs(FILE *F)
|
|
|
pkgDepCache::StateCache &S = Cache[I->Pkg];
|
|
|
|
|
|
fprintf(F,"%s ",I->Pkg.Name());
|
|
|
- // Current version
|
|
|
- if (I->Pkg->CurrentVer == 0)
|
|
|
- fprintf(F,"- ");
|
|
|
+
|
|
|
+ // Current version which we are going to replace
|
|
|
+ pkgCache::VerIterator CurVer = I->Pkg.CurrentVer();
|
|
|
+ if (CurVer.end() == true && (I->Op == Item::Remove || I->Op == Item::Purge))
|
|
|
+ CurVer = FindNowVersion(I->Pkg);
|
|
|
+
|
|
|
+ else if (CurVer.end() == true)
|
|
|
+ {
|
|
|
+ if (Version <= 2)
|
|
|
+ fprintf(F, "- ");
|
|
|
+ else
|
|
|
+ fprintf(F, "- - none ");
|
|
|
+ }
|
|
|
else
|
|
|
- fprintf(F,"%s ",I->Pkg.CurrentVer().VerStr());
|
|
|
-
|
|
|
- // Show the compare operator
|
|
|
- // Target version
|
|
|
+ {
|
|
|
+ fprintf(F, "%s ", CurVer.VerStr());
|
|
|
+ if (Version >= 3)
|
|
|
+ fprintf(F, "%s %s ", CurVer.Arch(), CurVer.MultiArchType());
|
|
|
+ }
|
|
|
+
|
|
|
+ // Show the compare operator between current and install version
|
|
|
if (S.InstallVer != 0)
|
|
|
{
|
|
|
+ pkgCache::VerIterator const InstVer = S.InstVerIter(Cache);
|
|
|
int Comp = 2;
|
|
|
- if (I->Pkg->CurrentVer != 0)
|
|
|
- Comp = S.InstVerIter(Cache).CompareVer(I->Pkg.CurrentVer());
|
|
|
+ if (CurVer.end() == false)
|
|
|
+ Comp = InstVer.CompareVer(CurVer);
|
|
|
if (Comp < 0)
|
|
|
fprintf(F,"> ");
|
|
|
- if (Comp == 0)
|
|
|
+ else if (Comp == 0)
|
|
|
fprintf(F,"= ");
|
|
|
- if (Comp > 0)
|
|
|
+ else if (Comp > 0)
|
|
|
fprintf(F,"< ");
|
|
|
- fprintf(F,"%s ",S.InstVerIter(Cache).VerStr());
|
|
|
+ fprintf(F, "%s ", InstVer.VerStr());
|
|
|
+ if (Version >= 3)
|
|
|
+ fprintf(F, "%s %s ", InstVer.Arch(), InstVer.MultiArchType());
|
|
|
}
|
|
|
else
|
|
|
- fprintf(F,"> - ");
|
|
|
-
|
|
|
+ {
|
|
|
+ if (Version <= 2)
|
|
|
+ fprintf(F, "> - ");
|
|
|
+ else
|
|
|
+ fprintf(F, "> - - none ");
|
|
|
+ }
|
|
|
+
|
|
|
// Show the filename/operation
|
|
|
if (I->Op == Item::Install)
|
|
|
{
|
|
|
@@ -313,9 +342,9 @@ bool pkgDPkgPM::SendV2Pkgs(FILE *F)
|
|
|
else
|
|
|
fprintf(F,"%s\n",I->File.c_str());
|
|
|
}
|
|
|
- if (I->Op == Item::Configure)
|
|
|
+ else if (I->Op == Item::Configure)
|
|
|
fprintf(F,"**CONFIGURE**\n");
|
|
|
- if (I->Op == Item::Remove ||
|
|
|
+ else if (I->Op == Item::Remove ||
|
|
|
I->Op == Item::Purge)
|
|
|
fprintf(F,"**REMOVE**\n");
|
|
|
|
|
|
@@ -404,7 +433,7 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf)
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
- SendV2Pkgs(F);
|
|
|
+ SendPkgsInfo(F, Version);
|
|
|
|
|
|
fclose(F);
|
|
|
|