Przeglądaj źródła

eipp: properly handle arch-specific provides

The generation of the EIPP request was a bit to strict not generation
what would actually be needed to be part of the scenario.
David Kalnischkies 10 lat temu
rodzic
commit
14bed2c010

+ 29 - 0
apt-pkg/edsp.cc

@@ -1218,6 +1218,35 @@ bool EIPP::WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress * const
 	       pkgset[PV->ID] = true;
 	 }
 	 pkgset[P->ID] = true;
+	 if (strcmp(P.Arch(), "any") == 0)
+	 {
+	    APT::StringView const pkgname(P.Name());
+	    auto const idxColon = pkgname.find(':');
+	    if (idxColon != APT::StringView::npos)
+	    {
+	       pkgCache::PkgIterator PA;
+	       if (pkgname.substr(idxColon + 1) == "any")
+	       {
+		  auto const GA = Cache.FindGrp(pkgname.substr(0, idxColon).to_string());
+		  for (auto PA = GA.PackageList(); PA.end() == false; PA = GA.NextPkg(PA))
+		  {
+		     pkgset[PA->ID] = true;
+		  }
+	       }
+	       else
+	       {
+		  auto const PA = Cache.FindPkg(pkgname.to_string());
+		  if (PA.end() == false)
+		     pkgset[PA->ID] = true;
+	       }
+	    }
+	 }
+	 else
+	 {
+	    auto const PA = Cache.FindPkg(P.FullName(false), "any");
+	    if (PA.end() == false)
+	       pkgset[PA->ID] = true;
+	 }
       }
    };
    for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)

+ 13 - 13
test/integration/test-specific-architecture-dependencies

@@ -69,7 +69,7 @@ Inst depender-x32:i386 (1 unstable [i386])
 Conf libc6:i386 (1 unstable [i386])
 Conf depender-x32:i386 (1 unstable [i386])' aptget install depender-x32:i386 -s
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following additional packages will be installed:
   libc6:i386
@@ -81,7 +81,7 @@ Inst depender-x32 (1 unstable [amd64])
 Conf libc6:i386 (1 unstable [i386])
 Conf depender-x32 (1 unstable [amd64])' aptget install depender-x32:amd64 -s
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following additional packages will be installed:
   libc6
@@ -93,7 +93,7 @@ Inst depender-x64 (1 unstable [amd64])
 Conf libc6 (1 unstable [amd64])
 Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64:amd64 -s
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following additional packages will be installed:
   libc6
@@ -105,7 +105,7 @@ Inst depender-x64:i386 (1 unstable [i386])
 Conf libc6 (1 unstable [amd64])
 Conf depender-x64:i386 (1 unstable [i386])' aptget install depender-x64:i386 -s
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following packages will be REMOVED:
   libold:i386 libold
@@ -128,7 +128,7 @@ Remv libold:i386 [1]
 Inst breaker-x32 (1 unstable [amd64])
 Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following packages will be REMOVED:
   libold:i386
@@ -139,7 +139,7 @@ Remv libold:i386 [1]
 Inst breaker-x32:i386 (1 unstable [i386])
 Conf breaker-x32:i386 (1 unstable [i386])' aptget install breaker-x32:i386 -s
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following packages will be REMOVED:
   libold
@@ -213,7 +213,7 @@ The following NEW packages will be installed:
 Inst foo-native-depender (1 unstable [amd64])
 Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following NEW packages will be installed:
   foo-foreign-depender:i386
@@ -265,7 +265,7 @@ Conf foo-no-conflictor:i386 (1 unstable [i386])' aptget install foo-no-conflicto
 msgmsg 'switch to single architecture'
 configarchitecture 'amd64'
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following additional packages will be installed:
   libc6
@@ -277,11 +277,11 @@ Inst depender-x64 (1 unstable [amd64])
 Conf libc6 (1 unstable [amd64])
 Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64 -s
 
-testequal 'Reading package lists...
+testfailureequal 'Reading package lists...
 Building dependency tree...
 E: Unable to locate package depender-x64:i386' aptget install depender-x64:i386 -s
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following NEW packages will be installed:
   foo-native-depender
@@ -289,7 +289,7 @@ The following NEW packages will be installed:
 Inst foo-native-depender (1 unstable [amd64])
 Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following packages will be REMOVED:
   libold:i386
@@ -300,7 +300,7 @@ Remv libold:i386 [1]
 Inst breaker-x32 (1 unstable [amd64])
 Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 The following packages will be REMOVED:
   libold
@@ -311,7 +311,7 @@ Remv libold [1]
 Inst breaker-x64 (1 unstable [amd64])
 Conf breaker-x64 (1 unstable [amd64])' aptget install breaker-x64:amd64 -s
 
-testequal 'Reading package lists...
+testfailureequal 'Reading package lists...
 Building dependency tree...
 Some packages could not be installed. This may mean that you have
 requested an impossible situation or if you are using the unstable