Просмотр исходного кода

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
Родитель
Сommit
14bed2c010
2 измененных файлов с 42 добавлено и 13 удалено
  1. 29 0
      apt-pkg/edsp.cc
  2. 13 13
      test/integration/test-specific-architecture-dependencies

+ 29 - 0
apt-pkg/edsp.cc

@@ -1218,6 +1218,35 @@ bool EIPP::WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress * const
 	       pkgset[PV->ID] = true;
 	       pkgset[PV->ID] = true;
 	 }
 	 }
 	 pkgset[P->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)
    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 libc6:i386 (1 unstable [i386])
 Conf depender-x32:i386 (1 unstable [i386])' aptget install depender-x32:i386 -s
 Conf depender-x32:i386 (1 unstable [i386])' aptget install depender-x32:i386 -s
 
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 The following additional packages will be installed:
 The following additional packages will be installed:
   libc6:i386
   libc6:i386
@@ -81,7 +81,7 @@ Inst depender-x32 (1 unstable [amd64])
 Conf libc6:i386 (1 unstable [i386])
 Conf libc6:i386 (1 unstable [i386])
 Conf depender-x32 (1 unstable [amd64])' aptget install depender-x32:amd64 -s
 Conf depender-x32 (1 unstable [amd64])' aptget install depender-x32:amd64 -s
 
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 The following additional packages will be installed:
 The following additional packages will be installed:
   libc6
   libc6
@@ -93,7 +93,7 @@ Inst depender-x64 (1 unstable [amd64])
 Conf libc6 (1 unstable [amd64])
 Conf libc6 (1 unstable [amd64])
 Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64:amd64 -s
 Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64:amd64 -s
 
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 The following additional packages will be installed:
 The following additional packages will be installed:
   libc6
   libc6
@@ -105,7 +105,7 @@ Inst depender-x64:i386 (1 unstable [i386])
 Conf libc6 (1 unstable [amd64])
 Conf libc6 (1 unstable [amd64])
 Conf depender-x64:i386 (1 unstable [i386])' aptget install depender-x64:i386 -s
 Conf depender-x64:i386 (1 unstable [i386])' aptget install depender-x64:i386 -s
 
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 The following packages will be REMOVED:
 The following packages will be REMOVED:
   libold:i386 libold
   libold:i386 libold
@@ -128,7 +128,7 @@ Remv libold:i386 [1]
 Inst breaker-x32 (1 unstable [amd64])
 Inst breaker-x32 (1 unstable [amd64])
 Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s
 Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s
 
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 The following packages will be REMOVED:
 The following packages will be REMOVED:
   libold:i386
   libold:i386
@@ -139,7 +139,7 @@ Remv libold:i386 [1]
 Inst breaker-x32:i386 (1 unstable [i386])
 Inst breaker-x32:i386 (1 unstable [i386])
 Conf breaker-x32:i386 (1 unstable [i386])' aptget install breaker-x32:i386 -s
 Conf breaker-x32:i386 (1 unstable [i386])' aptget install breaker-x32:i386 -s
 
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 The following packages will be REMOVED:
 The following packages will be REMOVED:
   libold
   libold
@@ -213,7 +213,7 @@ The following NEW packages will be installed:
 Inst foo-native-depender (1 unstable [amd64])
 Inst foo-native-depender (1 unstable [amd64])
 Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s
 Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s
 
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 The following NEW packages will be installed:
 The following NEW packages will be installed:
   foo-foreign-depender:i386
   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'
 msgmsg 'switch to single architecture'
 configarchitecture 'amd64'
 configarchitecture 'amd64'
 
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 The following additional packages will be installed:
 The following additional packages will be installed:
   libc6
   libc6
@@ -277,11 +277,11 @@ Inst depender-x64 (1 unstable [amd64])
 Conf libc6 (1 unstable [amd64])
 Conf libc6 (1 unstable [amd64])
 Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64 -s
 Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64 -s
 
 
-testequal 'Reading package lists...
+testfailureequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 E: Unable to locate package depender-x64:i386' aptget install depender-x64:i386 -s
 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...
 Building dependency tree...
 The following NEW packages will be installed:
 The following NEW packages will be installed:
   foo-native-depender
   foo-native-depender
@@ -289,7 +289,7 @@ The following NEW packages will be installed:
 Inst foo-native-depender (1 unstable [amd64])
 Inst foo-native-depender (1 unstable [amd64])
 Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s
 Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s
 
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 The following packages will be REMOVED:
 The following packages will be REMOVED:
   libold:i386
   libold:i386
@@ -300,7 +300,7 @@ Remv libold:i386 [1]
 Inst breaker-x32 (1 unstable [amd64])
 Inst breaker-x32 (1 unstable [amd64])
 Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s
 Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s
 
 
-testequal 'Reading package lists...
+testsuccessequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 The following packages will be REMOVED:
 The following packages will be REMOVED:
   libold
   libold
@@ -311,7 +311,7 @@ Remv libold [1]
 Inst breaker-x64 (1 unstable [amd64])
 Inst breaker-x64 (1 unstable [amd64])
 Conf breaker-x64 (1 unstable [amd64])' aptget install breaker-x64:amd64 -s
 Conf breaker-x64 (1 unstable [amd64])' aptget install breaker-x64:amd64 -s
 
 
-testequal 'Reading package lists...
+testfailureequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 Some packages could not be installed. This may mean that you have
 Some packages could not be installed. This may mean that you have
 requested an impossible situation or if you are using the unstable
 requested an impossible situation or if you are using the unstable