Rev 2297: Follow copied tags correctly. in http://people.samba.org/bzr/jelmer/bzr-svn/0.5

Jelmer Vernooij jelmer at samba.org
Tue Jan 13 03:18:19 GMT 2009


At http://people.samba.org/bzr/jelmer/bzr-svn/0.5

------------------------------------------------------------
revno: 2297
revision-id: jelmer at samba.org-20090113031811-9yg5mqwet7sdxsu1
parent: jelmer at samba.org-20090113004846-kq3mkdttsbhpgiz3
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.5
timestamp: Tue 2009-01-13 04:18:11 +0100
message:
  Follow copied tags correctly.
modified:
  NEWS                           news-20061231030336-h9fhq245ie0de8bs-1
  revmeta.py                     revmeta.py-20080901215045-n8a6arqybs9ez5hl-1
  tests/test_revmeta.py          test_revmeta.py-20080903002416-q6u02e2hrc2oxa8h-1
=== modified file 'NEWS'
--- a/NEWS	2009-01-12 23:42:55 +0000
+++ b/NEWS	2009-01-13 03:18:11 +0000
@@ -39,6 +39,8 @@
    * Print proper error when attempting to create repository in Subversion 
      working copy. (#310063)
 
+   * Follow copied tags correctly. (#312272)
+
 bzr-svn 0.5.0~rc1			2008-12-08
 
   CHANGES

=== modified file 'revmeta.py'
--- a/revmeta.py	2009-01-13 00:48:46 +0000
+++ b/revmeta.py	2009-01-13 03:18:11 +0000
@@ -992,7 +992,6 @@
             return revmeta
 
         unusual = set()
-        remembered = dict()
         for (paths, revnum, revprops) in self._provider._log.iter_changes(
                 self.prefixes, self.from_revnum, self.to_revnum, pb=pb):
             bps = {}
@@ -1001,8 +1000,13 @@
                 pb.update("discovering revisions", revnum-self.to_revnum, 
                           self.from_revnum-self.to_revnum)
 
-            for bp, mbs in remembered.iteritems():
-                metabranches_history[revnum][bp].update(mbs)
+            # Import all metabranches_history where key > revnum
+            from bzrlib.trace import mutter
+            mutter('size %r' % len(metabranches_history))
+            for x in [r for r in metabranches_history if r > revnum]:
+                for bp in metabranches_history[x].keys():
+                    metabranches_history[revnum][bp].update(metabranches_history[x][bp])
+                    del metabranches_history[x][bp]
             for bp, mbs in metabranches_history[revnum].iteritems():
                 if not bp in self._metabranches:
                     self._metabranches[bp] = iter(mbs).next()
@@ -1029,6 +1033,13 @@
             # Mention deletes
             for d in deletes:
                 yield ("delete", p)
+
+            for bp, mb in bps.items():
+                revmeta = process_new_rev(bp, mb, revnum, paths, revprops)
+                if (bp in paths and paths[bp][0] in ('A', 'R') and 
+                    paths[bp][1] is None):
+                    revmeta._set_direct_lhs_parent_revmeta(None)
+                yield "revision", revmeta
             
             # Apply renames and the like for the next round
             for new_name, old_name, old_rev in changes.apply_reverse_changes(
@@ -1053,16 +1064,7 @@
                     metabranches_history[old_rev][old_name].add(data)
                     if not self.layout.is_branch_or_tag(old_name, project):
                         unusual_history[old_rev].add(old_name)
-
-            for bp, mb in bps.items():
-                revmeta = process_new_rev(bp, mb, revnum, paths, revprops)
-                if (bp in paths and paths[bp][0] in ('A', 'R') and 
-                    paths[bp][1] is None):
-                    revmeta._set_direct_lhs_parent_revmeta(None)
-                yield "revision", revmeta
             self._last_revnum = revnum
-            remembered = metabranches_history[revnum]
-            del metabranches_history[revnum]
 
 
 def filter_revisions(it):

=== modified file 'tests/test_revmeta.py'
--- a/tests/test_revmeta.py	2009-01-12 22:01:32 +0000
+++ b/tests/test_revmeta.py	2009-01-13 03:18:11 +0000
@@ -178,7 +178,7 @@
 class FakeRevision(object):
 
     def __init__(self, path, revnum):
-        self.path = path
+        self.branch_path = path
         self.revnum = revnum
         self._parent_revmeta_set = False
         self.parent_revmeta = None
@@ -193,11 +193,11 @@
             revmeta.children.add(self)
 
     def __repr__(self):
-        return "FakeRevision(%r,%r)" % (self.path, self.revnum)
+        return "FakeRevision(%r,%r)" % (self.branch_path, self.revnum)
 
     def __eq__(self, other):
         return (type(self) == type(other) and 
-                self.path == other.path and 
+                self.branch_path == other.branch_path and 
                 self.revnum == other.revnum)
 
 
@@ -304,7 +304,7 @@
                   4: { "python/tags/bla": ('A', 'python/trunk', 2)}})
         rev1 = browser.next()
         self.assertEquals(('revision', FakeRevision('python/tags/bla',4)), rev1)
-        self.assertTrue(rev1[1]._parent_revmeta_set)
         rev2 = browser.next()
         self.assertEquals(('revision', FakeRevision('python/trunk',1)), rev2)
         self.assertRaises(StopIteration, browser.next)
+        self.assertTrue(rev1[1]._parent_revmeta_set)




More information about the bazaar-commits mailing list