OLD | NEW |
1 # Copyright 2010 Gentoo Foundation | 1 # Copyright 2010 Gentoo Foundation |
2 # Distributed under the terms of the GNU General Public License v2 | 2 # Distributed under the terms of the GNU General Public License v2 |
3 | 3 |
4 from __future__ import print_function | 4 from __future__ import print_function |
5 | 5 |
6 __all__ = ['fetch'] | 6 __all__ = ['fetch'] |
7 | 7 |
8 import codecs | 8 import codecs |
9 import errno | 9 import errno |
10 import logging | 10 import logging |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 if not myuris: | 238 if not myuris: |
239 return 1 | 239 return 1 |
240 | 240 |
241 features = mysettings.features | 241 features = mysettings.features |
242 restrict = mysettings.get("PORTAGE_RESTRICT","").split() | 242 restrict = mysettings.get("PORTAGE_RESTRICT","").split() |
243 | 243 |
244 userfetch = secpass >= 2 and "userfetch" in features | 244 userfetch = secpass >= 2 and "userfetch" in features |
245 userpriv = secpass >= 2 and "userpriv" in features | 245 userpriv = secpass >= 2 and "userpriv" in features |
246 | 246 |
247 # 'nomirror' is bad/negative logic. You Restrict mirroring, not no-mirro
ring. | 247 # 'nomirror' is bad/negative logic. You Restrict mirroring, not no-mirro
ring. |
248 » if "mirror" in restrict or \ | 248 » restrict_mirror = "mirror" in restrict or "nomirror" in restrict |
249 » "nomirror" in restrict: | 249 » if restrict_mirror: |
250 if ("mirror" in features) and ("lmirror" not in features): | 250 if ("mirror" in features) and ("lmirror" not in features): |
251 # lmirror should allow you to bypass mirror restrictions
. | 251 # lmirror should allow you to bypass mirror restrictions
. |
252 # XXX: This is not a good thing, and is temporary at bes
t. | 252 # XXX: This is not a good thing, and is temporary at bes
t. |
253 print(_(">>> \"mirror\" mode desired and \"mirror\" rest
riction found; skipping fetch.")) | 253 print(_(">>> \"mirror\" mode desired and \"mirror\" rest
riction found; skipping fetch.")) |
254 return 1 | 254 return 1 |
255 | 255 |
256 # Generally, downloading the same file repeatedly from | 256 # Generally, downloading the same file repeatedly from |
257 # every single available mirror is a waste of bandwidth | 257 # every single available mirror is a waste of bandwidth |
258 # and time, so there needs to be a cap. | 258 # and time, so there needs to be a cap. |
259 checksum_failure_max_tries = 5 | 259 checksum_failure_max_tries = 5 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 _("!!! For fetching to a read-only filesystem, " | 337 _("!!! For fetching to a read-only filesystem, " |
338 "locking should be turned off.\n")), noiselevel=
-1) | 338 "locking should be turned off.\n")), noiselevel=
-1) |
339 writemsg(_("!!! This can be done by adding -distlocks to
" | 339 writemsg(_("!!! This can be done by adding -distlocks to
" |
340 "FEATURES in /etc/make.conf\n"), noiselevel=-1) | 340 "FEATURES in /etc/make.conf\n"), noiselevel=-1) |
341 # use_locks = 0 | 341 # use_locks = 0 |
342 | 342 |
343 # local mirrors are always added | 343 # local mirrors are always added |
344 if "local" in custommirrors: | 344 if "local" in custommirrors: |
345 mymirrors += custommirrors["local"] | 345 mymirrors += custommirrors["local"] |
346 | 346 |
347 » if "nomirror" in restrict or \ | 347 » if restrict_mirror: |
348 » "mirror" in restrict: | |
349 # We don't add any mirrors. | 348 # We don't add any mirrors. |
350 pass | 349 pass |
351 else: | 350 else: |
352 if try_mirrors: | 351 if try_mirrors: |
353 mymirrors += [x.rstrip("/") for x in mysettings["GENTOO_
MIRRORS"].split() if x] | 352 mymirrors += [x.rstrip("/") for x in mysettings["GENTOO_
MIRRORS"].split() if x] |
354 | 353 |
355 skip_manifest = mysettings.get("EBUILD_SKIP_MANIFEST") == "1" | 354 skip_manifest = mysettings.get("EBUILD_SKIP_MANIFEST") == "1" |
356 pkgdir = mysettings.get("O") | 355 pkgdir = mysettings.get("O") |
357 if digests is None and not (pkgdir is None or skip_manifest): | 356 if digests is None and not (pkgdir is None or skip_manifest): |
358 mydigests = Manifest( | 357 mydigests = Manifest( |
359 pkgdir, mysettings["DISTDIR"]).getTypeDigests("DIST") | 358 pkgdir, mysettings["DISTDIR"]).getTypeDigests("DIST") |
360 elif digests is None: | 359 elif digests is None: |
361 # no digests because fetch was not called for a specific package | 360 # no digests because fetch was not called for a specific package |
362 mydigests = {} | 361 mydigests = {} |
363 else: | 362 else: |
364 mydigests = digests | 363 mydigests = digests |
365 | 364 |
366 ro_distdirs = [x for x in \ | 365 ro_distdirs = [x for x in \ |
367 shlex_split(mysettings.get("PORTAGE_RO_DISTDIRS", "")) \ | 366 shlex_split(mysettings.get("PORTAGE_RO_DISTDIRS", "")) \ |
368 if os.path.isdir(x)] | 367 if os.path.isdir(x)] |
369 | 368 |
370 fsmirrors = [] | 369 fsmirrors = [] |
371 for x in range(len(mymirrors)-1,-1,-1): | 370 for x in range(len(mymirrors)-1,-1,-1): |
372 if mymirrors[x] and mymirrors[x][0]=='/': | 371 if mymirrors[x] and mymirrors[x][0]=='/': |
373 fsmirrors += [mymirrors[x]] | 372 fsmirrors += [mymirrors[x]] |
374 del mymirrors[x] | 373 del mymirrors[x] |
375 | 374 |
376 restrict_fetch = "fetch" in restrict | 375 restrict_fetch = "fetch" in restrict |
| 376 force_mirror = "force-mirror" in features and not restrict_mirror |
377 custom_local_mirrors = custommirrors.get("local", []) | 377 custom_local_mirrors = custommirrors.get("local", []) |
378 if restrict_fetch: | 378 if restrict_fetch: |
379 # With fetch restriction, a normal uri may only be fetched from | 379 # With fetch restriction, a normal uri may only be fetched from |
380 # custom local mirrors (if available). A mirror:// uri may also | 380 # custom local mirrors (if available). A mirror:// uri may also |
381 # be fetched from specific mirrors (effectively overriding fetch | 381 # be fetched from specific mirrors (effectively overriding fetch |
382 # restriction, but only for specific mirrors). | 382 # restriction, but only for specific mirrors). |
383 locations = custom_local_mirrors | 383 locations = custom_local_mirrors |
384 else: | 384 else: |
385 locations = mymirrors | 385 locations = mymirrors |
386 | 386 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 for locmirr in thirdpartymirrors
[mirrorname]] | 423 for locmirr in thirdpartymirrors
[mirrorname]] |
424 filedict[myfile].extend(uris) | 424 filedict[myfile].extend(uris) |
425 thirdpartymirror_uris.setdefault(myfile,
[]).extend(uris) | 425 thirdpartymirror_uris.setdefault(myfile,
[]).extend(uris) |
426 | 426 |
427 if not filedict[myfile]: | 427 if not filedict[myfile]: |
428 writemsg(_("No known mirror by the name:
%s\n") % (mirrorname)) | 428 writemsg(_("No known mirror by the name:
%s\n") % (mirrorname)) |
429 else: | 429 else: |
430 writemsg(_("Invalid mirror definition in SRC_URI
:\n"), noiselevel=-1) | 430 writemsg(_("Invalid mirror definition in SRC_URI
:\n"), noiselevel=-1) |
431 writemsg(" %s\n" % (myuri), noiselevel=-1) | 431 writemsg(" %s\n" % (myuri), noiselevel=-1) |
432 else: | 432 else: |
433 » » » if restrict_fetch: | 433 » » » if restrict_fetch or force_mirror: |
434 # Only fetch from specific mirrors is allowed. | 434 # Only fetch from specific mirrors is allowed. |
435 continue | 435 continue |
436 if "primaryuri" in restrict: | 436 if "primaryuri" in restrict: |
437 # Use the source site first. | 437 # Use the source site first. |
438 if myfile in primaryuri_indexes: | 438 if myfile in primaryuri_indexes: |
439 primaryuri_indexes[myfile] += 1 | 439 primaryuri_indexes[myfile] += 1 |
440 else: | 440 else: |
441 primaryuri_indexes[myfile] = 0 | 441 primaryuri_indexes[myfile] = 0 |
442 filedict[myfile].insert(primaryuri_indexes[myfil
e], myuri) | 442 filedict[myfile].insert(primaryuri_indexes[myfil
e], myuri) |
443 else: | 443 else: |
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1109 if listonly: | 1109 if listonly: |
1110 failed_files.add(myfile) | 1110 failed_files.add(myfile) |
1111 continue | 1111 continue |
1112 elif fetchonly: | 1112 elif fetchonly: |
1113 failed_files.add(myfile) | 1113 failed_files.add(myfile) |
1114 continue | 1114 continue |
1115 return 0 | 1115 return 0 |
1116 if failed_files: | 1116 if failed_files: |
1117 return 0 | 1117 return 0 |
1118 return 1 | 1118 return 1 |
OLD | NEW |