* [gentoo-commits] proj/portage:master commit in: pym/portage/tests/resolver/, man/, pym/_emerge/
@ 2017-03-08 19:20 Zac Medico
0 siblings, 0 replies; 2+ messages in thread
From: Zac Medico @ 2017-03-08 19:20 UTC (permalink / raw
To: gentoo-commits
commit: 852c729bdef3d4c2e2d459a43dc21f0a05dfa2ba
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 4 06:24:21 2017 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Mar 8 19:19:53 2017 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=852c729b
emerge: auto-enable --with-bdeps if --usepkg is not enabled (bug 598444)
It's useful to automatically enable --with-bdeps so that @world updates
will update all packages that are not eligible for removal by
emerge --depclean. However, many users of binary packages do not want
unnecessary build time dependencies installed, therefore do not
auto-enable --with-bdeps for installation actions when the --usepkg
option is enabled.
A new --with-bdeps-auto=<y|n> option is provided, making it possible to
enable or disable the program logic that causes --with-bdeps to be
automatically enabled. Use --with-bdeps-auto=n to prevent --with-bdeps
from being automatically enabled for installation actions. This is useful
for some rare cases in which --with-bdeps triggers unsolvable dependency
conflicts (and putting --with-bdeps=n in EMERGE_DEFAULT_OPTS would cause
undesirable --depclean behavior).
X-Gentoo-bug: 598444
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=598444
Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>
man/emerge.1 | 37 +++-
pym/_emerge/create_depgraph_params.py | 5 +
pym/_emerge/depgraph.py | 4 +-
pym/_emerge/main.py | 5 +
pym/portage/tests/resolver/ResolverPlayground.py | 5 +
pym/portage/tests/resolver/test_bdeps.py | 215 +++++++++++++++++++++++
6 files changed, 266 insertions(+), 5 deletions(-)
diff --git a/man/emerge.1 b/man/emerge.1
index 5b6122023..7db427199 100644
--- a/man/emerge.1
+++ b/man/emerge.1
@@ -986,13 +986,44 @@ The default is set to "y" (on).
.TP
.BR "\-\-with\-bdeps < y | n >"
In dependency calculations, pull in build time dependencies
-that are not strictly required. This defaults to \'n\' for
-installation actions, meaning they will not be installed, and
-\'y\' for the \fB\-\-depclean\fR action, meaning they will not be removed.
+that are not strictly required. This option is automatically enabled for
+installation actions, meaning they will be installed, and defaults to
+\(aqy\(aq for the \fB\-\-depclean\fR action, meaning they will not be
+removed. In order to prevent the \fB\-\-with\-bdeps\fR option from being
+automatically enabled for installation actions, specify
+\fB\-\-with\-bdeps\-auto=n\fR in either the command line or
+\fBEMERGE_DEFAULT_OPTS\fR.
+
+Since many users of binary packages do not want unnecessary build time
+dependencies installed, this option is not automatically enabled for
+installation actions when the \fB\-\-usepkg\fR option is enabled. In
+order to pull in build time dependencies for binary packages with
+\fB\-\-usepkg\fR, \fB\-\-with\-bdeps=y\fR must be specified explicitly.
+This also applies to options that enable the \fB\-\-usepkg\fR option
+implicitly, such as \fB\-\-getbinpkg\fR.
+
This setting can be added to
\fBEMERGE_DEFAULT_OPTS\fR (see make.conf(5)) and later overridden via the
command line.
.TP
+.BR "\-\-with\-bdeps\-auto < y | n >"
+This option is used to enable or disable the program logic that causes
+\fB\-\-with\-bdeps\fR is to be automatically enabled for installation
+actions. This option is enabled by default. Use
+\fB\-\-with\-bdeps\-auto=n\fR to prevent \fB\-\-with\-bdeps\fR from
+being automatically enabled for installation actions. This setting can
+be added to \fBEMERGE_DEFAULT_OPTS\fR (see make.conf(5)) and later
+overridden via the command line.
+
+\fBNOTE:\fR The program logic that causes \fB\-\-with\-bdeps\fR to be
+automatically enabled for installation actions does not affect removal
+actions such as the \fB\-\-depclean\fR action. Therefore, when
+\fB\-\-with\-bdeps\-auto=n\fR is specified in \fBEMERGE_DEFAULT_OPTS\fR,
+it does not affect the default \fB\-\-with\-bdeps=y\fR setting that
+applies to the \fB\-\-depclean\fR action. The default
+\fB\-\-with\-bdeps=y\fR setting that applies to the \fB\-\-depclean\fR
+action can be overridden only by specifying \fB\-\-with\-bdeps=n\fR.
+.TP
.BR "\-\-with\-test\-deps [ y | n ]"
For packages matched by arguments, this option will pull in dependencies
that are conditional on the "test" USE flag, even if "test" is not
diff --git a/pym/_emerge/create_depgraph_params.py b/pym/_emerge/create_depgraph_params.py
index 2c6492883..cdea029ba 100644
--- a/pym/_emerge/create_depgraph_params.py
+++ b/pym/_emerge/create_depgraph_params.py
@@ -13,6 +13,8 @@ def create_depgraph_params(myopts, myaction):
# deep: go into the dependencies of already merged packages
# empty: pretend nothing is merged
# complete: completely account for all known dependencies
+ # bdeps: satisfy build time dependencies of packages that are
+ # already built, even though they are not strictly required
# remove: build graph for use in removing packages
# rebuilt_binaries: replace installed packages with rebuilt binaries
# rebuild_if_new_slot: rebuild or reinstall packages when
@@ -32,6 +34,9 @@ def create_depgraph_params(myopts, myaction):
bdeps = myopts.get("--with-bdeps")
if bdeps is not None:
myparams["bdeps"] = bdeps
+ elif myaction == "remove" or (
+ myopts.get("--with-bdeps-auto") != "n" and "--usepkg" not in myopts):
+ myparams["bdeps"] = "auto"
ignore_built_slot_operator_deps = myopts.get("--ignore-built-slot-operator-deps")
if ignore_built_slot_operator_deps is not None:
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index ce0fde156..02a32260a 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -2362,7 +2362,7 @@ class depgraph(object):
if ebuild is None:
changed = False
else:
- if self._dynamic_config.myparams.get("bdeps", "n") == "y":
+ if self._dynamic_config.myparams.get("bdeps") in ("y", "auto"):
depvars = Package._dep_keys
else:
depvars = Package._runtime_keys
@@ -2998,7 +2998,7 @@ class depgraph(object):
ignore_build_time_deps = False
if pkg.built and not removal_action:
- if self._dynamic_config.myparams.get("bdeps", "n") == "y":
+ if self._dynamic_config.myparams.get("bdeps") in ("y", "auto"):
# Pull in build time deps as requested, but marked them as
# "optional" since they are not strictly required. This allows
# more freedom in the merge order calculation for solving
diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
index a83b328aa..76e963ac9 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -516,6 +516,11 @@ def parse_opts(tmpcmdline, silent=False):
"help":"include unnecessary build time dependencies",
"choices":("y", "n")
},
+ "--with-bdeps-auto": {
+ "help":("automatically enable --with-bdeps for installation"
+ " actions, unless --usepkg is enabled"),
+ "choices":("y", "n")
+ },
"--reinstall": {
"help":"specify conditions to trigger package reinstallation",
"choices":["changed-use"]
diff --git a/pym/portage/tests/resolver/ResolverPlayground.py b/pym/portage/tests/resolver/ResolverPlayground.py
index d1434f724..d8037194b 100644
--- a/pym/portage/tests/resolver/ResolverPlayground.py
+++ b/pym/portage/tests/resolver/ResolverPlayground.py
@@ -558,6 +558,7 @@ class ResolverPlaygroundTestCase(object):
def __init__(self, request, **kwargs):
self.all_permutations = kwargs.pop("all_permutations", False)
self.ignore_mergelist_order = kwargs.pop("ignore_mergelist_order", False)
+ self.ignore_cleanlist_order = kwargs.pop("ignore_cleanlist_order", False)
self.ambiguous_merge_order = kwargs.pop("ambiguous_merge_order", False)
self.ambiguous_slot_collision_solutions = kwargs.pop("ambiguous_slot_collision_solutions", False)
self.check_repo_names = kwargs.pop("check_repo_names", False)
@@ -675,6 +676,10 @@ class ResolverPlaygroundTestCase(object):
str((node1, node2))) + \
", got: " + str(got))
+ elif key == "cleanlist" and self.ignore_cleanlist_order:
+ got = set(got)
+ expected = set(expected)
+
elif key == "slot_collision_solutions" and \
self.ambiguous_slot_collision_solutions:
# Tests that use all_permutations can have multiple
diff --git a/pym/portage/tests/resolver/test_bdeps.py b/pym/portage/tests/resolver/test_bdeps.py
new file mode 100644
index 000000000..c0d64991c
--- /dev/null
+++ b/pym/portage/tests/resolver/test_bdeps.py
@@ -0,0 +1,215 @@
+# Copyright 2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (
+ ResolverPlayground,
+ ResolverPlaygroundTestCase,
+)
+
+class BdepsTestCase(TestCase):
+
+ def testImageMagickUpdate(self):
+
+ ebuilds = {
+ "app-misc/A-1" : {
+ "EAPI": "6",
+ "DEPEND": "app-misc/B",
+ "RDEPEND": "app-misc/C",
+ },
+
+ "app-misc/B-1" : {
+ "EAPI": "6"
+ },
+ "app-misc/B-2" : {
+ "EAPI": "6",
+ },
+
+ "app-misc/C-1" : {
+ "EAPI": "6",
+ "DEPEND": "app-misc/D",
+ },
+ "app-misc/C-2" : {
+ "EAPI": "6",
+ "DEPEND": "app-misc/D",
+ },
+
+ "app-misc/D-1" : {
+ "EAPI": "6",
+ },
+ "app-misc/D-2" : {
+ "EAPI": "6",
+ },
+ }
+
+ installed = {
+ "app-misc/A-1" : {
+ "EAPI": "6",
+ "DEPEND": "app-misc/B",
+ "RDEPEND": "app-misc/C",
+ },
+
+ "app-misc/B-1" : {
+ "EAPI": "6",
+ },
+ "app-misc/C-1" : {
+ "EAPI": "6",
+ "DEPEND": "app-misc/D",
+ },
+
+ "app-misc/D-1" : {
+ "EAPI": "6",
+ },
+ }
+
+ binpkgs = {
+ "app-misc/A-1" : {
+ "EAPI": "6",
+ "DEPEND": "app-misc/B",
+ "RDEPEND": "app-misc/C",
+ },
+
+ "app-misc/B-1" : {
+ "EAPI": "6",
+ },
+ "app-misc/B-2" : {
+ "EAPI": "6",
+ },
+
+ "app-misc/C-1" : {
+ "EAPI": "6",
+ "DEPEND": "app-misc/D",
+ },
+ "app-misc/C-2" : {
+ "EAPI": "6",
+ "DEPEND": "app-misc/D",
+ },
+
+ "app-misc/D-1" : {
+ "EAPI": "6",
+ },
+ "app-misc/D-2" : {
+ "EAPI": "6",
+ },
+ }
+
+ world = (
+ "app-misc/A",
+ )
+
+ test_cases = (
+
+ # Enable --with-bdeps automatically when
+ # --usepkg has not been specified.
+ ResolverPlaygroundTestCase(
+ ["@world"],
+ options = {
+ "--update": True,
+ "--deep": True,
+ },
+ success = True,
+ ambiguous_merge_order = True,
+ mergelist = [
+ "app-misc/D-2",
+ ("app-misc/B-2", "app-misc/C-2"),
+ ]
+ ),
+
+ # Use --with-bdeps-auto=n to prevent --with-bdeps
+ # from being enabled automatically.
+ ResolverPlaygroundTestCase(
+ ["@world"],
+ options = {
+ "--update": True,
+ "--deep": True,
+ "--with-bdeps-auto": "n",
+ },
+ success = True,
+ mergelist = [
+ "app-misc/D-2",
+ "app-misc/C-2",
+ ]
+ ),
+
+ # Do not enable --with-bdeps automatically when
+ # --usepkg has been specified, since many users of binary
+ # packages do not want unnecessary build time dependencies
+ # installed. In this case we miss an update to
+ # app-misc/D-2, since DEPEND is not pulled in for
+ # the [binary]app-misc/C-2 update.
+ ResolverPlaygroundTestCase(
+ ["@world"],
+ options = {
+ "--update": True,
+ "--deep": True,
+ "--usepkg": True,
+ },
+ success = True,
+ mergelist = [
+ "[binary]app-misc/C-2",
+ ]
+ ),
+
+ # Use --with-bdeps=y to pull in build-time dependencies of
+ # binary packages.
+ ResolverPlaygroundTestCase(
+ ["@world"],
+ options = {
+ "--update": True,
+ "--deep": True,
+ "--usepkg": True,
+ "--with-bdeps": "y",
+ },
+ success = True,
+ ambiguous_merge_order = True,
+ mergelist = [
+ (
+ "[binary]app-misc/D-2",
+ "[binary]app-misc/B-2",
+ "[binary]app-misc/C-2",
+ ),
+ ]
+ ),
+
+ # For --depclean, do not remove build-time dependencies by
+ # default. Specify --with-bdeps-auto=n, in order to
+ # demonstrate that it does not affect removal actions.
+ ResolverPlaygroundTestCase(
+ [],
+ options = {
+ "--depclean": True,
+ "--with-bdeps-auto": "n",
+ },
+ success = True,
+ cleanlist = [],
+ ),
+
+ # For --depclean, remove build-time dependencies if
+ # --with-bdeps=n has been specified.
+ ResolverPlaygroundTestCase(
+ [],
+ options = {
+ "--depclean": True,
+ "--with-bdeps": "n",
+ },
+ success = True,
+ ignore_cleanlist_order = True,
+ cleanlist = [
+ "app-misc/D-1",
+ "app-misc/B-1",
+ ],
+ ),
+ )
+
+ playground = ResolverPlayground(debug=False,
+ ebuilds=ebuilds, installed=installed,
+ binpkgs=binpkgs, world=world)
+ try:
+ for test_case in test_cases:
+ playground.run_TestCase(test_case)
+ self.assertEqual(test_case.test_success, True,
+ test_case.fail_msg)
+ finally:
+ # Disable debug so that cleanup works.
+ playground.debug = False
+ playground.cleanup()
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/tests/resolver/, man/, pym/_emerge/
@ 2018-03-26 17:39 Zac Medico
0 siblings, 0 replies; 2+ messages in thread
From: Zac Medico @ 2018-03-26 17:39 UTC (permalink / raw
To: gentoo-commits
commit: 6a810e0cdb586fb05f210a1c7ba2b5401f38c332
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Mar 21 18:50:43 2018 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Mar 26 17:35:33 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=6a810e0c
emerge: add --ignore-world [ y | n ] option (bug 608564)
Ignore the @world package set and its dependencies. This may be useful
if there is a desire to perform an action even though it might break
the dependencies of some installed packages (it might also remove
installed packages in order to solve blockers). This also alters the
behavior of --complete-graph options so that only deep dependencies
of packages given as arguments are included in the dependency graph.
This option may be useful as an alternative to --nodeps in cases where
it is desirable to account for dependencies of packages given as
arguments.
Bug: https://bugs.gentoo.org/608564
man/emerge.1 | 19 ++++++++++++++++++-
pym/_emerge/create_depgraph_params.py | 6 +++++-
pym/_emerge/depgraph.py | 8 ++++++--
pym/_emerge/main.py | 11 ++++++++++-
pym/portage/tests/resolver/test_complete_graph.py | 20 +++++++++++++++++++-
5 files changed, 58 insertions(+), 6 deletions(-)
diff --git a/man/emerge.1 b/man/emerge.1
index a17b65ed2..27a1193fe 100644
--- a/man/emerge.1
+++ b/man/emerge.1
@@ -1,4 +1,4 @@
-.TH "EMERGE" "1" "Jul 2016" "Portage VERSION" "Portage"
+.TH "EMERGE" "1" "Mar 2018" "Portage VERSION" "Portage"
.SH "NAME"
emerge \- Command\-line interface to the Portage system
.SH "SYNOPSIS"
@@ -630,6 +630,23 @@ Therefore, \fB\-\-usepkgonly\fR (or \fB\-\-getbinpkgonly\fR) must be
used in order to enable soname depedency resolution when installing
packages.
.TP
+.BR "\-\-ignore\-world [ y | n ]"
+Ignore the @world package set and its dependencies. This may be useful
+if there is a desire to perform an action even though it might break
+the dependencies of some installed packages (it might also remove
+installed packages in order to solve blockers). This also alters the
+behavior of \fB\-\-complete\-graph\fR options so that only deep
+dependencies of packages given as arguments are included in the
+dependency graph. This option may be useful as an alternative to
+\fB\-\-nodeps\fR in cases where it is desirable to account for
+dependencies of packages given as arguments.
+
+\fBWARNING:\fR
+This option is intended to be used only with great caution, since it is
+possible for it to make nonsensical changes which may lead to system
+breakage. Therefore, it is advisable to use \fB\-\-ask\fR together with
+this option.
+.TP
.BR \-j\ [JOBS] ", " \-\-jobs[=JOBS]
Specifies the number of packages to build simultaneously. If this option is
given without an argument, emerge will not limit the number of jobs that can
diff --git a/pym/_emerge/create_depgraph_params.py b/pym/_emerge/create_depgraph_params.py
index fc7fa60d7..ff18f3acc 100644
--- a/pym/_emerge/create_depgraph_params.py
+++ b/pym/_emerge/create_depgraph_params.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2014 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import logging
@@ -26,6 +26,7 @@ def create_depgraph_params(myopts, myaction):
# ignore_soname_deps: ignore the soname dependencies of built
# packages, so that they do not trigger dependency resolution
# failures, or cause packages to be rebuilt or replaced.
+ # ignore_world: ignore the @world package set and its dependencies
# with_test_deps: pull in test deps for packages matched by arguments
# changed_deps: rebuild installed packages with outdated deps
# changed_deps_report: report installed packages with outdated deps
@@ -56,6 +57,9 @@ def create_depgraph_params(myopts, myaction):
myparams["selective"] = True
return myparams
+ if myopts.get('--ignore-world') is True:
+ myparams['ignore_world'] = True
+
rebuild_if_new_slot = myopts.get('--rebuild-if-new-slot')
if rebuild_if_new_slot is not None:
myparams['rebuild_if_new_slot'] = rebuild_if_new_slot
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 6c728684f..f7ea27c37 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -163,7 +163,10 @@ class _frozen_depgraph_config(object):
self.trees[myroot]["bintree"] = DummyTree(
DbapiProvidesIndex(trees[myroot]["bintree"].dbapi))
- self._required_set_names = set(["world"])
+ if params.get("ignore_world", False):
+ self._required_set_names = set()
+ else:
+ self._required_set_names = set(["world"])
atoms = ' '.join(myopts.get("--exclude", [])).split()
self.excluded_pkgs = _wildcard_set(atoms)
@@ -7554,6 +7557,7 @@ class depgraph(object):
ignored_uninstall_tasks = set()
have_uninstall_task = False
complete = "complete" in self._dynamic_config.myparams
+ ignore_world = self._dynamic_config.myparams.get("ignore_world", False)
asap_nodes = []
def get_nodes(**kwargs):
@@ -7971,7 +7975,7 @@ class depgraph(object):
# detected as early as possible, which makes it possible
# to avoid calling self._complete_graph() when it is
# unnecessary due to blockers triggering an abortion.
- if not complete:
+ if not (complete or ignore_world):
# For packages in the world set, go ahead an uninstall
# when necessary, as long as the atom will be satisfied
# in the final state.
diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
index fbc2ce01c..147472cbd 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2017 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from __future__ import print_function
@@ -146,6 +146,7 @@ def insert_optional_args(args):
'--fuzzy-search' : y_or_n,
'--getbinpkg' : y_or_n,
'--getbinpkgonly' : y_or_n,
+ '--ignore-world' : y_or_n,
'--jobs' : valid_integers,
'--keep-going' : y_or_n,
'--load-average' : valid_floats,
@@ -503,6 +504,11 @@ def parse_opts(tmpcmdline, silent=False):
"choices": y_or_n
},
+ "--ignore-world": {
+ "help" : "ignore the @world package set and its dependencies",
+ "choices" : true_y_or_n
+ },
+
"--jobs": {
"shortopt" : "-j",
@@ -919,6 +925,9 @@ def parse_opts(tmpcmdline, silent=False):
else:
myoptions.getbinpkgonly = None
+ if myoptions.ignore_world in true_y:
+ myoptions.ignore_world = True
+
if myoptions.keep_going in true_y:
myoptions.keep_going = True
else:
diff --git a/pym/portage/tests/resolver/test_complete_graph.py b/pym/portage/tests/resolver/test_complete_graph.py
index 95b1f8809..6b5f54a3a 100644
--- a/pym/portage/tests/resolver/test_complete_graph.py
+++ b/pym/portage/tests/resolver/test_complete_graph.py
@@ -1,4 +1,4 @@
-# Copyright 2011-2012 Gentoo Foundation
+# Copyright 2011-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from portage.tests import TestCase
@@ -59,6 +59,12 @@ class CompleteGraphTestCase(TestCase):
success = True,
),
+ ResolverPlaygroundTestCase(
+ ["dev-libs/libxml2"],
+ options = {"--ignore-world" : True},
+ mergelist = ["dev-libs/libxml2-2.8.0"],
+ success = True,
+ ),
)
playground = ResolverPlayground(ebuilds=ebuilds,
@@ -97,6 +103,12 @@ class CompleteGraphTestCase(TestCase):
mergelist = ["sys-libs/x-2"],
success = True,
),
+ ResolverPlaygroundTestCase(
+ [">=sys-libs/x-2"],
+ options = {"--ignore-world" : True},
+ mergelist = ["sys-libs/x-2"],
+ success = True,
+ ),
ResolverPlaygroundTestCase(
[">=sys-libs/x-2"],
options = {"--complete-graph-if-new-ver" : "y"},
@@ -110,6 +122,12 @@ class CompleteGraphTestCase(TestCase):
mergelist = ["sys-libs/x-0.1"],
success = True,
),
+ ResolverPlaygroundTestCase(
+ ["<sys-libs/x-1"],
+ options = {"--ignore-world" : True},
+ mergelist = ["sys-libs/x-0.1"],
+ success = True,
+ ),
ResolverPlaygroundTestCase(
["<sys-libs/x-1"],
options = {"--complete-graph-if-new-ver" : "y"},
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-03-26 17:39 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-26 17:39 [gentoo-commits] proj/portage:master commit in: pym/portage/tests/resolver/, man/, pym/_emerge/ Zac Medico
-- strict thread matches above, loose matches on Subject: below --
2017-03-08 19:20 Zac Medico
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox