From: Zac Medico Date: Wed, 11 Jul 2007 00:39:18 +0000 (-0000) Subject: For bug #184679, handle ENOTDIR by finding the non-directory parent and testing that... X-Git-Tag: v2.1.3~67 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=7f635807c45baca25a3f64c88cfe0260eeeccb19;p=portage.git For bug #184679, handle ENOTDIR by finding the non-directory parent and testing that for collision instead. (trunk r7220) svn path=/main/branches/2.1.2/; revision=7221 --- diff --git a/pym/portage.py b/pym/portage.py index 158484195..2f916c81e 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -7613,7 +7613,8 @@ class dblink: starttime=time.time() i=0 collisions = [] - + destroot = normalize_path(destroot).rstrip(os.path.sep) + \ + os.path.sep print green("*")+" checking "+str(len(myfilelist))+" files for package collisions" for f in myfilelist: nocheck = False @@ -7633,10 +7634,34 @@ class dblink: try: dest_lstat = os.lstat(dest_path) except EnvironmentError, e: - if e.errno != errno.ENOENT: + if e.errno == errno.ENOENT: + del e + continue + elif e.errno == errno.ENOTDIR: + del e + # A non-directory is in a location where this package + # expects to have a directory. + dest_lstat = None + parent_path = dest_path + while len(parent_path) > len(destroot): + parent_path = os.path.dirname(parent_path) + try: + dest_lstat = os.lstat(parent_path) + break + except EnvironmentError, e: + if e.errno != errno.ENOTDIR: + raise + del e + if not dest_lstat: + raise AssertionError( + "unable to find non-directory " + \ + "parent for '%s'" % parent_path) + dest_path = parent_path + f = os.path.sep + dest_path[len(destroot):] + if f in collisions: + continue + else: raise - del e - continue if f[0] != "/": f="/"+f isowned = False