Rev 431: Add insert function. in file:///home/jelmer/bzr-svn/customrevids/
Jelmer Vernooij
jelmer at samba.org
Thu May 17 12:09:40 BST 2007
At file:///home/jelmer/bzr-svn/customrevids/
------------------------------------------------------------
revno: 431
revision-id: jelmer at samba.org-20070517110929-wc2u2ow9zbbausfn
parent: jelmer at samba.org-20070516230120-uuh3vny3euhn152h
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: customrevids
timestamp: Thu 2007-05-17 12:09:29 +0100
message:
Add insert function.
modified:
branch.py svnbranch.py-20051017135706-11c749eb0dab04a7
checkout.py workingtree.py-20060306120941-b083cb0fdd4a69de
commit.py commit.py-20060607190346-qvq128wgfubhhgm2-1
fetch.py fetch.py-20060625004942-x2lfaib8ra707a8p-1
fileids.py fileids.py-20060714013623-u5iiyqqnko11grcf-1
repository.py repository.py-20060306123302-1f8c5069b3fe0265
revids.py revids.py-20070416220458-36vfa0730cchevp1-1
tests/test_branch.py test_branch.py-20060508162215-74ffeb5d608f8e20
tests/test_repos.py test_repos.py-20060508151940-ddc49a59257ca712
tests/test_revids.py test_revids.py-20070516230044-d7x872cqi7xb4eow-1
tree.py tree.py-20060624222557-dudlwqcmkf22lt2s-1
=== modified file 'branch.py'
--- a/branch.py 2007-04-16 01:30:09 +0000
+++ b/branch.py 2007-05-17 11:09:29 +0000
@@ -78,8 +78,15 @@
checkout_branch.pull(self, stop_revision=revision_id)
return checkout.create_workingtree(revision_id)
- def parse_revision_id(self, revid):
- (bp, revnum) = self.repository.parse_revision_id(revid)
+ """Look up the matching revision number on the mainline of the
+ branch.
+
+ :param revid: Revision id to look up.
+ :return: Revision number on the branch.
+ :raises NoSuchRevision: If the revision id was not found.
+ """
+ def lookup_revision_id(self, revid):
+ (bp, revnum) = self.repository.lookup_revision_id(revid)
assert bp.strip("/") == self.branch_path.strip("/"), \
"Got %r, expected %r" % (bp, self.branch_path)
return revnum
@@ -92,7 +99,7 @@
if revision_id is None:
rev.kind = svn.core.svn_opt_revision_head
else:
- revnum = self.parse_revision_id(revision_id)
+ revnum = self.lookup_revision_id(revision_id)
rev.kind = svn.core.svn_opt_revision_number
rev.value.number = revnum
mutter('hist: %r' % self.revision_history())
=== modified file 'checkout.py'
--- a/checkout.py 2007-05-16 13:43:09 +0000
+++ b/checkout.py 2007-05-17 11:09:29 +0000
@@ -351,7 +351,7 @@
self.base_tree = RevisionTree(self, Inventory(), revid)
return
- rev = self.branch.parse_revision_id(revid)
+ rev = self.branch.lookup_revision_id(revid)
self.base_revnum = rev
self.base_revid = revid
self.base_tree = SvnBasisTree(self)
@@ -363,7 +363,7 @@
def update_settings(wc, path):
id = newrevtree.inventory.path2id(path)
mutter("Updating settings for %r" % id)
- revnum = self.branch.parse_revision_id(
+ revnum = self.branch.lookup_revision_id(
newrevtree.inventory[id].revision)
svn.wc.process_committed2(self.abspath(path).rstrip("/"), wc,
@@ -488,7 +488,7 @@
stop_revision = self.branch.last_revision()
rev = svn.core.svn_opt_revision_t()
rev.kind = svn.core.svn_opt_revision_number
- rev.value.number = self.branch.parse_revision_id(stop_revision)
+ rev.value.number = self.branch.lookup_revision_id(stop_revision)
fetched = svn.client.update(self.basedir, rev, True, self.client_ctx)
self.base_revid = self.branch.repository.generate_revision_id(fetched, self.branch.branch_path)
result.new_revid = self.branch.generate_revision_id(fetched)
=== modified file 'commit.py'
--- a/commit.py 2007-04-16 23:29:57 +0000
+++ b/commit.py 2007-05-17 11:09:29 +0000
@@ -60,7 +60,7 @@
if len(self.merges) > 0:
# Bazaar Parents
if branch.last_revision():
- (bp, revnum) = repository.parse_revision_id(branch.last_revision())
+ (bp, revnum) = repository.lookup_revision_id(branch.last_revision())
old = repository.branchprop_list.get_property(bp, revnum, SVN_PROP_BZR_MERGE, "")
else:
old = ""
@@ -307,7 +307,7 @@
if self.branch.last_revision() is None:
self.base_revnum = 0
else:
- self.base_revnum = self.branch.parse_revision_id(
+ self.base_revnum = self.branch.lookup_revision_id(
self.branch.last_revision())
root = svn.delta.editor_invoke_open_root(self.editor, editor_baton,
=== modified file 'fetch.py'
--- a/fetch.py 2007-05-02 00:52:38 +0000
+++ b/fetch.py 2007-05-17 11:09:29 +0000
@@ -333,7 +333,7 @@
def _find_until(self, revision_id):
needed = []
parents = {}
- (path, until_revnum) = self.source.parse_revision_id(revision_id)
+ (path, until_revnum) = self.source.lookup_revision_id(revision_id)
prev_revid = None
for (branch, revnum) in self.source.follow_branch(path,
@@ -389,7 +389,7 @@
prev_inv = None
try:
for revid in needed:
- (branch, revnum) = self.source.parse_revision_id(revid)
+ (branch, revnum) = self.source.lookup_revision_id(revid)
pb.update('copying revision', num, len(needed))
parent_revid = parents[revid]
@@ -424,7 +424,7 @@
reporter.set_path("", revnum, True, None, pool)
else:
(parent_branch, parent_revnum) = \
- self.source.parse_revision_id(parent_revid)
+ self.source.lookup_revision_id(parent_revid)
transport.reparent("%s/%s" % (repos_root, parent_branch))
if parent_branch != branch:
=== modified file 'fileids.py'
--- a/fileids.py 2007-04-16 23:29:57 +0000
+++ b/fileids.py 2007-05-17 11:09:29 +0000
@@ -117,7 +117,7 @@
uuid, find_children)
if find_children is not None:
def get_children(path, revid):
- (bp, revnum) = self.repos.parse_revision_id(revid)
+ (bp, revnum) = self.repos.lookup_revision_id(revid)
for p in find_children(bp+"/"+path, revnum):
yield self.repos.scheme.unprefix(p)[1]
else:
@@ -174,7 +174,7 @@
pb.update('generating file id map', i, len(todo))
def find_children(path, revid):
- (bp, revnum) = self.repos.parse_revision_id(revid)
+ (bp, revnum) = self.repos.lookup_revision_id(revid)
for p in self.repos._log.find_children(bp+"/"+path, revnum):
yield self.repos.scheme.unprefix(p)[1]
=== modified file 'repository.py'
--- a/repository.py 2007-05-16 23:01:20 +0000
+++ b/repository.py 2007-05-17 11:09:29 +0000
@@ -201,7 +201,7 @@
if revision_id is None:
return [None]
- (path, revnum) = self.parse_revision_id(revision_id)
+ (path, revnum) = self.lookup_revision_id(revision_id)
ancestry = []
@@ -224,7 +224,7 @@
return True
try:
- (path, revnum) = self.parse_revision_id(revision_id)
+ (path, revnum) = self.lookup_revision_id(revision_id)
except NoSuchRevision:
return False
@@ -251,7 +251,7 @@
return SvnRevisionTree(self, revision_id)
def revision_fileid_renames(self, revid):
- (path, revnum) = self.parse_revision_id(revid)
+ (path, revnum) = self.lookup_revision_id(revid)
items = self.branchprop_list.get_property_diff(path, revnum,
SVN_PROP_BZR_FILEIDS).splitlines()
return dict(map(lambda x: x.split("\t"), items))
@@ -279,11 +279,11 @@
def revision_parents(self, revision_id, merged_data=None):
parent_ids = []
- (branch, revnum) = self.parse_revision_id(revision_id)
+ (branch, revnum) = self.lookup_revision_id(revision_id)
mainline_parent = self._mainline_revision_parent(branch, revnum)
if mainline_parent is not None:
parent_ids.append(mainline_parent)
- (parent_path, parent_revnum) = self.parse_revision_id(mainline_parent)
+ (parent_path, parent_revnum) = self.lookup_revision_id(mainline_parent)
else:
parent_path = None
@@ -323,7 +323,7 @@
if not revision_id or not isinstance(revision_id, basestring):
raise InvalidRevisionId(revision_id=revision_id, branch=self)
- (path, revnum) = self.parse_revision_id(revision_id)
+ (path, revnum) = self.lookup_revision_id(revision_id)
parent_ids = self.revision_parents(revision_id)
@@ -381,7 +381,7 @@
"""
return generate_svn_revision_id(self.uuid, revnum, path)
- def parse_revision_id(self, revid):
+ def lookup_revision_id(self, revid):
"""Parse an existing Subversion-based revision id.
:param revid: The revision id.
@@ -391,13 +391,13 @@
try:
(uuid, branch_path, revnum) = parse_svn_revision_id(revid)
+ if uuid == self.uuid:
+ return (branch_path, revnum)
except InvalidRevisionId:
- raise NoSuchRevision(self, revid)
-
- if uuid != self.uuid:
- raise NoSuchRevision(self, revid)
-
- return (branch_path, revnum)
+ pass
+
+ # FIXME: Look up in revision id map
+ return self.revmap.lookup_revid(revid)
def get_inventory_xml(self, revision_id):
return bzrlib.xml5.serializer_v5.write_inventory_to_string(
@@ -572,7 +572,7 @@
if revision_id is None:
return self._full_revision_graph()
- (path, revnum) = self.parse_revision_id(revision_id)
+ (path, revnum) = self.lookup_revision_id(revision_id)
_previous = revision_id
self._ancestry = {}
=== modified file 'revids.py'
--- a/revids.py 2007-05-16 23:01:20 +0000
+++ b/revids.py 2007-05-17 11:09:29 +0000
@@ -82,8 +82,7 @@
Stores mapping from revid -> (path, revnum, scheme)
"""
- def __init__(self, repos, cache_db=None):
- self.repos = repos
+ def __init__(self, cache_db=None):
if cache_db is None:
self.cachedb = sqlite3.connect(":memory:")
else:
@@ -95,9 +94,10 @@
self.cachedb.commit()
def lookup_revid(self, revid):
- for branch, revnum, scheme in self.cachedb.execute("select path, revnum, scheme from revmap where revid='%s'" % revid):
+ for branch, revnum, scheme in self.cachedb.execute(
+ "select path, revnum, scheme from revmap where revid='%s'" % revid):
return branch, revnum, scheme
-
- # FIXME: Find revid in the branch
-
- raise NoSuchRevision(self.repos, revid)
+ raise NoSuchRevision(self, revid)
+
+ def insert_revid(self, revid, branch, revnum, scheme):
+ self.cachedb.execute("insert into revmap (revid, path, revnum, scheme) VALUES (?, ?, ?, ?)", (revid, branch, revnum, scheme))
=== modified file 'tests/test_branch.py'
--- a/tests/test_branch.py 2007-04-15 17:35:04 +0000
+++ b/tests/test_branch.py 2007-05-17 11:09:29 +0000
@@ -36,17 +36,17 @@
branch.revision_history()
self.assertEqual(branch.generate_revision_id(0), branch.last_revision())
- def test_parse_revision_id_unknown(self):
+ def test_lookup_revision_id_unknown(self):
repos_url = self.make_client("a", "dc")
branch = Branch.open(repos_url)
self.assertRaises(NoSuchRevision,
- lambda: branch.parse_revision_id("bla"))
+ lambda: branch.lookup_revision_id("bla"))
- def test_parse_revision_id(self):
+ def test_lookup_revision_id(self):
repos_url = self.make_client("a", "dc")
branch = Branch.open(repos_url)
self.assertEquals(0,
- branch.parse_revision_id(branch.last_revision()))
+ branch.lookup_revision_id(branch.last_revision()))
def test_set_parent(self):
repos_url = self.make_client('a', 'dc')
=== modified file 'tests/test_repos.py'
--- a/tests/test_repos.py 2007-05-16 13:43:09 +0000
+++ b/tests/test_repos.py 2007-05-17 11:09:29 +0000
@@ -625,20 +625,20 @@
self.assertEqual("svn-v%d-undefined:%s::0" % (MAPPING_VERSION, repository.uuid),
repository.generate_revision_id(0, ""))
- def test_parse_revision_id(self):
+ def test_lookup_revision_id(self):
repos_url = self.make_client('d', 'dc')
repository = Repository.open("svn+%s" % repos_url)
- self.assertRaises(NoSuchRevision, repository.parse_revision_id,
+ self.assertRaises(NoSuchRevision, repository.lookup_revision_id,
"nonexisting")
self.assertEqual(("bloe", 1),
- repository.parse_revision_id(
+ repository.lookup_revision_id(
repository.generate_revision_id(1, "bloe")))
- def test_parse_revision_id_invalid_uuid(self):
+ def test_lookup_revision_id_invalid_uuid(self):
repos_url = self.make_client('d', 'dc')
repository = Repository.open("svn+%s" % repos_url)
self.assertRaises(NoSuchRevision,
- repository.parse_revision_id,
+ repository.lookup_revision_id,
generate_svn_revision_id("invaliduuid", 0, ""))
def test_check(self):
=== modified file 'tests/test_revids.py'
--- a/tests/test_revids.py 2007-05-16 23:01:20 +0000
+++ b/tests/test_revids.py 2007-05-17 11:09:29 +0000
@@ -14,21 +14,33 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-from bzrlib.errors import NoSuchRevision
+from bzrlib.errors import NoSuchRevision, InvalidRevisionId
from bzrlib.repository import Repository
+from bzrlib.tests import TestCase
-from revids import RevidMap
+from revids import RevidMap, parse_svn_revision_id, generate_svn_revision_id
from tests import TestCaseWithSubversionRepository
-class TestRevidMap(TestCaseWithSubversionRepository):
+class TestRevidMap(TestCase):
def test_create(self):
- repos_url = self.make_client("a", "dc")
- repos = Repository.open(repos_url)
- revidmap = RevidMap(repos)
+ revidmap = RevidMap()
def test_lookup_revid_nonexistant(self):
- repos_url = self.make_client("a", "dc")
- repos = Repository.open(repos_url)
- revidmap = RevidMap(repos)
+ revidmap = RevidMap()
self.assertRaises(NoSuchRevision, lambda: revidmap.lookup_revid("bla"))
+ def test_lookup_revid(self):
+ revidmap = RevidMap()
+ revidmap.insert_revid("bla", "mypath", 42, "brainslug")
+ self.assertEquals(("mypath", 42, "brainslug"),
+ revidmap.lookup_revid("bla"))
+
+
+class TestParseRevisionId(TestCase):
+ def test_parse_revision_id_unknown(self):
+ self.assertRaises(InvalidRevisionId,
+ lambda: parse_svn_revision_id("bla"))
+
+ def test_parse_revision_id(self):
+ self.assertEquals(("myuuid", "bla", 5),
+ parse_svn_revision_id(generate_svn_revision_id("myuuid", 5, "bla")))
=== modified file 'tree.py'
--- a/tree.py 2007-03-25 18:41:40 +0000
+++ b/tree.py 2007-05-17 11:09:29 +0000
@@ -47,7 +47,7 @@
self._repository = repository
self._revision_id = revision_id
pool = Pool()
- (self.branch_path, self.revnum) = repository.parse_revision_id(revision_id)
+ (self.branch_path, self.revnum) = repository.lookup_revision_id(revision_id)
self._inventory = Inventory()
self.id_map = repository.get_fileid_map(self.revnum, self.branch_path)
self.editor = TreeBuildEditor(self, pool)
More information about the bazaar-commits
mailing list