summaryrefslogtreecommitdiffstats
path: root/bin/egencache
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2012-09-07 22:35:03 -0700
committerZac Medico <zmedico@gentoo.org>2012-09-07 22:35:03 -0700
commit7da74976e44534bcb286bd9bcb7a7847ba4d6a14 (patch)
tree614901010357410effda73e881b85aff9314fab1 /bin/egencache
parent24b7ebe3b9404f0344f5b34eb322abde64143263 (diff)
downloadportage-7da74976e44534bcb286bd9bcb7a7847ba4d6a14.tar.gz
portage-7da74976e44534bcb286bd9bcb7a7847ba4d6a14.tar.bz2
portage-7da74976e44534bcb286bd9bcb7a7847ba4d6a14.zip
egencache: skip metadata-transfer if possible
If there is an existing metadata/md5-cache directory, then it's not necessary to forcibly enable metadata-transfer.
Diffstat (limited to 'bin/egencache')
-rwxr-xr-xbin/egencache42
1 files changed, 29 insertions, 13 deletions
diff --git a/bin/egencache b/bin/egencache
index a0766b1f2..18ab45dde 100755
--- a/bin/egencache
+++ b/bin/egencache
@@ -35,6 +35,7 @@ import portage
from portage import os, _encodings, _unicode_encode, _unicode_decode
from _emerge.MetadataRegen import MetadataRegen
from portage.cache.cache_errors import CacheError, StatCollision
+from portage.cache.flat_hash import md5_database
from portage.manifest import guessManifestFileType
from portage.util import cmp_sort_key, writemsg_level
from portage import cpv_getkey
@@ -867,13 +868,40 @@ def egencache_main(args):
parser.error('No action specified')
return 1
+ repo_path = None
+ if options.repo is not None:
+ repo_path = settings.repositories.treemap.get(options.repo)
+ if repo_path is None:
+ parser.error("Unable to locate repository named '%s'" % \
+ (options.repo,))
+ return 1
+ else:
+ repo_path = settings.repositories.mainRepoLocation()
+ if not repo_path:
+ parser.error("PORTDIR is undefined")
+ return 1
+
if options.update and 'metadata-transfer' not in settings.features:
- settings.features.add('metadata-transfer')
+ metadata_transfer = True
+ repo_config = settings.repositories.get_repo_for_location(repo_path)
+ cache = repo_config.get_pregenerated_cache(
+ portage.dbapi.dbapi._known_keys, readonly=True)
+ if cache is not None:
+ if isinstance(cache, md5_database) and \
+ os.path.isdir(cache.location):
+ metadata_transfer = False
+ cache = None
+
+ if metadata_transfer:
+ settings.features.add('metadata-transfer')
settings.lock()
portdb = portage.portdbapi(mysettings=settings)
+ # Limit ebuilds to the specified repo.
+ portdb.porttrees = [repo_path]
+
if options.update:
if options.cache_dir is not None:
# already validated earlier
@@ -889,18 +917,6 @@ def egencache_main(args):
level=logging.ERROR, noiselevel=-1)
return 1
- if options.repo is not None:
- repo_path = portdb.getRepositoryPath(options.repo)
- if repo_path is None:
- parser.error("Unable to locate repository named '%s'" % \
- (options.repo,))
- return 1
-
- # Limit ebuilds to the specified repo.
- portdb.porttrees = [repo_path]
- else:
- portdb.porttrees = [portdb.porttree_root]
-
ret = [os.EX_OK]
if options.update: