Rev 1077: Don't return actual branch path from iter_changes() since this is also not returned by svn_ra_get_log(). in file:///data/jelmer/bzr-svn/rm-logpath/

Jelmer Vernooij jelmer at samba.org
Thu Apr 3 21:44:01 BST 2008


At file:///data/jelmer/bzr-svn/rm-logpath/

------------------------------------------------------------
revno: 1077
revision-id: jelmer at samba.org-20080403204333-d5b721bj1sps1841
parent: jelmer at samba.org-20080402173552-qakpsv1d9ge0v2jc
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: rm-logpath
timestamp: Thu 2008-04-03 22:43:33 +0200
message:
  Don't return actual branch path from iter_changes() since this is also not returned by svn_ra_get_log().
modified:
  logwalker.py                   logwalker.py-20060621215743-c13fhfnyzh1xzwh2-1
  repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
  scheme.py                      scheme.py-20060516195850-95181aae6b272f9e
  tests/test_logwalker.py        test_logwalker.py-20060622141944-pkocc3rj8g62ukbi-1
  tests/test_scheme.py           test_scheme.py-20060621221855-va2xabhlxpmc9llx-1
  transport.py                   transport.py-20060406231150-b3472d06b3a0818d
=== modified file 'logwalker.py'
--- a/logwalker.py	2008-03-31 12:23:54 +0000
+++ b/logwalker.py	2008-04-03 20:43:33 +0000
@@ -168,7 +168,7 @@
             revprops = lazy_dict(self._get_transport().revprop_list, revnum)
 
             if changes.changes_path(revpaths, path, True):
-                yield (path, revpaths, revnum, revprops)
+                yield (revpaths, revnum, revprops)
                 i += 1
                 if limit != 0 and i == limit:
                     break
@@ -307,26 +307,24 @@
         log_entry = self.actual._get_transport().iter_log(path, revnum, revnum, 1, True, True, []).next()
         return log_entry.revision
 
-    def iter_changes(self, path, revnum, limit=0):
+    def iter_changes(self, path, from_revnum, to_revnum=0, limit=0):
         """Return iterator over all the revisions between revnum and 0 named path or inside path.
 
         :param path:    Branch path to start reporting (in revnum)
         :param revnum:  Start revision.
-        :return: An iterator that yields tuples with (path, paths, revnum, revprops)
+        :return: An iterator that yields tuples with (paths, revnum, revprops)
             where paths is a dictionary with all changes that happened in path 
             in revnum.
         """
         assert revnum >= 0
 
-        for log_entry in self._get_transport().iter_log(path, revnum, 0, limit, True, True, []):
+        for log_entry in self._get_transport().iter_log(path, from_revnum, to_revnum, limit, True, True, []):
             revpaths = {}
             for k,v in log_entry.changed_paths.items():
                 revpaths[k] = (v.action, v.copyfrom_path, v.copyfrom_rev)
             revnum = log_entry.revision
-            next = changes.find_prev_location(revpaths, path, revnum)
             revprops = lazy_dict(self._get_transport().revprop_list, revnum)
-            yield (path, revpaths, revnum, revprops)
-            path = next[0]
+            yield (revpaths, revnum, revprops)
 
     def get_revision_paths(self, revnum):
         """Obtain dictionary with all the changes in a particular revision.

=== modified file 'repository.py'
--- a/repository.py	2008-03-31 03:00:42 +0000
+++ b/repository.py	2008-04-03 20:43:33 +0000
@@ -280,7 +280,7 @@
     
         latest_revnum = self.transport.get_latest_revnum()
 
-        for (_, paths, revnum, revprops) in self._log.iter_changes("", latest_revnum):
+        for (paths, revnum, revprops) in self._log.iter_changes("", latest_revnum):
             if pb:
                 pb.update("discovering revisions", revnum, latest_revnum)
             yielded_paths = set()
@@ -567,23 +567,27 @@
         assert mapping.is_branch(branch_path) or mapping.is_tag(branch_path), \
                 "Mapping %r doesn't accept %s as branch or tag" % (mapping, branch_path)
 
-        for (bp, paths, revnum, revprops) in self._log.iter_changes(branch_path, revnum):
-            assert revnum > 0 or bp == ""
-            assert mapping.is_branch(bp) or mapping.is_tag(bp), "%r is not a valid path" % bp
+        for (paths, revnum, revprops) in self._log.iter_changes(branch_path, revnum):
+            assert revnum > 0 or branch_path == ""
+            assert mapping.is_branch(branch_path) or mapping.is_tag(branch_path), "%r is not a valid path" % branch_path
 
-            if (paths.has_key(bp) and paths[bp][1] is not None and 
-                not (mapping.is_branch(paths[bp][1]) or mapping.is_tag(paths[bp][1]))):
+            if (paths.has_key(branch_path) and paths[branch_path][1] is not None and 
+                not (mapping.is_branch(paths[branch_path][1]) or mapping.is_tag(paths[branch_path][1]))):
                 # Make it look like the branch started here if the mapping 
                 # doesn't support weird paths as branches
-                for c in self._log.find_children(paths[bp][1], paths[bp][2]):
-                    path = c.replace(paths[bp][1], bp+"/", 1).replace("//", "/")
+                for c in self._log.find_children(paths[branch_path][1], paths[branch_path][2]):
+                    path = c.replace(paths[branch_path][1], branch_path+"/", 1).replace("//", "/")
                     paths[path] = ('A', None, -1)
-                paths[bp] = ('A', None, -1)
+                paths[branch_path] = ('A', None, -1)
 
-                yield (bp, paths, revnum, revprops)
+                yield (branch_path, paths, revnum, revprops)
                 return
                      
-            yield (bp, paths, revnum, revprops)
+            yield (branch_path, paths, revnum, revprops)
+
+            next = find_prev_location(paths, branch_path, revnum)
+            if next is not None:
+                (branch_path, _) = next
 
     def iter_reverse_branch_changes(self, branch_path, revnum, mapping):
         """Return all the changes that happened in a branch 
@@ -701,9 +705,8 @@
 
         pb = ui.ui_factory.nested_progress_bar()
         try:
-            for i in xrange(from_revnum, to_revnum+1):
+            for (paths, i, revprops) in self._log.iter_changes("", from_revnum, to_revnum+1):
                 pb.update("finding branches", i, to_revnum+1)
-                paths = self._log.get_revision_paths(i)
                 for p in sorted(paths.keys()):
                     if scheme.is_branch(p) or scheme.is_tag(p):
                         if paths[p][0] in ('R', 'D') and p in created_branches:

=== modified file 'scheme.py'
--- a/scheme.py	2008-03-30 21:43:54 +0000
+++ b/scheme.py	2008-04-03 20:43:33 +0000
@@ -446,7 +446,7 @@
     pb = ui.ui_factory.nested_progress_bar()
     scheme_cache = {}
     try:
-        for (bp, revpaths, revnum, revprops) in changed_paths:
+        for (revpaths, revnum, revprops) in changed_paths:
             assert isinstance(revpaths, dict)
             pb.update("analyzing repository layout", last_revnum-revnum, 
                       last_revnum)

=== modified file 'tests/test_logwalker.py'
--- a/tests/test_logwalker.py	2008-03-30 21:43:54 +0000
+++ b/tests/test_logwalker.py	2008-04-03 20:43:33 +0000
@@ -83,10 +83,10 @@
         walker = self.get_log_walker(transport=SvnRaTransport(repos_url))
 
         self.assertEquals([
-            ("branches/abranch/foo", {"branches/abranch": ('A', 'trunk', 2)}, 3),
-            ("trunk/foo", {"trunk/foo": ('A', None, -1), 
+            ({"branches/abranch": ('A', 'trunk', 2)}, 3),
+            ({"trunk/foo": ('A', None, -1), 
                            "trunk": ('A', None, -1)}, 1)
-            ], [l[:3] for l in walker.iter_changes("branches/abranch/foo", 3)])
+            ], [l[:2] for l in walker.iter_changes("branches/abranch/foo", 3)])
 
     def test_get_revision_paths(self):
         repos_url = self.make_client("a", "dc")
@@ -323,9 +323,9 @@
         self.client_commit("dc", "Cm1")
 
         walker = self.get_log_walker(transport=SvnRaTransport(repos_url))
-        self.assertEqual([("trunk", {"trunk/data": ('A', None, -1),
+        self.assertEqual([({"trunk/data": ('A', None, -1),
                                      "trunk": ('A', None, -1)}, 3)], 
-                                     [l[:3] for l in walker.iter_changes("trunk", 3)])
+                                     [l[:2] for l in walker.iter_changes("trunk", 3)])
 
     def test_follow_history(self):
         repos_url = self.make_client("a", "dc")
@@ -335,8 +335,7 @@
         self.client_add("dc/foo")
         self.client_commit("dc", "My Message")
 
-        for (branch, paths, rev, revprops) in walker.iter_changes("", 1):
-            self.assertEqual(branch, "")
+        for (paths, rev, revprops) in walker.iter_changes("", 1):
             self.assertTrue(rev == 0 or paths.has_key("foo"))
             self.assertTrue(rev in (0,1))
 
@@ -344,7 +343,7 @@
         repos_url = self.make_client("a", "dc")
         walker = self.get_log_walker(transport=SvnRaTransport(repos_url))
 
-        self.assertEqual([('', {'': ('A', None, -1)}, 0)], [l[:3] for l in walker.iter_changes("", 0)])
+        self.assertEqual([({'': ('A', None, -1)}, 0)], [l[:2] for l in walker.iter_changes("", 0)])
 
     def test_later_update(self):
         repos_url = self.make_client("a", "dc")
@@ -355,8 +354,7 @@
         self.client_add("dc/foo")
         self.client_commit("dc", "My Message")
 
-        for (branch, paths, rev, revprops) in walker.iter_changes("", 1):
-            self.assertEqual(branch, "")
+        for (paths, rev, revprops) in walker.iter_changes("", 1):
             self.assertTrue(rev == 0 or paths.has_key("foo"))
             self.assertTrue(rev in (0,1))
 
@@ -375,9 +373,9 @@
 
         walker = self.get_log_walker(transport=SvnRaTransport(repos_url))
 
-        items = [l[:3] for l in walker.iter_changes("branches/abranch", 2)]
-        self.assertEqual([('branches/abranch', {'branches/abranch': ('A', 'trunk', 1)}, 2), 
-                          ('trunk', {'branches': (u'A', None, -1),
+        items = [l[:2] for l in walker.iter_changes("branches/abranch", 2)]
+        self.assertEqual([({'branches/abranch': ('A', 'trunk', 1)}, 2), 
+                          ({'branches': (u'A', None, -1),
                                      'trunk/afile': ('A', None, -1), 
                                      'trunk': (u'A', None, -1)}, 1)], items)
 

=== modified file 'tests/test_scheme.py'
--- a/tests/test_scheme.py	2008-03-31 01:21:48 +0000
+++ b/tests/test_scheme.py	2008-04-03 20:43:33 +0000
@@ -592,22 +592,22 @@
 class TestGuessBranchingSchemeFromHistory(TestCase):
     def test_simple(self):
         scheme = guess_scheme_from_history([
-            ("", {"trunk": ('M', None, None)}, 0, None)], 1)
+            ({"trunk": ('M', None, None)}, 0, None)], 1)
         self.assertIsInstance(scheme, TrunkBranchingScheme)
         self.assertEqual(0, scheme.level)
 
     def test_simple_with_relpath(self):
         scheme = guess_scheme_from_history([
-            ("", {"trunk": ('M', None, None)}, 0, None)], 1, 
+            ({"trunk": ('M', None, None)}, 0, None)], 1, 
             relpath="trunk")
         self.assertIsInstance(scheme, TrunkBranchingScheme)
         self.assertEqual(0, scheme.level)
 
     def test_simple_prefer_relpath(self):
         scheme = guess_scheme_from_history([
-            ("", {"trunk": ('M', None, None)}, 1, None),
-            ("", {"trunk": ('M', None, None)}, 2, None),
-            ("", {"trunk/bar": ('M', None, None)}, 3, None),
+            ({"trunk": ('M', None, None)}, 1, None),
+            ({"trunk": ('M', None, None)}, 2, None),
+            ({"trunk/bar": ('M', None, None)}, 3, None),
             ], 3, 
             relpath="trunk/bar")
         self.assertIsInstance(scheme, SingleBranchingScheme)
@@ -615,17 +615,17 @@
 
     def test_simple_notwant_single(self):
         scheme = guess_scheme_from_history([
-            ("", {"foo": ('M', None, None)}, 1, None),
-            ("", {"foo": ('M', None, None)}, 2, None),
-            ("", {"foo/bar": ('M', None, None)}, 3, None),
+            ({"foo": ('M', None, None)}, 1, None),
+            ({"foo": ('M', None, None)}, 2, None),
+            ({"foo/bar": ('M', None, None)}, 3, None),
             ], 3)
         self.assertIsInstance(scheme, NoBranchingScheme)
 
     def test_simple_no_bp_common(self):
         scheme = guess_scheme_from_history([
-            ("", {"foo": ('M', None, None)}, 1, None),
-            ("", {"trunk": ('M', None, None)}, 2, None),
-            ("", {"trunk": ('M', None, None)}, 3, None),
+            ({"foo": ('M', None, None)}, 1, None),
+            ({"trunk": ('M', None, None)}, 2, None),
+            ({"trunk": ('M', None, None)}, 3, None),
             ], 3)
         self.assertIsInstance(scheme, TrunkBranchingScheme)
 

=== modified file 'transport.py'
--- a/transport.py	2008-03-31 04:13:06 +0000
+++ b/transport.py	2008-04-03 20:43:33 +0000
@@ -358,14 +358,20 @@
 
             def next(self):
                 self.semaphore.acquire()
-                return self.pending.pop()
+                ret = self.pending.pop()
+                if isinstance(ret, Exception):
+                    raise ret
+                return ret
 
             def run(self):
                 def rcvr(log_entry, pool):
                     self.pending.append(log_entry)
                     self.semaphore.release()
-                self.get_log(rcvr)
-                self.pending.append(None)
+                try:
+                    self.get_log(rcvr)
+                    self.pending.append(None)
+                except Exception, e:
+                    self.pending.append(e)
                 self.semaphore.release()
         
         fetcher = logfetcher(lambda rcvr: self.get_log(path, from_revnum, to_revnum, limit, discover_changed_paths, strict_node_history, revprops, rcvr))




More information about the bazaar-commits mailing list