Move merge and unmerge functions to the vartree module. (trunk r15468)
authorZac Medico <zmedico@gentoo.org>
Tue, 2 Mar 2010 21:05:00 +0000 (21:05 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 2 Mar 2010 21:05:00 +0000 (21:05 -0000)
svn path=/main/branches/2.1.7/; revision=15677

pym/portage/__init__.py
pym/portage/dbapi/vartree.py

index 9527cf15208011b0516f3c2bda67b25819205208..a49244e5d670c145932fec09f87bf2e778aa1282 100644 (file)
@@ -86,7 +86,7 @@ try:
                'portage.dbapi.dep_expand:dep_expand',
                'portage.dbapi.porttree:close_portdbapi_caches,FetchlistDict,' + \
                        'portagetree,portdbapi',
-               'portage.dbapi.vartree:vardbapi,vartree,dblink',
+               'portage.dbapi.vartree:dblink,merge,unmerge,vardbapi,vartree',
                'portage.dbapi.virtual:fakedbapi',
                'portage.dep',
                'portage.dep:best_match_to_list,dep_getcpv,dep_getkey,' + \
@@ -616,35 +616,6 @@ def _movefile(src, dest, **kwargs):
                raise portage.exception.PortageException(
                        "mv '%s' '%s'" % (src, dest))
 
-def merge(mycat, mypkg, pkgloc, infloc, myroot, mysettings, myebuild=None,
-       mytree=None, mydbapi=None, vartree=None, prev_mtimes=None, blockers=None,
-       scheduler=None):
-       if not os.access(myroot, os.W_OK):
-               writemsg(_("Permission denied: access('%s', W_OK)\n") % myroot,
-                       noiselevel=-1)
-               return errno.EACCES
-       mylink = dblink(mycat, mypkg, myroot, mysettings, treetype=mytree,
-               vartree=vartree, blockers=blockers, scheduler=scheduler)
-       return mylink.merge(pkgloc, infloc, myroot, myebuild,
-               mydbapi=mydbapi, prev_mtimes=prev_mtimes)
-
-def unmerge(cat, pkg, myroot, mysettings, mytrimworld=1, vartree=None,
-       ldpath_mtimes=None, scheduler=None):
-       mylink = dblink(cat, pkg, myroot, mysettings, treetype="vartree",
-               vartree=vartree, scheduler=scheduler)
-       vartree = mylink.vartree
-       try:
-               mylink.lockdb()
-               if mylink.exists():
-                       retval = mylink.unmerge(trimworld=mytrimworld, cleanup=1,
-                               ldpath_mtimes=ldpath_mtimes)
-                       if retval == os.EX_OK:
-                               mylink.delete()
-                       return retval
-               return os.EX_OK
-       finally:
-               mylink.unlockdb()
-
 auxdbkeys = (
   'DEPEND',    'RDEPEND',   'SLOT',      'SRC_URI',
        'RESTRICT',  'HOMEPAGE',  'LICENSE',   'DESCRIPTION',
index 4c569d3f0e3bf7ed9c646bc29ea4b279a6e462f9..1c08c7007fcf4cd3d40f8e9967798d000d9f682c 100644 (file)
@@ -3314,6 +3314,38 @@ class dblink(object):
                "Is this a regular package (does it have a CATEGORY file?  A dblink can be virtual *and* regular)"
                return os.path.exists(os.path.join(self.dbdir, "CATEGORY"))
 
+def merge(mycat, mypkg, pkgloc, infloc, myroot, mysettings, myebuild=None,
+       mytree=None, mydbapi=None, vartree=None, prev_mtimes=None, blockers=None,
+       scheduler=None):
+       if not os.access(myroot, os.W_OK):
+               writemsg(_("Permission denied: access('%s', W_OK)\n") % myroot,
+                       noiselevel=-1)
+               return errno.EACCES
+       mylink = dblink(mycat, mypkg, myroot, mysettings, treetype=mytree,
+               vartree=vartree, blockers=blockers, scheduler=scheduler)
+       return mylink.merge(pkgloc, infloc, myroot, myebuild,
+               mydbapi=mydbapi, prev_mtimes=prev_mtimes)
+
+def unmerge(cat, pkg, myroot, mysettings, mytrimworld=1, vartree=None,
+       ldpath_mtimes=None, scheduler=None):
+       mylink = dblink(cat, pkg, myroot, mysettings, treetype="vartree",
+               vartree=vartree, scheduler=scheduler)
+       vartree = mylink.vartree
+       try:
+               mylink.lockdb()
+               if mylink.exists():
+                       vartree.dbapi.plib_registry.load()
+                       vartree.dbapi.plib_registry.pruneNonExisting()
+                       retval = mylink.unmerge(trimworld=mytrimworld, cleanup=1,
+                               ldpath_mtimes=ldpath_mtimes)
+                       if retval == os.EX_OK:
+                               mylink.delete()
+                       return retval
+               return os.EX_OK
+       finally:
+               vartree.dbapi.linkmap._clear_cache()
+               mylink.unlockdb()
+
 def write_contents(contents, root, f):
        """
        Write contents to any file like object. The file will be left open.