From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1PuVsM-0004SH-Tv for garchives@archives.gentoo.org; Tue, 01 Mar 2011 20:08:55 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 652B1E071C; Tue, 1 Mar 2011 20:08:48 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 308D4E071C for ; Tue, 1 Mar 2011 20:08:48 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id B2F661B4011 for ; Tue, 1 Mar 2011 20:08:47 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 0DEFE8006A for ; Tue, 1 Mar 2011 20:08:42 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <4778b4b46260a7f585e30c712a1002361302f4db.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/dbapi/ X-VCS-Repository: proj/portage X-VCS-Files: pym/portage/dbapi/vartree.py X-VCS-Directories: pym/portage/dbapi/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 4778b4b46260a7f585e30c712a1002361302f4db Date: Tue, 1 Mar 2011 20:08:42 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: cc17c3dc86270cda4ae39b30706b8abb commit: 4778b4b46260a7f585e30c712a1002361302f4db Author: Zac Medico gentoo org> AuthorDate: Tue Mar 1 20:07:53 2011 +0000 Commit: Zac Medico gentoo org> CommitDate: Tue Mar 1 20:07:53 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3D4778b4b4 unmerge: implicitly unmerge parent directories We can't necessarily assume that they are explicitly listed in CONTENTS. --- pym/portage/dbapi/vartree.py | 19 ++++++++++++++++--- 1 files changed, 16 insertions(+), 3 deletions(-) diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 2e5d873..77d0256 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -1785,7 +1785,7 @@ class dblink(object): mykeys.reverse() =20 #process symlinks second-to-last, directories last. - mydirs =3D [] + mydirs =3D set() ignored_unlink_errnos =3D ( errno.EBUSY, errno.ENOENT, errno.ENOTDIR, errno.EISDIR) @@ -1847,6 +1847,7 @@ class dblink(object): =20 real_root =3D self.settings['ROOT'] real_root_len =3D len(real_root) - 1 + eroot_split_len =3D len(self.settings["EROOT"].split(os.sep)) - 1 =20 for i, objkey in enumerate(mykeys): =20 @@ -1872,6 +1873,18 @@ class dblink(object): os =3D portage.os perf_md5 =3D portage.checksum.perform_md5 =20 + # Try to unmerge parent directories of everything + # listed in CONTENTS, since we can't necessarily + # assume that directories are listed in CONTENTS. + obj_split =3D obj.split(os.sep) + obj_split.pop() + while len(obj_split) > eroot_split_len: + parent =3D os.sep.join(obj_split) + if parent in mydirs: + break + mydirs.add(parent) + obj_split.pop() + file_data =3D pkgfiles[objkey] file_type =3D file_data[0] statobj =3D None @@ -1940,7 +1953,7 @@ class dblink(object): if lstatobj is None or not stat.S_ISDIR(lstatobj.st_mode): show_unmerge("---", unmerge_desc["!dir"], file_type, obj) continue - mydirs.append(obj) + mydirs.add(obj) elif pkgfiles[objkey][0] =3D=3D "sym": if not islink: show_unmerge("---", unmerge_desc["!sym"], file_type, obj) @@ -1992,7 +2005,7 @@ class dblink(object): elif pkgfiles[objkey][0] =3D=3D "dev": show_unmerge("---", "", file_type, obj) =20 - mydirs.sort() + mydirs =3D sorted(mydirs) mydirs.reverse() =20 for obj in mydirs: