public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/emaint/modules/move/, pym/portage/, pym/_emerge/
@ 2012-11-14  7:08 Zac Medico
  0 siblings, 0 replies; only message in thread
From: Zac Medico @ 2012-11-14  7:08 UTC (permalink / raw
  To: gentoo-commits

commit:     0b4e6c27e87e57fac09fa28d3ed1320cb6a83ad9
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Nov 14 07:08:05 2012 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Nov 14 07:08:05 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=0b4e6c27

update_dbentry: add parent arg for bug #367215

---
 pym/_emerge/FakeVartree.py              |   16 ++++++++++------
 pym/portage/dbapi/__init__.py           |   14 +++++++++-----
 pym/portage/dbapi/bintree.py            |    2 +-
 pym/portage/dbapi/vartree.py            |    2 +-
 pym/portage/emaint/modules/move/move.py |   16 ++++++++++------
 pym/portage/update.py                   |   15 ++++++++++-----
 6 files changed, 41 insertions(+), 24 deletions(-)

diff --git a/pym/_emerge/FakeVartree.py b/pym/_emerge/FakeVartree.py
index 5fde8e1..9babb4c 100644
--- a/pym/_emerge/FakeVartree.py
+++ b/pym/_emerge/FakeVartree.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2011 Gentoo Foundation
+# Copyright 1999-2012 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 import sys
@@ -15,6 +15,7 @@ from portage.eapi import _get_eapi_attrs
 from portage.exception import InvalidDependString
 from portage.repository.config import _gen_valid_repo
 from portage.update import grab_updates, parse_updates, update_dbentries
+from portage.versions import _pkg_str
 
 if sys.hexversion >= 0x3000000:
 	long = int
@@ -286,12 +287,15 @@ def grab_global_updates(portdb):
 	return retupdates
 
 def perform_global_updates(mycpv, mydb, myupdates):
-	aux_keys = Package._dep_keys + ("EAPI", 'repository')
+	aux_keys = Package._dep_keys + mydb._pkg_str_aux_keys
 	aux_dict = dict(zip(aux_keys, mydb.aux_get(mycpv, aux_keys)))
-	eapi = aux_dict.pop('EAPI')
-	repository = aux_dict.pop('repository')
 	try:
-		mycommands = myupdates[repository]
+		pkg = _pkg_str(mycpv, metadata=aux_dict)
+	except InvalidData:
+		return
+	aux_dict = dict((k, aux_dict[k]) for k in Package._dep_keys)
+	try:
+		mycommands = myupdates[pkg.repo]
 	except KeyError:
 		try:
 			mycommands = myupdates['DEFAULT']
@@ -301,6 +305,6 @@ def perform_global_updates(mycpv, mydb, myupdates):
 	if not mycommands:
 		return
 
-	updates = update_dbentries(mycommands, aux_dict, eapi=eapi)
+	updates = update_dbentries(mycommands, aux_dict, parent=pkg)
 	if updates:
 		mydb.aux_update(mycpv, updates)

diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index dbba22c..c6bdbc7 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -291,7 +291,8 @@ class dbapi(object):
 		maxval = len(cpv_all)
 		aux_get = self.aux_get
 		aux_update = self.aux_update
-		meta_keys = Package._dep_keys + ("EAPI", "PROVIDE", "repository")
+		update_keys = Package._dep_keys + ("PROVIDE",)
+		meta_keys = update_keys + self._pkg_str_aux_keys
 		repo_dict = None
 		if isinstance(updates, dict):
 			repo_dict = updates
@@ -301,13 +302,16 @@ class dbapi(object):
 			onProgress(maxval, 0)
 		for i, cpv in enumerate(cpv_all):
 			metadata = dict(zip(meta_keys, aux_get(cpv, meta_keys)))
-			eapi = metadata.pop('EAPI')
-			repo = metadata.pop('repository')
+			try:
+				pkg = _pkg_str(cpv, metadata=metadata)
+			except InvalidData:
+				continue
+			metadata = dict((k, metadata[k]) for k in update_keys)
 			if repo_dict is None:
 				updates_list = updates
 			else:
 				try:
-					updates_list = repo_dict[repo]
+					updates_list = repo_dict[pkg.repo]
 				except KeyError:
 					try:
 						updates_list = repo_dict['DEFAULT']
@@ -318,7 +322,7 @@ class dbapi(object):
 				continue
 
 			metadata_updates = \
-				portage.update_dbentries(updates_list, metadata, eapi=eapi)
+				portage.update_dbentries(updates_list, metadata, parent=pkg)
 			if metadata_updates:
 				aux_update(cpv, metadata_updates)
 				if onUpdate:

diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index 0cc4626..2203aaf 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -425,7 +425,7 @@ class binarytree(object):
 			moves += 1
 			mytbz2 = portage.xpak.tbz2(tbz2path)
 			mydata = mytbz2.get_data()
-			updated_items = update_dbentries([mylist], mydata, eapi=mycpv.eapi)
+			updated_items = update_dbentries([mylist], mydata, parent=mycpv)
 			mydata.update(updated_items)
 			mydata[b'PF'] = \
 				_unicode_encode(mynewpkg + "\n",

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 8d908fc..27e204e 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -364,7 +364,7 @@ class vardbapi(dbapi):
 					del e
 			write_atomic(os.path.join(newpath, "PF"), new_pf+"\n")
 			write_atomic(os.path.join(newpath, "CATEGORY"), mynewcat+"\n")
-			fixdbentries([mylist], newpath, eapi=mycpv.eapi)
+			fixdbentries([mylist], newpath, parent=mycpv)
 		return moves
 
 	def cp_list(self, mycp, use_cache=1):

diff --git a/pym/portage/emaint/modules/move/move.py b/pym/portage/emaint/modules/move/move.py
index 9f9ba90..607fbc4 100644
--- a/pym/portage/emaint/modules/move/move.py
+++ b/pym/portage/emaint/modules/move/move.py
@@ -5,13 +5,14 @@ import portage
 from portage import os
 from portage.exception import InvalidData
 from _emerge.Package import Package
+from portage.versions import _pkg_str
 
 class MoveHandler(object):
 
 	def __init__(self, tree, porttree):
 		self._tree = tree
 		self._portdb = porttree.dbapi
-		self._update_keys = ["PROVIDE"] + list(Package._dep_keys)
+		self._update_keys = Package._dep_keys + ("PROVIDE",)
 		self._master_repo = \
 			self._portdb.getRepositoryName(self._portdb.porttree_root)
 
@@ -92,15 +93,18 @@ class MoveHandler(object):
 		cpv_all = self._tree.dbapi.cpv_all()
 		cpv_all.sort()
 		maxval = len(cpv_all)
-		meta_keys = self._update_keys + ['repository', 'EAPI']
+		meta_keys = self._update_keys + self._portdb._pkg_str_aux_keys
 		if onProgress:
 			onProgress(maxval, 0)
 		for i, cpv in enumerate(cpv_all):
 			metadata = dict(zip(meta_keys, aux_get(cpv, meta_keys)))
-			eapi = metadata.pop('EAPI')
-			repository = metadata.pop('repository')
 			try:
-				updates = allupdates[repository]
+				pkg = _pkg_str(cpv, metadata=metadata)
+			except InvalidData:
+				continue
+			metadata = dict((k, metadata[k]) for k in self._update_keys)
+			try:
+				updates = allupdates[pkg.repo]
 			except KeyError:
 				try:
 					updates = allupdates['DEFAULT']
@@ -109,7 +113,7 @@ class MoveHandler(object):
 			if not updates:
 				continue
 			metadata_updates = \
-				portage.update_dbentries(updates, metadata, eapi=eapi)
+				portage.update_dbentries(updates, metadata, parent=pkg)
 			if metadata_updates:
 				errors.append("'%s' has outdated metadata" % cpv)
 			if onProgress:

diff --git a/pym/portage/update.py b/pym/portage/update.py
index d7ae34a..9d29585 100644
--- a/pym/portage/update.py
+++ b/pym/portage/update.py
@@ -32,7 +32,10 @@ else:
 
 ignored_dbentries = ("CONTENTS", "environment.bz2")
 
-def update_dbentry(update_cmd, mycontent, eapi=None):
+def update_dbentry(update_cmd, mycontent, eapi=None, parent=None):
+
+	if parent is not None:
+		eapi = parent.eapi
 
 	if update_cmd[0] == "move":
 		old_value = _unicode(update_cmd[1])
@@ -101,7 +104,7 @@ def update_dbentry(update_cmd, mycontent, eapi=None):
 
 	return mycontent
 
-def update_dbentries(update_iter, mydata, eapi=None):
+def update_dbentries(update_iter, mydata, eapi=None, parent=None):
 	"""Performs update commands and returns a
 	dict containing only the updated items."""
 	updated_items = {}
@@ -115,7 +118,8 @@ def update_dbentries(update_iter, mydata, eapi=None):
 			is_encoded = mycontent is not orig_content
 			orig_content = mycontent
 			for update_cmd in update_iter:
-				mycontent = update_dbentry(update_cmd, mycontent, eapi=eapi)
+				mycontent = update_dbentry(update_cmd, mycontent,
+					eapi=eapi, parent=parent)
 			if mycontent != orig_content:
 				if is_encoded:
 					mycontent = _unicode_encode(mycontent,
@@ -124,7 +128,7 @@ def update_dbentries(update_iter, mydata, eapi=None):
 				updated_items[k] = mycontent
 	return updated_items
 
-def fixdbentries(update_iter, dbdir, eapi=None):
+def fixdbentries(update_iter, dbdir, eapi=None, parent=None):
 	"""Performs update commands which result in search and replace operations
 	for each of the files in dbdir (excluding CONTENTS and environment.bz2).
 	Returns True when actual modifications are necessary and False otherwise."""
@@ -136,7 +140,8 @@ def fixdbentries(update_iter, dbdir, eapi=None):
 			mode='r', encoding=_encodings['repo.content'],
 			errors='replace') as f:
 			mydata[myfile] = f.read()
-	updated_items = update_dbentries(update_iter, mydata, eapi=eapi)
+	updated_items = update_dbentries(update_iter, mydata,
+		eapi=eapi, parent=parent)
 	for myfile, mycontent in updated_items.items():
 		file_path = os.path.join(dbdir, myfile)
 		write_atomic(file_path, mycontent, encoding=_encodings['repo.content'])


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2012-11-14  7:08 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-14  7:08 [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/emaint/modules/move/, pym/portage/, pym/_emerge/ Zac Medico

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