From b4a4c9af72e036d8a0b2698c823cdf2979315369 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Wed, 17 Feb 2010 05:30:40 +0000 Subject: 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 --- cnf/sets.conf | 6 +++++ pym/_emerge/depgraph.py | 5 ---- pym/_emerge/main.py | 63 +++++++++++++++++++++++++---------------------- pym/portage/sets/dbapi.py | 25 ++++++++++++++++++- 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) -- cgit v1.2.3-1-g7c22