From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1RDKEq-0005Sj-3q for garchives@archives.gentoo.org; Mon, 10 Oct 2011 18:06:08 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id C868A21C0DC; Mon, 10 Oct 2011 18:06:00 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 40D2621C103 for ; Mon, 10 Oct 2011 18:06:00 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 3E4821B4010 for ; Mon, 10 Oct 2011 18:05:59 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id A38BA80042 for ; Mon, 10 Oct 2011 18:05:57 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: Subject: [gentoo-commits] proj/portage:master commit in: man/, pym/_emerge/ X-VCS-Repository: proj/portage X-VCS-Files: man/emerge.1 pym/_emerge/FakeVartree.py pym/_emerge/Scheduler.py pym/_emerge/create_depgraph_params.py pym/_emerge/depgraph.py pym/_emerge/main.py X-VCS-Directories: man/ pym/_emerge/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: f8e0c75e0952d04cb518ad0914ad440f1b43f52d Date: Mon, 10 Oct 2011 18:05:57 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: 6548d565a590eef73e5ce1d4003c4edd commit: f8e0c75e0952d04cb518ad0914ad440f1b43f52d Author: Zac Medico gentoo org> AuthorDate: Mon Oct 10 18:01:36 2011 +0000 Commit: Zac Medico gentoo org> CommitDate: Mon Oct 10 18:01:36 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3Df8e0c75e Add emerge --dynamic-deps option. This makes it possible to disable the dynamic dependency updates that FakeVartree performs by default. WARNING: If --dynamic-deps is disabled, then it is necessary to ensure that an alternative method is used to handle package moves in dependencies of installed packages. Normally, this is handled by FEATURES=3D"fixpackages", which is enabled by default and may be disabled via make.conf(5). Alternatively, in order to manually apply package moves, run `emaint --fix moveinst` after each emerge --sync operation (see emaint(1)). --- man/emerge.1 | 16 ++++++++++++++++ pym/_emerge/FakeVartree.py | 7 +++++-- pym/_emerge/Scheduler.py | 3 ++- pym/_emerge/create_depgraph_params.py | 4 ++++ pym/_emerge/depgraph.py | 13 ++++++++++--- pym/_emerge/main.py | 6 ++++++ 6 files changed, 43 insertions(+), 6 deletions(-) diff --git a/man/emerge.1 b/man/emerge.1 index 62bfd5e..10be789 100644 --- a/man/emerge.1 +++ b/man/emerge.1 @@ -407,6 +407,22 @@ when FEATURES=3D"preserve\-libs" is enabled in \fBmake.conf\fR(5), since any libraries that have consumers will simply be preserved. .TP +.BR "\-\-dynamic\-deps < y | n >" +In dependency calculations, substitute the dependencies of installed +packages with the dependencies of corresponding unbuilt ebuilds from +source repositories. This causes the effective dependencies of +installed packages to vary dynamically when source ebuild dependencies +are modified. This option is enabled by default. + +\fBWARNING:\fR +If \-\-dynamic\-deps is disabled, then it is necessary to ensure that +an alternative method is used to handle package moves in dependencies +of installed packages. Normally, this is handled by +FEATURES=3D"fixpackages", which is enabled by default and may be +disabled via \fBmake.conf\fR(5). Alternatively, in order to manually +apply package moves, run `emaint \-\-fix moveinst` after each +emerge \-\-sync operation (see \fBemaint\fR(1)). +.TP .BR "\-\-emptytree " (\fB\-e\fR) Reinstalls target atoms and their entire deep dependency tree, as though no packages are currently diff --git a/pym/_emerge/FakeVartree.py b/pym/_emerge/FakeVartree.py index a11966f..a9c1b90 100644 --- a/pym/_emerge/FakeVartree.py +++ b/pym/_emerge/FakeVartree.py @@ -37,8 +37,10 @@ class FakeVartree(vartree): global updates are necessary (updates are performed when necessary if t= here is not a matching ebuild in the tree). Instances of this class are not populated until the sync() method is called.""" - def __init__(self, root_config, pkg_cache=3DNone, pkg_root_config=3DNon= e): + def __init__(self, root_config, pkg_cache=3DNone, pkg_root_config=3DNon= e, + dynamic_deps=3DTrue): self._root_config =3D root_config + self._dynamic_deps =3D dynamic_deps if pkg_root_config is None: pkg_root_config =3D self._root_config self._pkg_root_config =3D pkg_root_config @@ -60,7 +62,8 @@ class FakeVartree(vartree): # metadata. This ensures that the vardb lock is released ASAP, withou= t # being delayed in case cache generation is triggered. self._aux_get =3D self.dbapi.aux_get - self.dbapi.aux_get =3D self._aux_get_wrapper + if dynamic_deps: + self.dbapi.aux_get =3D self._aux_get_wrapper self._match =3D self.dbapi.match self.dbapi.match =3D self._match_wrapper self._aux_get_history =3D set() diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index a6dd98c..11a72f3 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -304,10 +304,11 @@ class Scheduler(PollScheduler): """ self._set_graph_config(graph_config) self._blocker_db =3D {} + dynamic_deps =3D myopts.get("--dynamic-deps", "y") !=3D "n" for root in self.trees: if graph_config is None: fake_vartree =3D FakeVartree(self.trees[root]["root_config"], - pkg_cache=3Dself._pkg_cache) + pkg_cache=3Dself._pkg_cache, dynamic_deps=3Ddynamic_deps) fake_vartree.sync() else: fake_vartree =3D graph_config.trees[root]['vartree'] diff --git a/pym/_emerge/create_depgraph_params.py b/pym/_emerge/create_d= epgraph_params.py index 42983fe..8f15c68 100644 --- a/pym/_emerge/create_depgraph_params.py +++ b/pym/_emerge/create_depgraph_params.py @@ -21,6 +21,10 @@ def create_depgraph_params(myopts, myaction): if bdeps is not None: myparams["bdeps"] =3D bdeps =20 + dynamic_deps =3D myopts.get("--dynamic-deps") + if dynamic_deps is not None: + myparams["dynamic_deps"] =3D dynamic_deps + if myaction =3D=3D "remove": myparams["remove"] =3D True myparams["complete"] =3D True diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index a409bed..ab62dc7 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -109,6 +109,7 @@ class _frozen_depgraph_config(object): # All Package instances self._pkg_cache =3D {} self._highest_license_masked =3D {} + dynamic_deps =3D myopts.get("--dynamic-deps", "y") !=3D "n" for myroot in trees: self.trees[myroot] =3D {} # Create a RootConfig instance that references @@ -122,7 +123,8 @@ class _frozen_depgraph_config(object): self.trees[myroot]["vartree"] =3D \ FakeVartree(trees[myroot]["root_config"], pkg_cache=3Dself._pkg_cache, - pkg_root_config=3Dself.roots[myroot]) + pkg_root_config=3Dself.roots[myroot], + dynamic_deps=3Ddynamic_deps) self.pkgsettings[myroot] =3D portage.config( clone=3Dself.trees[myroot]["vartree"].settings) =20 @@ -514,6 +516,8 @@ class depgraph(object): =20 for myroot in self._frozen_config.trees: =20 + dynamic_deps =3D self._dynamic_config.myparams.get( + "dynamic_deps", "y") !=3D "n" preload_installed_pkgs =3D \ "--nodeps" not in self._frozen_config.myopts =20 @@ -535,8 +539,11 @@ class depgraph(object): =20 for pkg in vardb: self._spinner_update() - # This triggers metadata updates via FakeVartree. - vardb.aux_get(pkg.cpv, []) + if dynamic_deps: + # This causes FakeVartree to update the + # Package instance dependencies via + # PackageVirtualDbapi.aux_update() + vardb.aux_get(pkg.cpv, []) fakedb.cpv_inject(pkg) =20 self._dynamic_config._vdb_loaded =3D True diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py index f4ea36c..ed07c09 100644 --- a/pym/_emerge/main.py +++ b/pym/_emerge/main.py @@ -684,6 +684,12 @@ def parse_opts(tmpcmdline, silent=3DFalse): "choices" : true_y_or_n }, =20 + "--dynamic-deps": { + "help": "substitute the dependencies of installed packages with the d= ependencies of unbuilt ebuilds", + "type": "choice", + "choices": y_or_n + }, + "--exclude": { "help" :"A space separated list of package names or slot atoms. " += \ "Emerge won't install any ebuild or binary package that " + \