public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/dbapi/, bin/, pym/portage/repository/, ...
@ 2011-09-12 21:27 Zac Medico
  0 siblings, 0 replies; 2+ messages in thread
From: Zac Medico @ 2011-09-12 21:27 UTC (permalink / raw
  To: gentoo-commits

commit:     f908cddb505b81533861196c4713378e63dac1fa
Author:     Brian Harring <ferringb <AT> gmail <DOT> com>
AuthorDate: Thu Sep  1 00:29:58 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Sep 12 21:23:10 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=f908cddb

Bind all manifest access through repoconfigs

This enables controling the behaviour (creation and validation) per
repo, and while mildly ugly, refactors in the right direction.

---
 bin/ebuild                                |    5 +++--
 bin/repoman                               |    8 ++++++--
 pym/_emerge/EbuildFetcher.py              |    6 ++++--
 pym/_emerge/search.py                     |    4 +++-
 pym/portage/dbapi/porttree.py             |    8 ++++++--
 pym/portage/package/ebuild/digestcheck.py |    4 +++-
 pym/portage/package/ebuild/digestgen.py   |    3 ++-
 pym/portage/package/ebuild/doebuild.py    |    4 +++-
 pym/portage/package/ebuild/fetch.py       |    3 ++-
 pym/portage/repository/config.py          |    7 ++++++-
 10 files changed, 38 insertions(+), 14 deletions(-)

diff --git a/bin/ebuild b/bin/ebuild
index db7e5e3..92105bb 100755
--- a/bin/ebuild
+++ b/bin/ebuild
@@ -200,8 +200,9 @@ def discard_digests(myebuild, mysettings, mydbapi):
 		portage._doebuild_manifest_exempt_depend += 1
 		pkgdir = os.path.dirname(myebuild)
 		fetchlist_dict = portage.FetchlistDict(pkgdir, mysettings, mydbapi)
-		from portage.manifest import Manifest
-		mf = Manifest(pkgdir, mysettings["DISTDIR"],
+		mf = mysettings.repositories.get_repo_for_location(
+			os.path.dirname(os.path.dirname(pkgdir)))
+		mf = mf.load_manifest(pkgdir, mysettings["DISTDIR"],
 			fetchlist_dict=fetchlist_dict, manifest1_compat=False)
 		mf.create(requiredDistfiles=None,
 			assumeDistHashesSometimes=True, assumeDistHashesAlways=True)

diff --git a/bin/repoman b/bin/repoman
index b40d2d1..3462f93 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -1104,7 +1104,9 @@ for x in scanlist:
 			portage._doebuild_manifest_exempt_depend += 1
 			try:
 				distdir = repoman_settings['DISTDIR']
-				mf = portage.manifest.Manifest(checkdir, distdir,
+				mf = repoman_settings.repositories.get_repo_for_location(
+					os.path.dirname(os.path.dirname(checkdir)))
+				mf = mf.load_manifest(checkdir, distdir,
 					fetchlist_dict=fetchlist_dict)
 				mf.create(requiredDistfiles=None,
 					assumeDistHashesAlways=True)
@@ -1314,7 +1316,9 @@ for x in scanlist:
 				raise
 			continue
 
-	mf = Manifest(checkdir, repoman_settings["DISTDIR"])
+	mf = repoman_settings.repositories.get_repo_for_location(
+		os.path.dirname(os.path.dirname(checkdir)))
+	mf = mf.load_manifest(checkdir, repoman_settings["DISTDIR"])
 	mydigests=mf.getTypeDigests("DIST")
 
 	fetchlist_dict = portage.FetchlistDict(checkdir, repoman_settings, portdb)

diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py
index feb68d0..4389f84 100644
--- a/pym/_emerge/EbuildFetcher.py
+++ b/pym/_emerge/EbuildFetcher.py
@@ -206,8 +206,10 @@ class EbuildFetcher(SpawnProcess):
 	def _get_digests(self):
 		if self._digests is not None:
 			return self._digests
-		self._digests = portage.Manifest(os.path.dirname(
-			self._get_ebuild_path()), None).getTypeDigests("DIST")
+		pkgdir = os.path.dirname(self._get_ebuild_path())
+		mf = self.pkg.root_config.settings.repositories.get_repo_for_location(
+			os.path.dirname(os.path.dirname(pkgdir)))
+		self._digests = mf.load_manifest(pkgdir, None).getTypeDigests("DIST")
 		return self._digests
 
 	def _get_uri_map(self):

diff --git a/pym/_emerge/search.py b/pym/_emerge/search.py
index 096b384..4a4183d 100644
--- a/pym/_emerge/search.py
+++ b/pym/_emerge/search.py
@@ -317,7 +317,9 @@ class search(object):
 							installed=False, metadata=metadata,
 							root_config=self.root_config, type_name="ebuild")
 						pkgdir = os.path.dirname(myebuild)
-						mf = Manifest(
+						mf = self.settings.repositories.get_repo_for_location(
+							os.path.dirname(os.path.dirname(pkgdir)))
+						mf = mf.load_manifest(
 							pkgdir, self.settings["DISTDIR"])
 						try:
 							uri_map = _parse_uri_map(mycpv, metadata,

diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index ac972c4..bfff026 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -597,7 +597,9 @@ class portdbapi(dbapi):
 		if myebuild is None:
 			raise AssertionError(_("ebuild not found for '%s'") % mypkg)
 		pkgdir = os.path.dirname(myebuild)
-		mf = Manifest(pkgdir, self.settings["DISTDIR"])
+		mf = self.repositories.get_repo_for_location(
+			os.path.dirname(os.path.dirname(pkgdir))).load_manifest(
+				pkgdir, self.settings["DISTDIR"])
 		checksums = mf.getDigests()
 		if not checksums:
 			if debug: 
@@ -665,7 +667,9 @@ class portdbapi(dbapi):
 		if myebuild is None:
 			raise AssertionError(_("ebuild not found for '%s'") % mypkg)
 		pkgdir = os.path.dirname(myebuild)
-		mf = Manifest(pkgdir, self.settings["DISTDIR"])
+		mf = self.repositories.get_repo_for_location(
+			os.path.dirname(os.path.dirname(pkgdir)))
+		mf = mf.load_manifest(pkgdir, self.settings["DISTDIR"])
 		mysums = mf.getDigests()
 
 		failures = {}

diff --git a/pym/portage/package/ebuild/digestcheck.py b/pym/portage/package/ebuild/digestcheck.py
index 1e34b14..d184301 100644
--- a/pym/portage/package/ebuild/digestcheck.py
+++ b/pym/portage/package/ebuild/digestcheck.py
@@ -41,7 +41,9 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
 		else:
 			return 1
 	if mf is None:
-		mf = Manifest(pkgdir, mysettings["DISTDIR"])
+		mf = mysettings.repositories.get_repo_for_location(
+			os.path.dirname(os.path.dirname(pkgdir)))
+		mf = mf.load_manifest(pkgdir, mysettings["DISTDIR"])
 	manifest_empty = True
 	for d in mf.fhashdict.values():
 		if d:

diff --git a/pym/portage/package/ebuild/digestgen.py b/pym/portage/package/ebuild/digestgen.py
index eb7210e..6051512 100644
--- a/pym/portage/package/ebuild/digestgen.py
+++ b/pym/portage/package/ebuild/digestgen.py
@@ -53,7 +53,8 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
 				return 0
 		mytree = os.path.dirname(os.path.dirname(mysettings["O"]))
 		manifest1_compat = False
-		mf = Manifest(mysettings["O"], mysettings["DISTDIR"],
+		mf = mysettings.repositories.get_repo_for_location(mytree)
+		mf = mf.load_manifest(mysettings["O"], mysettings["DISTDIR"],
 			fetchlist_dict=fetchlist_dict, manifest1_compat=manifest1_compat)
 		# Don't require all hashes since that can trigger excessive
 		# fetches when sufficient digests already exist.  To ease transition

diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py
index eef1d32..51b2dbc 100644
--- a/pym/portage/package/ebuild/doebuild.py
+++ b/pym/portage/package/ebuild/doebuild.py
@@ -508,7 +508,9 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
 				out.eerror(_("Manifest not found for '%s'") % (myebuild,))
 				_doebuild_broken_ebuilds.add(myebuild)
 				return 1
-			mf = Manifest(pkgdir, mysettings["DISTDIR"])
+			mf = mysettings.repositories.get_repo_for_location(
+				os.path.dirname(os.path.dirname(pkgdir)))
+			mf = mf.load_manifest(pkgdir, mysettings["DISTDIR"])
 
 		else:
 			mf = _doebuild_manifest_cache

diff --git a/pym/portage/package/ebuild/fetch.py b/pym/portage/package/ebuild/fetch.py
index 5cbbf87..11c4c01 100644
--- a/pym/portage/package/ebuild/fetch.py
+++ b/pym/portage/package/ebuild/fetch.py
@@ -356,7 +356,8 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0,
 		allow_missing_digests = True
 	pkgdir = mysettings.get("O")
 	if digests is None and not (pkgdir is None or skip_manifest):
-		mydigests = Manifest(
+		mydigests = mysettings.repositories.get_repo_for_location(
+			os.path.dirname(os.path.dirname(pkgdir))).load_manifest(
 			pkgdir, mysettings["DISTDIR"]).getTypeDigests("DIST")
 	elif digests is None or skip_manifest:
 		# no digests because fetch was not called for a specific package

diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 020297c..9e308a8 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -21,6 +21,7 @@ from portage.util import normalize_path, writemsg, writemsg_level, shlex_split
 from portage.localization import _
 from portage import _unicode_encode
 from portage import _encodings
+from portage import manifest
 
 _repo_name_sub_re = re.compile(r'[^\w-]')
 
@@ -41,7 +42,7 @@ class RepoConfig(object):
 	"""Stores config of one repository"""
 
 	__slots__ = ['aliases', 'eclass_overrides', 'eclass_locations', 'location', 'user_location', 'masters', 'main_repo',
-		'missing_repo_name', 'name', 'priority', 'sync', 'format']
+		'missing_repo_name', 'name', 'priority', 'sync', 'format', 'load_manifest']
 
 	def __init__(self, name, repo_opts):
 		"""Build a RepoConfig with options in repo_opts
@@ -110,6 +111,7 @@ class RepoConfig(object):
 			missing = False
 		self.name = name
 		self.missing_repo_name = missing
+		self.load_manifest = manifest.Manifest
 
 	def update(self, new_repo):
 		"""Update repository with options in another RepoConfig"""
@@ -496,6 +498,9 @@ class RepoConfigLoader(object):
 			return None
 		return self.treemap[repo_name]
 
+	def get_repo_for_location(self, location):
+		return self.prepos[self.get_name_for_location(location)]
+
 	def __getitem__(self, repo_name):
 		return self.prepos[repo_name]
 



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/dbapi/, bin/, pym/portage/repository/, ...
@ 2011-10-14  0:19 Zac Medico
  0 siblings, 0 replies; 2+ messages in thread
From: Zac Medico @ 2011-10-14  0:19 UTC (permalink / raw
  To: gentoo-commits

commit:     d4ea29bf6a3ce35d49e0f54f9173e3a6e42da2d6
Author:     Brian Harring <ferringb <AT> chromium <DOT> org>
AuthorDate: Thu Oct 13 23:26:03 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Oct 14 00:19:26 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=d4ea29bf

layout.conf: make the pregenerated cache format controllable

Controllable via 'cache-format', currently it supports only one cache;
'pms', and defaults to it.  If an unsupported cache-format is specified,
the cache is disabled.  If pms is specified and metadata/cache directory
doesn't exist, the cache is disabled.

Finally, this rips out the best module support for locally overriding
the cache format used for pregenerated caches; this functionality made
zero sense (upstream determines the format, we use what is available).

---
 bin/egencache                        |    4 ++--
 pym/_emerge/actions.py               |    8 --------
 pym/portage/dbapi/porttree.py        |   10 ++++------
 pym/portage/package/ebuild/config.py |    1 -
 pym/portage/repository/config.py     |   19 ++++++++++++++++++-
 5 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/bin/egencache b/bin/egencache
index 7766e78..26660c1 100755
--- a/bin/egencache
+++ b/bin/egencache
@@ -38,6 +38,7 @@ except ImportError:
 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 import metadata
 from portage.manifest import guessManifestFileType
 from portage.util import cmp_sort_key, writemsg_level
 from portage import cpv_getkey
@@ -214,8 +215,7 @@ class GenCache(object):
 			consumer=self._metadata_callback,
 			max_jobs=max_jobs, max_load=max_load)
 		self.returncode = os.EX_OK
-		metadbmodule = portdb.settings.load_best_module("portdbapi.metadbmodule")
-		self._trg_cache = metadbmodule(portdb.porttrees[0],
+		self._trg_cache = metadata.database(portdb.porttrees[0],
 			"metadata/cache", portage.auxdbkeys[:])
 		if rsync:
 			self._trg_cache.raise_stat_collision = True

diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 08f70df..70a92c9 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1660,14 +1660,6 @@ def action_metadata(settings, portdb, myopts, porttrees=None):
 	porttrees_data = []
 	for path in porttrees:
 		src_db = portdb._pregen_auxdb.get(path)
-		if src_db is None and \
-			os.path.isdir(os.path.join(path, 'metadata', 'cache')):
-			src_db = portdb.metadbmodule(
-				path, 'metadata/cache', auxdbkeys, readonly=True)
-			try:
-				src_db.ec = portdb._repo_info[path].eclass_db
-			except AttributeError:
-				pass
 
 		if src_db is not None:
 			porttrees_data.append(TreeData(portdb.auxdb[path],

diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index ef2e088..f48741b 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -120,8 +120,6 @@ class portdbapi(dbapi):
 		self._have_root_eclass_dir = os.path.isdir(
 			os.path.join(self.settings.repositories.mainRepoLocation(), "eclass"))
 
-		self.metadbmodule = self.settings.load_best_module("portdbapi.metadbmodule")
-
 		#if the portdbapi is "frozen", then we assume that we can cache everything (that no updates to it are happening)
 		self.xcache = {}
 		self.frozen = 0
@@ -214,10 +212,10 @@ class portdbapi(dbapi):
 			for x in self.porttrees:
 				if x in self._pregen_auxdb:
 					continue
-				if os.path.isdir(os.path.join(x, "metadata", "cache")):
-					conf = self.repositories.get_repo_for_location(x)
-					cache = self._pregen_auxdb[x] = self.metadbmodule(
-						x, "metadata/cache", filtered_auxdbkeys, readonly=True)
+				conf = self.repositories.get_repo_for_location(x)
+				cache = conf.get_pregenerated_cache(filtered_auxdbkeys, readonly=True)
+				if cache is not None:
+					self._pregen_auxdb[x] = cache
 					try:
 						cache.ec = self._repo_info[x].eclass_db
 					except AttributeError:

diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index 73af066..37dcbb4 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -311,7 +311,6 @@ class config(object):
 			if self.modules["user"] is None:
 				self.modules["user"] = {}
 			self.modules["default"] = {
-				"portdbapi.metadbmodule": "portage.cache.metadata.database",
 				"portdbapi.auxdbmodule":  "portage.cache.flat_hash.database",
 			}
 

diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 2490b65..9a54738 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -48,7 +48,7 @@ class RepoConfig(object):
 		'eclass_overrides', 'eclass_locations', 'format', 'location',
 		'main_repo', 'manifest_hashes', 'masters', 'missing_repo_name',
 		'name', 'priority', 'sign_manifest', 'sync', 'thin_manifest',
-		'user_location')
+		'user_location', 'cache_format')
 
 	def __init__(self, name, repo_opts):
 		"""Build a RepoConfig with options in repo_opts
@@ -126,6 +126,16 @@ class RepoConfig(object):
 		self.create_manifest = True
 		self.disable_manifest = False
 		self.manifest_hashes = None
+		self.cache_format = None
+
+	def get_pregenerated_cache(self, auxdbkeys, readonly=True):
+		if self.cache_format is None:
+			return None
+		elif self.cache_format == 'pms':
+			from portage.cache.metadata import database
+			return database(self.location, 'metadata/cache',
+				auxdbkeys, readonly=readonly)
+		return None
 
 	def load_manifest(self, *args, **kwds):
 		kwds['thin'] = self.thin_manifest
@@ -377,6 +387,13 @@ class RepoConfigLoader(object):
 			repo.create_manifest = manifest_policy != 'false'
 			repo.disable_manifest = manifest_policy == 'false'
 
+			# for compatibility w/ PMS, fallback to pms; but also check if the
+			# cache exists or not.
+			repo.cache_format = layout_data.get('cache-format', 'pms').lower()
+			if repo.cache_format == 'pms' and not os.path.isdir(
+				os.path.join(repo.location, 'metadata', 'cache')):
+				repo.cache_format = None
+
 			manifest_hashes = layout_data.get('manifest-hashes')
 			if manifest_hashes is not None:
 				manifest_hashes = frozenset(manifest_hashes.upper().split())



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-10-14  0:19 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-12 21:27 [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/dbapi/, bin/, pym/portage/repository/, Zac Medico
  -- strict thread matches above, loose matches on Subject: below --
2011-10-14  0:19 Zac Medico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox