Rev 1856: Move determination of revno to revmeta. in file:///data/jelmer/bzr-svn/trunk/

Jelmer Vernooij jelmer at samba.org
Mon Sep 8 00:17:05 BST 2008


At file:///data/jelmer/bzr-svn/trunk/

------------------------------------------------------------
revno: 1856
revision-id: jelmer at samba.org-20080907231658-1doo3ogafeyrr4i1
parent: jelmer at samba.org-20080907223804-zd11jwwxqqevy8in
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Mon 2008-09-08 01:16:58 +0200
message:
  Move determination of revno to revmeta.
modified:
  branch.py                      svnbranch.py-20051017135706-11c749eb0dab04a7
  revmeta.py                     revmeta.py-20080901215045-n8a6arqybs9ez5hl-1
=== modified file 'branch.py'
--- a/branch.py	2008-09-07 22:38:04 +0000
+++ b/branch.py	2008-09-07 23:16:58 +0000
@@ -35,6 +35,7 @@
 from bzrlib.plugins.svn.tags import SubversionTags
 from bzrlib.plugins.svn.transport import bzr_to_svn_url
 
+import itertools
 import os
 
 class SvnBranch(Branch):
@@ -125,7 +126,7 @@
         return self.last_revmeta().revnum
 
     def last_revmeta(self):
-        return self._revision_meta_history()[0]
+        return self._revision_meta_history().next()
 
     def check(self):
         """See Branch.Check.
@@ -279,8 +280,12 @@
  
     def last_revision_info(self):
         """See Branch.last_revision_info()."""
-        last_revid = self.last_revision()
-        return self.revision_id_to_revno(last_revid), last_revid
+        last_revmeta = self.last_revmeta()
+        last_revid = last_revmeta.get_revision_id(self.mapping)
+        last_revno = last_revmeta.get_distance_to_null(self.mapping)
+        if last_revno is None:
+            last_revno = self.revision_id_to_revno(last_revid)
+        return last_revno, last_revid
 
     def revision_id_to_revno(self, revision_id):
         """Given a revision id, return its revno"""
@@ -289,7 +294,7 @@
         revmeta_history = self._revision_meta_history()
         for revmeta in revmeta_history:
             if revmeta.get_revision_id(self.mapping) == revision_id:
-                return len(revmeta_history) - revmeta_history.index(revmeta)
+                return revmeta.get_distance_to_null(self.mapping)
         raise NoSuchRevision(self, revision_id)
 
     def get_root_id(self, revnum=None):
@@ -312,10 +317,10 @@
         if self._revmeta_cache is None:
             pb = ui.ui_factory.nested_progress_bar()
             try:
-                self._revmeta_cache = [revmeta for revmeta in self.repository._revmeta_provider.get_mainline(self.get_branch_path(), self.repository.get_latest_revnum(), self.mapping, pb=pb) if not revmeta.is_hidden(self.mapping)]
+                self._revmeta_cache = self.repository._revmeta_provider.get_mainline(self.get_branch_path(), self.repository.get_latest_revnum(), self.mapping, pb=pb)
             finally:
                 pb.finished()
-        return self._revmeta_cache
+        return itertools.ifilter(lambda revmeta: not revmeta.is_hidden(self.mapping), self._revmeta_cache)
 
     def _gen_revision_history(self):
         """Generate the revision history from last revision

=== modified file 'revmeta.py'
--- a/revmeta.py	2008-09-07 22:15:06 +0000
+++ b/revmeta.py	2008-09-07 23:16:58 +0000
@@ -82,12 +82,7 @@
     def get_revision_id(self, mapping):
         if mapping.roundtripping:
             # See if there is a bzr:revision-id revprop set
-            try:
-                (bzr_revno, revid) = mapping.get_revision_id(self.branch_path, self.get_revprops(), self.get_changed_fileprops())
-            except core.SubversionException, (_, num):
-                if num == svn_errors.ERR_FS_NO_SUCH_REVISION:
-                    raise errors.NoSuchRevision(path, revnum)
-                raise
+            (bzr_revno, revid) = mapping.get_revision_id(self.branch_path, self.get_revprops(), self.get_changed_fileprops())
         else:
             revid = None
 
@@ -186,7 +181,9 @@
         return is_bzr_revision_fileprops(self.get_changed_fileprops())
 
     def is_hidden(self, mapping):
-        return mapping.is_bzr_revision_hidden(self.get_revprops(), self.get_changed_fileprops())
+        if self.is_bzr_revision():
+            return mapping.is_bzr_revision_hidden(self.get_revprops(), self.get_changed_fileprops())
+        return False
 
     def is_bzr_revision(self):
         """Determine (with as few network requests as possible) if this is a bzr revision.
@@ -233,6 +230,19 @@
 
         return tuple(ret)
 
+    def get_distance_to_null(self, mapping):
+        if mapping.roundtripping:
+            (bzr_revno, _) = mapping.get_revision_id(self.branch_path, self.get_revprops(), 
+                                                             self.get_changed_fileprops())
+            if bzr_revno is not None:
+                return bzr_revno
+        revno = 0
+        revmeta = self
+        while revmeta is not None:
+            revno+=1
+            revmeta = revmeta.get_lhs_parent_revmeta(mapping)
+        return revno
+
     def get_rhs_parents(self, mapping):
         """Determine the right hand side parents for this revision.
 




More information about the bazaar-commits mailing list