From e0c7d34a777bbc4f95c55d9036e88aee9fc0a6ae Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Tue, 28 Dec 2010 12:41:26 -0800 Subject: EbuildFetcher: pass digests to fetch() --- pym/_emerge/EbuildFetcher.py | 12 ++++++++---- pym/portage/package/ebuild/fetch.py | 9 ++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) (limited to 'pym') diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py index bfac5a6c0..06285499d 100644 --- a/pym/_emerge/EbuildFetcher.py +++ b/pym/_emerge/EbuildFetcher.py @@ -4,6 +4,7 @@ import traceback from _emerge.SpawnProcess import SpawnProcess +import copy import sys import portage from portage import os @@ -18,7 +19,7 @@ from portage.util._pty import _create_pty_or_pipe class EbuildFetcher(SpawnProcess): __slots__ = ("config_pool", "fetchonly", "fetchall", "pkg", "prefetch") + \ - ("_settings", "_uri_map") + ("_digests", "_settings", "_uri_map") def _start(self): @@ -46,6 +47,9 @@ class EbuildFetcher(SpawnProcess): self.wait() return + self._digests = portage.Manifest( + os.path.dirname(ebuild_path), None).getTypeDigests("DIST") + settings = self.config_pool.allocate() settings.setcpv(self.pkg) portage.doebuild_environment(ebuild_path, 'fetch', @@ -98,7 +102,8 @@ class EbuildFetcher(SpawnProcess): rval = 1 try: - if fetch(self._uri_map, self._settings, fetchonly=self.fetchonly): + if fetch(self._uri_map, self._settings, fetchonly=self.fetchonly, + digests=copy.deepcopy(self._digests)): rval = os.EX_OK except SystemExit: raise @@ -121,7 +126,6 @@ class EbuildFetcher(SpawnProcess): return portdb.getFetchMap(self.pkg.cpv, useflags=use, mytree=mytree) def _prefetch_size_ok(self, uri_map, settings, ebuild_path): - pkgdir = os.path.dirname(ebuild_path) distdir = settings["DISTDIR"] sizes = {} @@ -136,7 +140,7 @@ class EbuildFetcher(SpawnProcess): return False sizes[filename] = st.st_size - digests = portage.Manifest(pkgdir, distdir).getTypeDigests("DIST") + digests = self._digests for filename, actual_size in sizes.items(): size = digests.get(filename, {}).get('size') if size is None: diff --git a/pym/portage/package/ebuild/fetch.py b/pym/portage/package/ebuild/fetch.py index f1bd2408a..7e4365fb7 100644 --- a/pym/portage/package/ebuild/fetch.py +++ b/pym/portage/package/ebuild/fetch.py @@ -230,7 +230,8 @@ _size_suffix_map = { 'Y' : 80, } -def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",use_locks=1, try_mirrors=1): +def fetch(myuris, mysettings, listonly=0, fetchonly=0, + locks_in_subdir=".locks", use_locks=1, try_mirrors=1, digests=None): "fetch files. Will use digest file if available." if not myuris: @@ -352,12 +353,14 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks", skip_manifest = mysettings.get("EBUILD_SKIP_MANIFEST") == "1" pkgdir = mysettings.get("O") - if not (pkgdir is None or skip_manifest): + if digests is None and not (pkgdir is None or skip_manifest): mydigests = Manifest( pkgdir, mysettings["DISTDIR"]).getTypeDigests("DIST") - else: + elif digests is None: # no digests because fetch was not called for a specific package mydigests = {} + else: + mydigests = digests ro_distdirs = [x for x in \ shlex_split(mysettings.get("PORTAGE_RO_DISTDIRS", "")) \ -- cgit v1.2.3-1-g7c22