Explorar o código

support APT::Get::Build-Dep-Automatic again in build-dep

In a249b3e6fd798935a02b769149c9791a6fa6ef16 I dropped with the manual
first resolver step also the support for installing build-deps as
automatic in such a way that it behaved like this option was enabled by
default.

Restoring support for it means that we go back to mark build-
dependencies as manually installed again by default and provide this
option to keep them as automatically installed.
David Kalnischkies %!s(int64=10) %!d(string=hai) anos
pai
achega
c97ae2a00f

+ 23 - 0
apt-private/private-source.cc

@@ -775,8 +775,31 @@ bool DoBuildDep(CommandLine &CmdL)
    }
    if (DoAutomaticRemove(Cache) == false)
       return false;
+
    {
       pkgDepCache::ActionGroup group(Cache);
+      if (_config->FindB("APT::Get::Build-Dep-Automatic", false) == false)
+      {
+	 for (auto const &pkg: removeAgain)
+	 {
+	    auto const instVer = Cache[pkg].InstVerIter(Cache);
+	    if (unlikely(instVer.end() == true))
+	       continue;
+	    for (auto D = instVer.DependsList(); D.end() != true; ++D)
+	    {
+	       if (D->Type != pkgCache::Dep::Depends || D.IsMultiArchImplicit())
+		  continue;
+	       APT::VersionList verlist = APT::VersionList::FromDependency(Cache, D, APT::CacheSetHelper::CANDIDATE);
+	       for (auto const &V : verlist)
+	       {
+		  auto const P = V.ParentPkg();
+		  if (Cache[P].InstallVer != V)
+		     continue;
+		  Cache->MarkAuto(P, false);
+	       }
+	    }
+	 }
+      }
       for (auto const &pkg: removeAgain)
 	 Cache->MarkDelete(pkg, false, 0, true);
    }

+ 24 - 0
test/integration/test-bug-720597-build-dep-purge

@@ -36,3 +36,27 @@ The following NEW packages will be installed:
 Purg pkga [1]
 Inst pkgb (1 stable [amd64])
 Conf pkgb (1 stable [amd64])' aptget build-dep pkgc -s --purge
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' apt autoremove -s
+testdpkgnotinstalled pkgb
+testsuccess apt build-dep pkgc -y -o Debug::pkgDepCache::AutoInstall=1 -o Debug::pkgDepCache::Marker=1
+testdpkginstalled pkgb
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' apt autoremove -s
+testsuccess apt purge pkgb pkgc -y
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' apt autoremove -s
+testsuccess apt build-dep pkgc -y -o APT::Get::Build-Dep-Automatic=true
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+  pkgb
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv pkgb [1]' apt autoremove -s