summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-05-31 07:00:45 +0000
committerZac Medico <zmedico@gentoo.org>2007-05-31 07:00:45 +0000
commit7255572e21e1e017266da3888648c172a63870f7 (patch)
treefc30a63ac949fb9a0c4ebea079e5c3b949134642 /pym
parentf50684e83a2a3ef71556e276d03534a5d9bbb500 (diff)
downloadportage-7255572e21e1e017266da3888648c172a63870f7.tar.gz
portage-7255572e21e1e017266da3888648c172a63870f7.tar.bz2
portage-7255572e21e1e017266da3888648c172a63870f7.zip
Create one unified dbapi.move_slot_ent() method to replace the corresponding binarytree and vardbapi methods.
svn path=/main/trunk/; revision=6688
Diffstat (limited to 'pym')
-rw-r--r--pym/portage/dbapi/__init__.py18
-rw-r--r--pym/portage/dbapi/bintree.py45
-rw-r--r--pym/portage/dbapi/vartree.py28
3 files changed, 23 insertions, 68 deletions
diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index fce395b00..ef91d4de1 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -78,3 +78,21 @@ class dbapi(object):
aux_update(cpv, metadata_updates)
if onProgress:
onProgress(maxval, i+1)
+
+ def move_slot_ent(self, mylist):
+ pkg = mylist[1]
+ origslot = mylist[2]
+ newslot = mylist[3]
+ origmatches = self.match(pkg)
+ moves = 0
+ if not origmatches:
+ return moves
+ from portage.versions import catsplit
+ for mycpv in origmatches:
+ slot = self.aux_get(mycpv, ["SLOT"])[0]
+ if slot != origslot:
+ continue
+ moves += 1
+ mydata = {"SLOT": newslot+"\n"}
+ self.aux_update(mycpv, mydata)
+ return moves
diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index 66d89cb0b..b8a24e515 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -16,7 +16,6 @@ class bindbapi(fakedbapi):
def __init__(self, mybintree=None, settings=None):
self.bintree = mybintree
self.move_ent = mybintree.move_ent
- self.move_slot_ent = mybintree.move_slot_ent
self.cpvdict={}
self.cpdict={}
if settings is None:
@@ -90,6 +89,10 @@ class bindbapi(fakedbapi):
self.bintree.populate()
return fakedbapi.cpv_all(self)
+ def move_slot_ent(self, mylist):
+ if not self.bintree.populated:
+ self.bintree.populate()
+ return fakedbapi.move_slot_ent(self, mylist)
class binarytree(object):
"this tree scans for a list of all packages available in PKGDIR"
@@ -112,6 +115,7 @@ class binarytree(object):
self.pkgdir = normalize_path(pkgdir)
self.dbapi = bindbapi(self, settings=settings)
self.update_ents = self.dbapi.update_ents
+ self.move_slot_ent = self.dbapi.move_slot_ent
self.populated = 0
self.tree = {}
self.remotepkgs = {}
@@ -229,45 +233,6 @@ class binarytree(object):
del e
os.symlink(os.path.join("..", "All", mypkg + ".tbz2"), full_path)
- def move_slot_ent(self, mylist):
- if not self.populated:
- self.populate()
- pkg = mylist[1]
- origslot = mylist[2]
- newslot = mylist[3]
-
- if not isvalidatom(pkg):
- raise InvalidAtom(pkg)
-
- origmatches = self.dbapi.match(pkg)
- moves = 0
- if not origmatches:
- return moves
- for mycpv in origmatches:
- mycpsplit = catpkgsplit(mycpv)
- myoldpkg = mycpv.split("/")[1]
- tbz2path = self.getname(mycpv)
- if os.path.exists(tbz2path) and not os.access(tbz2path,os.W_OK):
- writemsg("!!! Cannot update readonly binary: "+mycpv+"\n",
- noiselevel=-1)
- continue
-
- #print ">>> Updating data in:",mycpv
- mytbz2 = portage.xpak.tbz2(tbz2path)
- mydata = mytbz2.get_data()
-
- slot = mydata["SLOT"]
- if (not slot):
- continue
-
- if (slot[0] != origslot):
- continue
-
- moves += 1
- mydata["SLOT"] = newslot+"\n"
- mytbz2.recompose_mem(portage.xpak.xpak_mem(mydata))
- return moves
-
def prevent_collision(self, cpv):
"""Make sure that the file location ${PKGDIR}/All/${PF}.tbz2 is safe to
use for a given cpv. If a collision will occur with an existing
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 2283b5a31..23676c91b 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -316,34 +316,6 @@ class vardbapi(dbapi):
fixdbentries([mylist], newpath)
return moves
- def move_slot_ent(self, mylist):
- pkg = mylist[1]
- origslot = mylist[2]
- newslot = mylist[3]
-
- if not isvalidatom(pkg):
- raise InvalidAtom(pkg)
-
- origmatches = self.match(pkg, use_cache=0)
- moves = 0
- if not origmatches:
- return moves
- for mycpv in origmatches:
- origpath = self.getpath(mycpv)
- if not os.path.exists(origpath):
- continue
-
- slot = grabfile(os.path.join(origpath, "SLOT"));
- if (not slot):
- continue
-
- if (slot[0] != origslot):
- continue
-
- moves += 1
- write_atomic(os.path.join(origpath, "SLOT"), newslot+"\n")
- return moves
-
def cp_list(self, mycp, use_cache=1):
mysplit=catsplit(mycp)
if mysplit[0] == '*':