diff --git a/pisi/repodb.py b/pisi/repodb.py index 4033a111..01cf1867 100644 --- a/pisi/repodb.py +++ b/pisi/repodb.py @@ -42,10 +42,12 @@ class Repo: class RepoDB(object): """RepoDB maps repo ids to repository information""" - def __init__(self): + def __init__(self, txn = None): self.d = shelve.LockedDBShelf("repo") - if not self.d.has_key("order"): - self.d["order"] = [] + def proc(txn): + if not self.d.has_key("order", txn): + self.d.put("order", [], txn) + self.d.txn_proc(proc, txn) def init_dbs(self): # initialize package/source dbs @@ -60,11 +62,13 @@ class RepoDB(object): return l[ix] def swap(self, x, y): - l = self.d["order"] - t = l[x] - l[x] = l[y] - l[y] = t - self.d["order"] = l + def proc(txn): + l = self.d.get("order", txn) + t = l[x] + l[x] = l[y] + l[y] = t + self.d.put("order", l, txn) + self.d.txn_proc(proc, txn) def has_repo(self, name): name = str(name) @@ -74,16 +78,18 @@ class RepoDB(object): name = str(name) return self.d["repo-" + name] - def add_repo(self, name, repo_info): + def add_repo(self, name, repo_info, txn = None): name = str(name) assert (isinstance(repo_info,Repo)) - if self.d.has_key("repo-" + name): - raise Error(_('Repository %s already exists') % name) - self.d["repo-" + name] = repo_info - order = self.d["order"] - order.append(name) - self.d["order"] = order - packagedb.add_db(name) + def proc(txn): + if self.d.has_key("repo-" + name, txn): + raise Error(_('Repository %s already exists') % name) + self.d.put("repo-" + name, repo_info, txn) + order = self.d.get("order", txn) + order.append(name) + self.d.put("order", order, txn) + packagedb.add_db(name) + self.d.txn_proc(proc, txn) def list(self): return self.d["order"] @@ -91,13 +97,14 @@ class RepoDB(object): def clear(self): self.d.clear() - def remove_repo(self, name): + def remove_repo(self, name, txn = None): name = str(name) - del self.d["repo-" + name] - l = self.d["order"] - l.remove(name) - self.d["order"] = l - + def proc(txn): + self.d.delete("repo-" + name, txn) + list = self.d.get("order", txn) + list.remove(name) + self.d.put("order", list, txn) + self.d.txn_proc(proc, txn) db = None @@ -117,5 +124,3 @@ def finalize(): if db: db.close() db = None - - diff --git a/tests/repodbtests.py b/tests/repodbtests.py index e8fd76ff..04f352e7 100644 --- a/tests/repodbtests.py +++ b/tests/repodbtests.py @@ -21,11 +21,10 @@ class RepoDBTestCase(testcase.TestCase): def testAddRemoveCycle(self): # written by cartman the celebrity, for bug #1909 - pisi.api.add_repo("foo","bar") for i in range(2): print '\nTest %d\n' % (i) - pisi.api.remove_repo("foo") pisi.api.add_repo("foo","bar") + pisi.api.remove_repo("foo") suite = unittest.makeSuite(RepoDBTestCase)