Add a vardbapi.aux_update() method for database maintenance. See bug #122089.
authorZac Medico <zmedico@gentoo.org>
Sun, 9 Jul 2006 20:09:40 +0000 (20:09 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 9 Jul 2006 20:09:40 +0000 (20:09 -0000)
svn path=/main/trunk/; revision=3821

pym/portage.py

index 92094569dffd4bc3c0ab4c00800a76a23f029136..424b637a16d400368d4e89d348838b81b35cf422 100644 (file)
@@ -4276,7 +4276,7 @@ class bindbapi(fakedbapi):
 
 cptot=0
 class vardbapi(dbapi):
-       def __init__(self, root, categories=None, settings=None):
+       def __init__(self, root, categories=None, settings=None, vartree=None):
                self.root       = root[:]
                #cache for category directory mtimes
                self.mtdircache = {}
@@ -4291,6 +4291,9 @@ class vardbapi(dbapi):
                if categories is None:
                        categories = settings.categories
                self.categories = categories[:]
+               if vartree is None:
+                       vartree = globals()["db"][root]["vartree"]
+               self.vartree = vartree
 
        def cpv_exists(self,mykey):
                "Tells us whether an actual ebuild exists on disk (no masking)"
@@ -4557,6 +4560,22 @@ class vardbapi(dbapi):
                                results[idx] = "0"
                return results
 
+       def aux_update(self, cpv, values):
+               cat, pkg = cpv.split("/")
+               mylink = dblink(cat, pkg, self.root, self.settings,
+                       treetype="vartree", vartree=self.vartree)
+               try:
+                       mylink.lockdb()
+               except portage_exception.DirectoryNotFound:
+                       raise KeyError(cpv)
+               try:
+                       if not mylink.exists():
+                               raise KeyError(cpv)
+                       for k, v in values.iteritems():
+                               mylink.setfile(k, v)
+               finally:
+                       mylink.unlockdb()
+
        def counter_tick(self,myroot,mycpv=None):
                return self.counter_tick_core(myroot,incrementing=1,mycpv=mycpv)
 
@@ -4647,8 +4666,8 @@ class vartree(packagetree):
                        self.settings = settings # for key_expand calls
                        if categories is None:
                                categories = settings.categories
-                       self.dbapi = vardbapi(
-                               self.root, categories=categories, settings=settings)
+                       self.dbapi = vardbapi(self.root, categories=categories,
+                               settings=settings, vartree=self)
                        self.populated  = 1
 
        def zap(self,mycpv):