summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid James <davidjames@google.com>2011-04-07 16:49:58 -0700
committerZac Medico <zmedico@gentoo.org>2011-04-13 00:49:51 -0700
commit90b7a235a290e16b0ec151d77e8166c62c1745aa (patch)
tree0748a66a59cbb279427247061afcd9e3463fc169
parenta4508f43bd7a6cb7e3ac5e0f40fbbe30e0f18d31 (diff)
downloadportage-90b7a235a290e16b0ec151d77e8166c62c1745aa.tar.gz
portage-90b7a235a290e16b0ec151d77e8166c62c1745aa.tar.bz2
portage-90b7a235a290e16b0ec151d77e8166c62c1745aa.zip
Add force-mirror FEATURE.
force-mirror: Only fetch files from configured mirrors, ignoring SRC_URI, except when mirror is in the ebuild(5) RESTRICT variable. BUG=chromium-os:13221 TEST=Test that ebuilds now fail with FEATURES=force-mirror if files are not in the configured mirror. Change-Id: I8484d5af8dff97b431398030b33c024ff1295ba0 Review URL: http://codereview.chromium.org/6677171
-rw-r--r--man/make.conf.54
-rw-r--r--pym/portage/const.py4
-rw-r--r--pym/portage/package/ebuild/fetch.py10
3 files changed, 11 insertions, 7 deletions
diff --git a/man/make.conf.5 b/man/make.conf.5
index a99d537d0..526e362fa 100644
--- a/man/make.conf.5
+++ b/man/make.conf.5
@@ -304,6 +304,10 @@ enabled for more than a short period of time.
Modifies .la files to not include other .la files and some other
fixes (order of flags, duplicated entries, ...)
.TP
+.B force\-mirror
+Only fetch files from configured mirrors, ignoring \fBSRC_URI\fR,
+except when \fImirror\fR is in the \fBebuild\fR(5) \fBRESTRICT\fR variable.
+.TP
.B lmirror
When \fImirror\fR is enabled in \fBFEATURES\fR, fetch files even
when \fImirror\fR is also in the \fBebuild\fR(5) \fBRESTRICT\fR variable.
diff --git a/pym/portage/const.py b/pym/portage/const.py
index f79820277..15afc9be9 100644
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@ -88,8 +88,8 @@ EBUILD_PHASES = ("pretend", "setup", "unpack", "prepare", "configure"
SUPPORTED_FEATURES = frozenset([
"assume-digests", "binpkg-logs", "buildpkg", "buildsyspkg", "candy",
"ccache", "chflags", "collision-protect", "compress-build-logs",
- "digest", "distcc", "distlocks",
- "fakeroot", "fail-clean", "fixpackages", "getbinpkg",
+ "digest", "distcc", "distlocks", "fakeroot",
+ "fail-clean", "fixpackages", "force-mirror", "getbinpkg",
"installsources", "keeptemp", "keepwork", "fixlafiles", "lmirror",
"metadata-transfer", "mirror", "multilib-strict", "news",
"noauto", "noclean", "nodoc", "noinfo", "noman", "nostrip",
diff --git a/pym/portage/package/ebuild/fetch.py b/pym/portage/package/ebuild/fetch.py
index c33375ca6..6e4c728ec 100644
--- a/pym/portage/package/ebuild/fetch.py
+++ b/pym/portage/package/ebuild/fetch.py
@@ -245,8 +245,8 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0,
userpriv = secpass >= 2 and "userpriv" in features
# 'nomirror' is bad/negative logic. You Restrict mirroring, not no-mirroring.
- if "mirror" in restrict or \
- "nomirror" in restrict:
+ restrict_mirror = "mirror" in restrict or "nomirror" in restrict
+ if restrict_mirror:
if ("mirror" in features) and ("lmirror" not in features):
# lmirror should allow you to bypass mirror restrictions.
# XXX: This is not a good thing, and is temporary at best.
@@ -344,8 +344,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0,
if "local" in custommirrors:
mymirrors += custommirrors["local"]
- if "nomirror" in restrict or \
- "mirror" in restrict:
+ if restrict_mirror:
# We don't add any mirrors.
pass
else:
@@ -374,6 +373,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0,
del mymirrors[x]
restrict_fetch = "fetch" in restrict
+ force_mirror = "force-mirror" in features and not restrict_mirror
custom_local_mirrors = custommirrors.get("local", [])
if restrict_fetch:
# With fetch restriction, a normal uri may only be fetched from
@@ -430,7 +430,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0,
writemsg(_("Invalid mirror definition in SRC_URI:\n"), noiselevel=-1)
writemsg(" %s\n" % (myuri), noiselevel=-1)
else:
- if restrict_fetch:
+ if restrict_fetch or force_mirror:
# Only fetch from specific mirrors is allowed.
continue
if "primaryuri" in restrict: