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