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/
@ 2011-02-14  4:02 Zac Medico
  0 siblings, 0 replies; 11+ messages in thread
From: Zac Medico @ 2011-02-14  4:02 UTC (permalink / raw
  To: gentoo-commits

commit:     53f096c5d72dd15336fdf921f29ceae9b5842148
Author:     David James <davidjames <AT> google <DOT> com>
AuthorDate: Fri Feb 11 17:25:26 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Feb 14 03:51:39 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=53f096c5

Add support for grabbing Packages files using external programs.

If the user specifies FETCHCOMMAND_*, Portage should honor this when grabbing
Packages files. This allows users to setup support for grabbing Packages files
from other protocols.

BUG=chrome-os-partner:2026
TEST=Try downloading prebuilts from gs:// when FETCHCOMMAND_GS is setup in make.conf

Change-Id: I96b239819351633dd02d608954e81a1c363a4687

Review URL: http://codereview.chromium.org/6458015

---
 pym/portage/dbapi/bintree.py |   16 ++++++++++++++--
 pym/portage/getbinpkg.py     |    6 ++++--
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index 993df77..78eb429 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -770,8 +770,9 @@ class binarytree(object):
 				# urlparse.urljoin() only works correctly with recognized
 				# protocols and requires the base url to have a trailing
 				# slash, so join manually...
+				url = base_url.rstrip("/") + "/Packages"
 				try:
-					f = urllib_request_urlopen(base_url.rstrip("/") + "/Packages")
+					f = urllib_request_urlopen(url)
 				except IOError:
 					path = parsed_url.path.rstrip("/") + "/Packages"
 
@@ -796,7 +797,18 @@ class binarytree(object):
 							stdout=subprocess.PIPE)
 						f = proc.stdout
 					else:
-						raise
+						setting = 'FETCHCOMMAND_' + parsed_url.scheme.upper()
+						fcmd = self.settings.get(setting)
+						if not fcmd:
+							raise
+						fd, tmp_filename = tempfile.mkstemp()
+						tmp_dirname, tmp_basename = os.path.split(tmp_filename)
+						os.close(fd)
+						success = portage.getbinpkg.file_get(url,
+						     tmp_dirname, fcmd=fcmd, filename=tmp_basename)
+						if not success:
+							raise portage.exception.FileNotFound(url)
+						f = open(tmp_filename, 'rb')
 
 				f_dec = codecs.iterdecode(f,
 					_encodings['repo.content'], errors='replace')

diff --git a/pym/portage/getbinpkg.py b/pym/portage/getbinpkg.py
index f85b65c..43a6bf5 100644
--- a/pym/portage/getbinpkg.py
+++ b/pym/portage/getbinpkg.py
@@ -431,17 +431,19 @@ def file_get_metadata(baseurl,conn=None, chunk_size=3000):
 	return myid
 
 
-def file_get(baseurl,dest,conn=None,fcmd=None):
+def file_get(baseurl,dest,conn=None,fcmd=None,filename=None):
 	"""(baseurl,dest,fcmd=) -- Takes a base url to connect to and read from.
 	URI should be in the form <proto>://[user[:pass]@]<site>[:port]<path>"""
 
 	if not fcmd:
 		return file_get_lib(baseurl,dest,conn)
+	if not filename:
+		filename = os.path.basename(baseurl)
 
 	variables = {
 		"DISTDIR": dest,
 		"URI":     baseurl,
-		"FILE":    os.path.basename(baseurl)
+		"FILE":    filename
 	}
 
 	from portage.util import varexpand



^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/
@ 2011-03-27 20:57 Zac Medico
  0 siblings, 0 replies; 11+ messages in thread
