Add force-mirror FEATURE.
authorDavid James <davidjames@google.com>
Thu, 7 Apr 2011 23:49:58 +0000 (16:49 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 7 Apr 2011 23:49:58 +0000 (16:49 -0700)
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

man/make.conf.5
pym/portage/const.py
pym/portage/package/ebuild/fetch.py

index a86f257f7fe3dfeba90a26be14cbe0a9a96670ee..cf8d2170ada85e15ffc82062575f480f11d8d158 100644 (file)
@@ -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.
index 89fdda15178d2b65ec8a59c982863ca6b6239ed6..b92149d38163a45f6960a2a600ef67bc335c96ed 100644 (file)
@@ -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",
index c33375ca6afca6fb70f482dc5cea8b550f527449..6e4c728ec27b48872b53d158a7d356566ab973fc 100644 (file)
@@ -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: