summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-02-17 05:30:40 +0000
committerZac Medico <zmedico@gentoo.org>2010-02-17 05:30:40 +0000
commitb4a4c9af72e036d8a0b2698c823cdf2979315369 (patch)
treecb7c0fdae31510b629343bda5f090a697a35dce2
parent345314c5b12eabfbccfcc67b886a30664cbd5aa6 (diff)
downloadportage-b4a4c9af72e036d8a0b2698c823cdf2979315369.tar.gz
portage-b4a4c9af72e036d8a0b2698c823cdf2979315369.tar.bz2
portage-b4a4c9af72e036d8a0b2698c823cdf2979315369.zip
Add @rebuilt-binaries set which uses BUILD_TIME to pull in binary packages
that have a different build time from a currently installed package of the exact same version. svn path=/main/trunk/; revision=15363
-rw-r--r--cnf/sets.conf6
-rw-r--r--pym/_emerge/depgraph.py5
-rw-r--r--pym/_emerge/main.py63
-rw-r--r--pym/portage/sets/dbapi.py25
4 files changed, 63 insertions, 36 deletions
diff --git a/cnf/sets.conf b/cnf/sets.conf
index 46c86e750..87280cef6 100644
--- a/cnf/sets.conf
+++ b/cnf/sets.conf
@@ -65,6 +65,12 @@ class = portage.sets.dbapi.OwnerSet
world-candidate = False
files = %(ROOT)slib/modules
+# Binary packages that have a different build time from a currently
+# installed package of the exact same version.
+[rebuilt-binaries]
+class = portage.sets.dbapi.RebuiltBinaries
+world-candidate = False
+
# Installed packages for which the highest visible ebuild
# version is lower than the currently installed version.
[downgrade]
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 7a4872424..38a48d6fe 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -229,11 +229,6 @@ class _dynamic_depgraph_config(object):
]["vartree"].dbapi._aux_cache_keys)
dbs.append((vardb, "installed", True, True, db_keys))
self._filtered_trees[myroot]["dbs"] = dbs
- if "--usepkg" in depgraph._frozen_config.myopts:
- depgraph._frozen_config._trees_orig[myroot
- ]["bintree"].populate(
- "--getbinpkg" in depgraph._frozen_config.myopts,
- "--getbinpkgonly" in depgraph._frozen_config.myopts)
class depgraph(object):
diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
index f66b0bb5c..f96654eea 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -1208,10 +1208,43 @@ def emerge_main():
config_protect_check(trees)
check_procfs()
+ if "getbinpkg" in settings.features:
+ myopts["--getbinpkg"] = True
+
+ if "--getbinpkgonly" in myopts:
+ myopts["--getbinpkg"] = True
+
+ if "--getbinpkgonly" in myopts:
+ myopts["--usepkgonly"] = True
+
+ if "--getbinpkg" in myopts:
+ myopts["--usepkg"] = True
+
+ if "--usepkgonly" in myopts:
+ myopts["--usepkg"] = True
+
+ if "buildpkg" in settings.features or "--buildpkgonly" in myopts:
+ myopts["--buildpkg"] = True
+
+ if "--buildpkgonly" in myopts:
+ # --buildpkgonly will not merge anything, so
+ # it cancels all binary package options.
+ for opt in ("--getbinpkg", "--getbinpkgonly",
+ "--usepkg", "--usepkgonly"):
+ myopts.pop(opt, None)
+
for mytrees in trees.values():
mydb = mytrees["porttree"].dbapi
# Freeze the portdbapi for performance (memoize all xmatch results).
mydb.freeze()
+
+ if "--usepkg" in myopts:
+ # Populate the bintree with current --getbinpkg setting.
+ # This needs to happen before expand_set_arguments(), in case
+ # any sets use the bintree.
+ mytrees["bintree"].populate(
+ getbinpkgs="--getbinpkg" in myopts)
+
del mytrees, mydb
if "moo" in myfiles:
@@ -1270,42 +1303,12 @@ def emerge_main():
spinner.update = spinner.update_quiet
portage.util.noiselimit = -1
- # Always create packages if FEATURES=buildpkg
- # Imply --buildpkg if --buildpkgonly
- if ("buildpkg" in settings.features) or ("--buildpkgonly" in myopts):
- if "--buildpkg" not in myopts:
- myopts["--buildpkg"] = True
-
- # Always try and fetch binary packages if FEATURES=getbinpkg
- if ("getbinpkg" in settings.features):
- myopts["--getbinpkg"] = True
-
- if "--buildpkgonly" in myopts:
- # --buildpkgonly will not merge anything, so
- # it cancels all binary package options.
- for opt in ("--getbinpkg", "--getbinpkgonly",
- "--usepkg", "--usepkgonly"):
- myopts.pop(opt, None)
-
if "--fetch-all-uri" in myopts:
myopts["--fetchonly"] = True
if "--skipfirst" in myopts and "--resume" not in myopts:
myopts["--resume"] = True
- if ("--getbinpkgonly" in myopts) and not ("--usepkgonly" in myopts):
- myopts["--usepkgonly"] = True
-
- if ("--getbinpkgonly" in myopts) and not ("--getbinpkg" in myopts):
- myopts["--getbinpkg"] = True
-
- if ("--getbinpkg" in myopts) and not ("--usepkg" in myopts):
- myopts["--usepkg"] = True
-
- # Also allow -K to apply --usepkg/-k
- if ("--usepkgonly" in myopts) and not ("--usepkg" in myopts):
- myopts["--usepkg"] = True
-
# Allow -p to remove --ask
if "--pretend" in myopts:
myopts.pop("--ask", None)
diff --git a/pym/portage/sets/dbapi.py b/pym/portage/sets/dbapi.py
index a5d7c7153..3ece6f642 100644
--- a/pym/portage/sets/dbapi.py
+++ b/pym/portage/sets/dbapi.py
@@ -21,7 +21,7 @@ class EverythingSet(PackageSet):
"atoms to match all installed packages"
_filter = None
- def __init__(self, vdbapi):
+ def __init__(self, vdbapi, **kwargs):
super(EverythingSet, self).__init__()
self._db = vdbapi
@@ -313,3 +313,26 @@ class AgeSet(EverythingSet):
return AgeSet(vardb=trees["vartree"].dbapi, mode=mode, age=age)
singleBuilder = classmethod(singleBuilder)
+
+class RebuiltBinaries(EverythingSet):
+ _operations = ('merge',)
+ _aux_keys = ('BUILD_TIME',)
+
+ def __init__(self, vardb, bindb=None):
+ super(RebuiltBinaries, self).__init__(vardb, bindb=bindb)
+ self._bindb = bindb
+
+ def _filter(self, atom):
+ cpv = self._db.match(atom)[0]
+ inst_build_time, = self._db.aux_get(cpv, self._aux_keys)
+ try:
+ bin_build_time, = self._bindb.aux_get(cpv, self._aux_keys)
+ except KeyError:
+ return False
+ return inst_build_time != bin_build_time
+
+ def singleBuilder(cls, options, settings, trees):
+ return RebuiltBinaries(trees["vartree"].dbapi,
+ bindb=trees["bintree"].dbapi)
+
+ singleBuilder = classmethod(singleBuilder)