From: Zac Medico @ 2011-03-27 20:57 UTC (permalink / raw
  To: gentoo-commits

commit:     436c4629ffde8089b369fe58180b474a302b6630
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 27 20:55:11 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Mar 27 20:55:11 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=436c4629

UnsupportedAPIException: handle unicode in EAPI

Normally EAPI doesn't contain unicode, but as in bug #359675, it can
contain practically anything if files in /var/db/pkg are corrupt.

---
 pym/portage/dbapi/vartree.py |    2 +-
 pym/portage/exception.py     |   17 ++++++++++++++---
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 45b5a69..dd041d8 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -1539,7 +1539,7 @@ class dblink(object):
 				showMessage(_("!!! FAILED prerm: %s\n") % \
 					os.path.join(self.dbdir, "EAPI"),
 					level=logging.ERROR, noiselevel=-1)
-				showMessage("%s\n" % (e,),
+				showMessage(_unicode_decode("%s\n") % (e,),
 					level=logging.ERROR, noiselevel=-1)
 				myebuildpath = None
 

diff --git a/pym/portage/exception.py b/pym/portage/exception.py
index 64d0f7b..7891120 100644
--- a/pym/portage/exception.py
+++ b/pym/portage/exception.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2004 Gentoo Foundation
+# Copyright 1998-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 import signal
@@ -150,13 +150,24 @@ class UnsupportedAPIException(PortagePackageException):
 	def __init__(self, cpv, eapi):
 		self.cpv, self.eapi = cpv, eapi
 	def __str__(self):
+		eapi = self.eapi
+		if not isinstance(eapi, basestring):
+			eapi = str(eapi)
+		eapi = eapi.lstrip("-")
 		msg = _("Unable to do any operations on '%(cpv)s', since "
 		"its EAPI is higher than this portage version's. Please upgrade"
 		" to a portage version that supports EAPI '%(eapi)s'.") % \
-		{"cpv": self.cpv, "eapi": str(self.eapi).lstrip("-")}
-		return msg
+		{"cpv": self.cpv, "eapi": eapi}
+		return _unicode_decode(msg,
+			encoding=_encodings['content'], errors='replace')
 
+	if sys.hexversion < 0x3000000:
+
+		__unicode__ = __str__
 
+		def __str__(self):
+			return _unicode_encode(self.__unicode__(),
+				encoding=_encodings['content'], errors='backslashreplace')
 
 class SignatureException(PortageException):
 	"""Signature was not present in the checked file"""



^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/
@ 2011-05-05 15:13 Zac Medico
  0 siblings, 0 replies; 11+ messages in thread
From: Zac Medico @ 2011-05-05 15:13 UTC (permalink / raw
  To: gentoo-commits

commit:     31cd3e14b04608ee19b0f12aa18a2864410baf6d
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu May  5 15:15:20 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu May  5 15:15:20 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=31cd3e14

Update timestamps in headers of modified files.

---
 pym/portage/dbapi/cpv_expand.py |    2 +-
 pym/portage/manifest.py         |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/pym/portage/dbapi/cpv_expand.py b/pym/portage/dbapi/cpv_expand.py
index 9ce0d3d..26f9948 100644
--- a/pym/portage/dbapi/cpv_expand.py
+++ b/pym/portage/dbapi/cpv_expand.py
@@ -1,4 +1,4 @@
-# Copyright 2010 Gentoo Foundation
+# Copyright 2010-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = ["cpv_expand"]

diff --git a/pym/portage/manifest.py b/pym/portage/manifest.py
index de7540f..f273cc2 100644
--- a/pym/portage/manifest.py
+++ b/pym/portage/manifest.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2009 Gentoo Foundation
+# Copyright 1999-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 import codecs



^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/
@ 2011-09-06 18:35 Zac Medico
  0 siblings, 0 replies; 11+ messages in thread
From: Zac Medico @ 2011-09-06 18:35 UTC (permalink / raw
  To: gentoo-commits

commit:     eab5a6ee1abff1fbf142cf1558ba940b6d4b270a
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Sep  6 18:34:57 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Sep  6 18:34:57 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=eab5a6ee

merge: avoid abssymlink readlink call

This will avoid the "OSError: [Errno 2] No such file or directory" that
is triggered inside abssymlink if the merge encoding is not ascii or
utf_8, as shown in bug #382021.

---
 pym/portage/__init__.py      |    7 +++++--
 pym/portage/dbapi/vartree.py |    7 ++++++-
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 901ea2c..d73ea6d 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -391,9 +391,12 @@ def getcwd():
 		return "/"
 getcwd()
 
-def abssymlink(symlink):
+def abssymlink(symlink, target=None):
 	"This reads symlinks, resolving the relative symlinks, and returning the absolute."
-	mylink=os.readlink(symlink)
+	if target is None:
+		mylink = target
+	else:
+		mylink = os.readlink(symlink)
 	if mylink[0] != '/':
 		mydir=os.path.dirname(symlink)
 		mylink=mydir+"/"+mylink

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index bafe138..4d0a6dd 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -4013,7 +4013,12 @@ class dblink(object):
 					os.unlink(mysrc)
 					os.symlink(myto, mysrc)
 
-				myabsto = abssymlink(mysrc)
+				# Pass in the symlink target in order to bypass the
+				# os.readlink() call inside abssymlink(), since that
+				# call is unsafe if the merge encoding is not ascii
+				# or utf_8 (see bug #382021).
+				myabsto = abssymlink(mysrc, target=myto)
+
 				if myabsto.startswith(srcroot):
 					myabsto = myabsto[len(srcroot):]
 				myabsto = myabsto.lstrip(sep)



^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/
@ 2011-10-16 21:13 Zac Medico
  0 siblings, 0 replies; 11+ messages in thread
From: Zac Medico @ 2011-10-16 21:13 UTC (permalink / raw
  To: gentoo-commits

commit:     5b8fdc7d3e4c64ce79d0218fd101f8292602d10b
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 16 21:13:45 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Oct 16 21:13:45 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5b8fdc7d

hashed_path: convert stat OSError to FileNotFound

This makes it consistent with perform_checksum call which also raises
FileNotFound instead of OSError.

---
 pym/portage/dbapi/porttree.py |    2 +-
 pym/portage/eclass_cache.py   |   11 ++++++++---
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index 0ade59a..a0b7d7e 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -424,7 +424,7 @@ class portdbapi(dbapi):
 			# snag mtime since we use it later, and to trigger stat failure
 			# if it doesn't exist
 			ebuild_hash.mtime
-		except OSError:
+		except FileNotFound:
 			writemsg(_("!!! aux_get(): ebuild for " \
 				"'%s' does not exist at:\n") % (cpv,), noiselevel=-1)
 			writemsg("!!!            %s\n" % ebuild_path, noiselevel=-1)

diff --git a/pym/portage/eclass_cache.py b/pym/portage/eclass_cache.py
index adfe69a..4a934f1 100644
--- a/pym/portage/eclass_cache.py
+++ b/pym/portage/eclass_cache.py
@@ -9,7 +9,7 @@ import sys
 import operator
 from portage.util import normalize_path
 import errno
-from portage.exception import PermissionDenied
+from portage.exception import FileNotFound, PermissionDenied
 from portage import os
 from portage import checksum
 
@@ -30,7 +30,12 @@ class hashed_path(object):
 			# the straight c api.
 			# thus use the defacto python compatibility work around;
 			# access via index, which guarantees you get the raw long.
-			self.mtime = obj = os.stat(self.location)[stat.ST_MTIME]
+			try:
+				self.mtime = obj = os.stat(self.location)[stat.ST_MTIME]
+			except OSError as e:
+				if e.errno in (errno.ENOENT, errno.ESTALE):
+					raise FileNotFound(self.location)
+				raise
 			return obj
 		if not attr.islower():
 			# we don't care to allow .mD5 as an alias for .md5
@@ -113,7 +118,7 @@ class cache(object):
 				obj.eclass_dir = x
 				try:
 					mtime = obj.mtime
-				except OSError:
+				except FileNotFound:
 					continue
 				ys=y[:-eclass_len]
 				if x == self._master_eclass_root:



^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/
@ 2014-08-03 21:53 Pavel Kazakov
  0 siblings, 0 replies; 11+ messages in thread
From: Pavel Kazakov @ 2014-08-03 21:53 UTC (permalink / raw
  To: gentoo-commits

commit:     96ded9cff423d773ee31a696a691dd6610c315b7
Author:     Pavel Kazakov <nullishzero <AT> gentoo <DOT> org>
AuthorDate: Sun Aug  3 21:38:45 2014 +0000
Commit:     Pavel Kazakov <nullishzero <AT> gentoo <DOT> org>
CommitDate: Sun Aug  3 21:38:45 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=96ded9cf

Move -MERGING- string to a constant.

Remove extra whitespace.

---
 pym/portage/const.py          | 1 +
 pym/portage/dbapi/__init__.py | 4 +++-
 pym/portage/dbapi/vartree.py  | 8 ++++----
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/pym/portage/const.py b/pym/portage/const.py
index 1785bff..50f0719 100644
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@ -74,6 +74,7 @@ MOVE_BINARY              = "/bin/mv"
 PRELINK_BINARY           = "/usr/sbin/prelink"
 
 INVALID_ENV_FILE         = "/etc/spork/is/not/valid/profile.env"
+MERGING_IDENTIFIER       = "-MERGING-"
 REPO_NAME_FILE           = "repo_name"
 REPO_NAME_LOC            = "profiles" + "/" + REPO_NAME_FILE
 

diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index a20a1e8..6638352 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -16,6 +16,8 @@ portage.proxy.lazyimport.lazyimport(globals(),
 	'portage.versions:catsplit,catpkgsplit,vercmp,_pkg_str',
 )
 
+from portage.const import MERGING_IDENTIFIER
+
 from portage import os
 from portage import auxdbkeys
 from portage.eapi import _get_eapi_attrs
@@ -278,7 +280,7 @@ class dbapi(object):
 		return True
 
 	def invalidentry(self, mypath):
-		if '/-MERGING-' in mypath:
+		if MERGING_IDENTIFIER in mypath:
 			if os.path.exists(mypath):
 				writemsg(colorize("BAD", _("INCOMPLETE MERGE:"))+" %s\n" % mypath,
 					noiselevel=-1)

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 4a27092..1984a66 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -45,7 +45,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
 )
 
 from portage.const import CACHE_PATH, CONFIG_MEMORY_FILE, \
-	PORTAGE_PACKAGE_ATOM, PRIVATE_PATH, VDB_PATH
+	MERGING_IDENTIFIER, PORTAGE_PACKAGE_ATOM, PRIVATE_PATH, VDB_PATH
 from portage.dbapi import dbapi
 from portage.exception import CommandNotFound, \
 	InvalidData, InvalidLocation, InvalidPackageName, \
@@ -104,7 +104,7 @@ class vardbapi(dbapi):
 
 	_excluded_dirs = ["CVS", "lost+found"]
 	_excluded_dirs = [re.escape(x) for x in _excluded_dirs]
-	_excluded_dirs = re.compile(r'^(\..*|-MERGING-.*|' + \
+	_excluded_dirs = re.compile(r'^(\..*|' + MERGING_IDENTIFIER + '.*|' + \
 		"|".join(_excluded_dirs) + r')$')
 
 	_aux_cache_version        = "1"
@@ -446,7 +446,7 @@ class vardbapi(dbapi):
 				if self._excluded_dirs.match(y) is not None:
 					continue
 				subpath = x + "/" + y
-				# -MERGING- should never be a cpv, nor should files.
+				# MERGING_IDENTIFIER should never be a cpv, nor should files.
 				try:
 					if catpkgsplit(subpath) is None:
 						self.invalidentry(self.getpath(subpath))
@@ -1504,7 +1504,7 @@ class dblink(object):
 		self.dbroot = normalize_path(os.path.join(self._eroot, VDB_PATH))
 		self.dbcatdir = self.dbroot+"/"+cat
 		self.dbpkgdir = self.dbcatdir+"/"+pkg
-		self.dbtmpdir = self.dbcatdir+"/-MERGING-"+pkg
+		self.dbtmpdir = self.dbcatdir+MERGING_IDENTIFIER+pkg
 		self.dbdir = self.dbpkgdir
 		self.settings = mysettings
 		self._verbose = self.settings.get("PORTAGE_VERBOSE") == "1"


^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/
@ 2014-08-04 21:41 Arfrever Frehtes Taifersar Arahesis
  0 siblings, 0 replies; 11+ messages in thread
From: Arfrever Frehtes Taifersar Arahesis @ 2014-08-04 21:41 UTC (permalink / raw
  To: gentoo-commits

commit:     3e4b7a5128689697e87416293d9c45d4fa2fbf76
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Mon Aug  4 21:40:44 2014 +0000
Commit:     Arfrever Frehtes Taifersar Arahesis <arfrever <AT> apache <DOT> org>
CommitDate: Mon Aug  4 21:40:44 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=3e4b7a51

Follow-up to commit 96ded9cff423d773ee31a696a691dd6610c315b7: Restore "/" characters.

---
 pym/portage/const.py          | 2 +-
 pym/portage/dbapi/__init__.py | 4 ++--
 pym/portage/dbapi/vartree.py  | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/pym/portage/const.py b/pym/portage/const.py
index 50f0719..aab6e8a 100644
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@ -1,5 +1,5 @@
 # portage: Constants
-# Copyright 1998-2013 Gentoo Foundation
+# Copyright 1998-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals

diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index 6638352..34dfaa7 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2013 Gentoo Foundation
+# Copyright 1998-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -280,7 +280,7 @@ class dbapi(object):
 		return True
 
 	def invalidentry(self, mypath):
-		if MERGING_IDENTIFIER in mypath:
+		if "/" + MERGING_IDENTIFIER in mypath:
 			if os.path.exists(mypath):
 				writemsg(colorize("BAD", _("INCOMPLETE MERGE:"))+" %s\n" % mypath,
 					noiselevel=-1)

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 1984a66..2086d4c 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -446,7 +446,7 @@ class vardbapi(dbapi):
 				if self._excluded_dirs.match(y) is not None:
 					continue
 				subpath = x + "/" + y
-				# MERGING_IDENTIFIER should never be a cpv, nor should files.
+				# -MERGING- should never be a cpv, nor should files.
 				try:
 					if catpkgsplit(subpath) is None:
 						self.invalidentry(self.getpath(subpath))
@@ -1504,7 +1504,7 @@ class dblink(object):
 		self.dbroot = normalize_path(os.path.join(self._eroot, VDB_PATH))
 		self.dbcatdir = self.dbroot+"/"+cat
 		self.dbpkgdir = self.dbcatdir+"/"+pkg
-		self.dbtmpdir = self.dbcatdir+MERGING_IDENTIFIER+pkg
+		self.dbtmpdir = self.dbcatdir+"/"+MERGING_IDENTIFIER+pkg
 		self.dbdir = self.dbpkgdir
 		self.settings = mysettings
 		self._verbose = self.settings.get("PORTAGE_VERBOSE") == "1"


^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/
@ 2014-08-19  7:01 Michał Górny
  0 siblings, 0 replies; 11+ messages in thread
From: Michał Górny @ 2014-08-19  7:01 UTC (permalink / raw
  To: gentoo-commits

commit:     96ded9cff423d773ee31a696a691dd6610c315b7
Author:     Pavel Kazakov <nullishzero <AT> gentoo <DOT> org>
AuthorDate: Sun Aug  3 21:38:45 2014 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Aug  3 21:38:45 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=96ded9cf

Move -MERGING- string to a constant.

Remove extra whitespace.

---
 pym/portage/const.py          | 1 +
 pym/portage/dbapi/__init__.py | 4 +++-
 pym/portage/dbapi/vartree.py  | 8 ++++----
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/pym/portage/const.py b/pym/portage/const.py
index 1785bff..50f0719 100644
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@ -74,6 +74,7 @@ MOVE_BINARY              = "/bin/mv"
 PRELINK_BINARY           = "/usr/sbin/prelink"
 
 INVALID_ENV_FILE         = "/etc/spork/is/not/valid/profile.env"
+MERGING_IDENTIFIER       = "-MERGING-"
 REPO_NAME_FILE           = "repo_name"
 REPO_NAME_LOC            = "profiles" + "/" + REPO_NAME_FILE
 

diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index a20a1e8..6638352 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -16,6 +16,8 @@ portage.proxy.lazyimport.lazyimport(globals(),
 	'portage.versions:catsplit,catpkgsplit,vercmp,_pkg_str',
 )
 
+from portage.const import MERGING_IDENTIFIER
+
 from portage import os
 from portage import auxdbkeys
 from portage.eapi import _get_eapi_attrs
@@ -278,7 +280,7 @@ class dbapi(object):
 		return True
 
 	def invalidentry(self, mypath):
-		if '/-MERGING-' in mypath:
+		if MERGING_IDENTIFIER in mypath:
 			if os.path.exists(mypath):
 				writemsg(colorize("BAD", _("INCOMPLETE MERGE:"))+" %s\n" % mypath,
 					noiselevel=-1)

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 4a27092..1984a66 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -45,7 +45,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
 )
 
 from portage.const import CACHE_PATH, CONFIG_MEMORY_FILE, \
-	PORTAGE_PACKAGE_ATOM, PRIVATE_PATH, VDB_PATH
+	MERGING_IDENTIFIER, PORTAGE_PACKAGE_ATOM, PRIVATE_PATH, VDB_PATH
 from portage.dbapi import dbapi
 from portage.exception import CommandNotFound, \
 	InvalidData, InvalidLocation, InvalidPackageName, \
@@ -104,7 +104,7 @@ class vardbapi(dbapi):
 
 	_excluded_dirs = ["CVS", "lost+found"]
 	_excluded_dirs = [re.escape(x) for x in _excluded_dirs]
-	_excluded_dirs = re.compile(r'^(\..*|-MERGING-.*|' + \
+	_excluded_dirs = re.compile(r'^(\..*|' + MERGING_IDENTIFIER + '.*|' + \
 		"|".join(_excluded_dirs) + r')$')
 
 	_aux_cache_version        = "1"
@@ -446,7 +446,7 @@ class vardbapi(dbapi):
 				if self._excluded_dirs.match(y) is not None:
 					continue
 				subpath = x + "/" + y
-				# -MERGING- should never be a cpv, nor should files.
+				# MERGING_IDENTIFIER should never be a cpv, nor should files.
 				try:
 					if catpkgsplit(subpath) is None:
 						self.invalidentry(self.getpath(subpath))
@@ -1504,7 +1504,7 @@ class dblink(object):
 		self.dbroot = normalize_path(os.path.join(self._eroot, VDB_PATH))
 		self.dbcatdir = self.dbroot+"/"+cat
 		self.dbpkgdir = self.dbcatdir+"/"+pkg
-		self.dbtmpdir = self.dbcatdir+"/-MERGING-"+pkg
+		self.dbtmpdir = self.dbcatdir+MERGING_IDENTIFIER+pkg
 		self.dbdir = self.dbpkgdir
 		self.settings = mysettings
 		self._verbose = self.settings.get("PORTAGE_VERBOSE") == "1"


^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/
@ 2014-08-19  7:01 Michał Górny
  0 siblings, 0 replies; 11+ messages in thread
From: Michał Górny @ 2014-08-19  7:01 UTC (permalink / raw
  To: gentoo-commits

commit:     3e4b7a5128689697e87416293d9c45d4fa2fbf76
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Mon Aug  4 21:40:44 2014 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Aug  4 21:40:44 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=3e4b7a51

Follow-up to commit 96ded9cff423d773ee31a696a691dd6610c315b7: Restore "/" characters.

---
 pym/portage/const.py          | 2 +-
 pym/portage/dbapi/__init__.py | 4 ++--
 pym/portage/dbapi/vartree.py  | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/pym/portage/const.py b/pym/portage/const.py
index 50f0719..aab6e8a 100644
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@ -1,5 +1,5 @@
 # portage: Constants
-# Copyright 1998-2013 Gentoo Foundation
+# Copyright 1998-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals

diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index 6638352..34dfaa7 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2013 Gentoo Foundation
+# Copyright 1998-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -280,7 +280,7 @@ class dbapi(object):
 		return True
 
 	def invalidentry(self, mypath):
-		if MERGING_IDENTIFIER in mypath:
+		if "/" + MERGING_IDENTIFIER in mypath:
 			if os.path.exists(mypath):
 				writemsg(colorize("BAD", _("INCOMPLETE MERGE:"))+" %s\n" % mypath,
 					noiselevel=-1)

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 1984a66..2086d4c 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -446,7 +446,7 @@ class vardbapi(dbapi):
 				if self._excluded_dirs.match(y) is not None:
 					continue
 				subpath = x + "/" + y
-				# MERGING_IDENTIFIER should never be a cpv, nor should files.
+				# -MERGING- should never be a cpv, nor should files.
 				try:
 					if catpkgsplit(subpath) is None:
 						self.invalidentry(self.getpath(subpath))
@@ -1504,7 +1504,7 @@ class dblink(object):
 		self.dbroot = normalize_path(os.path.join(self._eroot, VDB_PATH))
 		self.dbcatdir = self.dbroot+"/"+cat
 		self.dbpkgdir = self.dbcatdir+"/"+pkg
-		self.dbtmpdir = self.dbcatdir+MERGING_IDENTIFIER+pkg
+		self.dbtmpdir = self.dbcatdir+"/"+MERGING_IDENTIFIER+pkg
 		self.dbdir = self.dbpkgdir
 		self.settings = mysettings
 		self._verbose = self.settings.get("PORTAGE_VERBOSE") == "1"


^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/
@ 2016-12-28  0:01 Zac Medico
  0 siblings, 0 replies; 11+ messages in thread
From: Zac Medico @ 2016-12-28  0:01 UTC (permalink / raw
  To: gentoo-commits

commit:     67109fe41df07c9fa0e588b81f37ff61a71470f6
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Dec 27 20:29:11 2016 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Dec 27 23:49:11 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=67109fe4

binarytree._read_metadata: return empty strings for undefined values (bug 603826)

Fix the binarytree._read_metadata method to return empty strings for
undefined metadata values, in order to fulfill a contract with the
_pkg_str class. This prevents an AttributeError triggered by old
binary packages which have undefined repository metadata, as reported
in bug 603826.

X-Gentoo-bug: 603826
X-Gentoo-bug-url: https://bugs.gentoo.org/603826
Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>

 pym/portage/dbapi/bintree.py | 33 ++++++++++++++++++++++++++-------
 pym/portage/versions.py      |  8 +++++++-
 2 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index f483059..ae9e7ca 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2014 Gentoo Foundation
+# Copyright 1998-2016 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -743,7 +743,7 @@ class binarytree(object):
 
 					for k in self._pkgindex_allowed_pkg_keys:
 						v = pkg_metadata.get(k)
-						if v is not None:
+						if v:
 							d[k] = v
 					d["CPV"] = mycpv
 
@@ -1041,12 +1041,12 @@ class binarytree(object):
 				noiselevel=-1)
 			return
 		metadata = self._read_metadata(full_path, s)
-		slot = metadata.get("SLOT")
+		invalid_depend = False
 		try:
 			self._eval_use_flags(cpv, metadata)
 		except portage.exception.InvalidDependString:
-			slot = None
-		if slot is None:
+			invalid_depend = True
+		if invalid_depend or not metadata.get("SLOT"):
 			writemsg(_("!!! Invalid binary package: '%s'\n") % full_path,
 				noiselevel=-1)
 			return
@@ -1126,6 +1126,21 @@ class binarytree(object):
 		return cpv
 
 	def _read_metadata(self, filename, st, keys=None):
+		"""
+		Read metadata from a binary package. The returned metadata
+		dictionary will contain empty strings for any values that
+		are undefined (this is important because the _pkg_str class
+		distinguishes between missing and undefined values).
+
+		@param filename: File path of the binary package
+		@type filename: string
+		@param st: stat result for the binary package
+		@type st: os.stat_result
+		@param keys: optional list of specific metadata keys to retrieve
+		@type keys: iterable
+		@rtype: dict
+		@return: package metadata
+		"""
 		if keys is None:
 			keys = self.dbapi._aux_cache_keys
 			metadata = self.dbapi._aux_cache_slot_dict()
@@ -1139,10 +1154,14 @@ class binarytree(object):
 				metadata[k] = _unicode(st.st_size)
 			else:
 				v = binary_metadata.get(_unicode_encode(k))
-				if v is not None:
+				if v is None:
+					if k == "EAPI":
+						metadata[k] = "0"
+					else:
+						metadata[k] = ""
+				else:
 					v = _unicode_decode(v)
 					metadata[k] = " ".join(v.split())
-		metadata.setdefault("EAPI", "0")
 		return metadata
 
 	def _inject_file(self, pkgindex, cpv, filename):

diff --git a/pym/portage/versions.py b/pym/portage/versions.py
index a028d93..adfb1c3 100644
--- a/pym/portage/versions.py
+++ b/pym/portage/versions.py
@@ -1,5 +1,5 @@
 # versions.py -- core Portage functionality
-# Copyright 1998-2014 Gentoo Foundation
+# Copyright 1998-2016 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -359,6 +359,12 @@ class _pkg_str(_unicode):
 	Instances are typically created in dbapi.cp_list() or the Atom contructor,
 	and propagate from there. Generally, code that pickles these objects will
 	manually convert them to a plain unicode object first.
+
+	Instances of this class will have missing attributes for metadata that
+	has not been passed into the constructor. The missing attributes are
+	used to distinguish missing metadata values from undefined metadata values.
+	For example, the repo attribute will be missing if the 'repository' key
+	is missing from the metadata dictionary.
 	"""
 
 	def __new__(cls, cpv, metadata=None, settings=None, eapi=None,


^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/
@ 2018-05-17 18:40 Zac Medico
  0 siblings, 0 replies; 11+ messages in thread
From: Zac Medico @ 2018-05-17 18:40 UTC (permalink / raw
  To: gentoo-commits

commit:     b2a5f03abc0c172b6189226e6f9a7491a002cf51
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu May 17 18:38:27 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu May 17 18:38:27 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=b2a5f03a

MergeProcess,spawn: unregister SIGCHLD and wakeup_fd (bug 655656)

In order to prevent forked processes from invoking the parent process's
SIGCHLD handler and writing to wakeup_fd (triggering BlockingIOError),
unregister the SIGCHLD and wakeup_fd.

Bug: https://bugs.gentoo.org/655656
Reported-by: Helmut Jarausch <jarausch <AT> igpm.rwth-aachen.de>

 pym/portage/dbapi/_MergeProcess.py | 10 ++++++++++
 pym/portage/process.py             | 10 ++++++++++
 2 files changed, 20 insertions(+)

diff --git a/pym/portage/dbapi/_MergeProcess.py b/pym/portage/dbapi/_MergeProcess.py
index fefdf8635..371550079 100644
--- a/pym/portage/dbapi/_MergeProcess.py
+++ b/pym/portage/dbapi/_MergeProcess.py
@@ -178,6 +178,16 @@ class MergeProcess(ForkProcess):
 			signal.signal(signal.SIGINT, signal.SIG_DFL)
 			signal.signal(signal.SIGTERM, signal.SIG_DFL)
 
+			# Unregister SIGCHLD handler and wakeup_fd for the parent
+			# process's event loop (bug 655656).
+			signal.signal(signal.SIGCHLD, signal.SIG_DFL)
+			try:
+				wakeup_fd = signal.set_wakeup_fd(-1)
+				if wakeup_fd > 0:
+					os.close(wakeup_fd)
+			except (ValueError, OSError):
+				pass
+
 			portage.locks._close_fds()
 			# We don't exec, so use close_fds=False
 			# (see _setup_pipes docstring).

diff --git a/pym/portage/process.py b/pym/portage/process.py
index 2af783e22..fd326731a 100644
--- a/pym/portage/process.py
+++ b/pym/portage/process.py
@@ -472,6 +472,16 @@ def _exec(binary, mycommand, opt_name, fd_pipes, env, gid, groups, uid, umask,
 	signal.signal(signal.SIGINT, signal.SIG_DFL)
 	signal.signal(signal.SIGTERM, signal.SIG_DFL)
 
+	# Unregister SIGCHLD handler and wakeup_fd for the parent
+	# process's event loop (bug 655656).
+	signal.signal(signal.SIGCHLD, signal.SIG_DFL)
+	try:
+		wakeup_fd = signal.set_wakeup_fd(-1)
+		if wakeup_fd > 0:
+			os.close(wakeup_fd)
+	except (ValueError, OSError):
+		pass
+
 	# Quiet killing of subprocesses by SIGPIPE (see bug #309001).
 	signal.signal(signal.SIGPIPE, signal.SIG_DFL)
 


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

end of thread, other threads:[~2018-05-17 18:40 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-02-14  4:02 [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/, pym/portage/ Zac Medico
  -- strict thread matches above, loose matches on Subject: below --
2011-03-27 20:57 Zac Medico
2011-05-05 15:13 Zac Medico
2011-09-06 18:35 Zac Medico
2011-10-16 21:13 Zac Medico
2014-08-03 21:53 Pavel Kazakov
2014-08-04 21:41 Arfrever Frehtes Taifersar Arahesis
2014-08-19  7:01 Michał Górny
2014-08-19  7:01 Michał Górny
2016-12-28  0:01 Zac Medico
2018-05-17 18:40 Zac Medico

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