Rev 1812: Fix more tests. in file:///data/jelmer/bzr-svn/trunk/

Jelmer Vernooij jelmer at samba.org
Fri Sep 5 21:24:26 BST 2008


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

------------------------------------------------------------
revno: 1812
revision-id: jelmer at samba.org-20080905202424-sly3zcrjqau7srak
parent: jelmer at samba.org-20080905171211-0mw7mckfevm2haad
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Fri 2008-09-05 22:24:24 +0200
message:
  Fix more tests.
modified:
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
  repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
  revmeta.py                     revmeta.py-20080901215045-n8a6arqybs9ez5hl-1
  tests/mapping3/__init__.py     __init__.py-20080831152358-oy04n53cpnh64aj6-1
  tests/mapping_implementations/test_repository.py test_repository.py-20080902013845-ity7d1ymye69sobm-2
=== modified file 'fetch.py'
--- a/fetch.py	2008-09-02 23:46:26 +0000
+++ b/fetch.py	2008-09-05 20:24:24 +0000
@@ -389,32 +389,21 @@
         assert prev_inventory.root is None or self.inventory.root.revision == prev_inventory.root.revision
         super(RevisionBuildEditor, self).__init__(revmeta, mapping)
 
-    def _get_revision(self, revid):
-        """Creates the revision object.
-
-        :param revid: Revision id of the revision to create.
-        """
-        rev = self.revmeta.get_revision(self.mapping)
-
-        # Only fetch if it's cheap
-        if self.source.transport.has_capability("log-revprops"):
-            signature = self.revmeta.get_signature()
-        else:
-            signature = None
-
-        return (rev, signature)
-
     def _finish_commit(self):
         assert len(self._premature_deletes) == 0
-        (rev, signature) = self._get_revision(self.revid)
+        rev = self.revmeta.get_revision(self.mapping)
         self.inventory.revision_id = self.revid
         # Escaping the commit message is really the task of the serialiser
         rev.message = _escape_commit_message(rev.message)
         rev.inventory_sha1 = None
         assert self.inventory.root.revision is not None
         self.target.add_revision(self.revid, rev, self.inventory)
-        if signature is not None:
-            self.target.add_signature_text(self.revid, signature)
+
+        # Only fetch signature if it's cheap
+        if self.source.transport.has_capability("log-revprops"):
+            signature = self.revmeta.get_signature()
+            if signature is not None:
+                self.target.add_signature_text(self.revid, signature)
 
     def _rename(self, file_id, parent_id, old_path, new_path, kind):
         assert isinstance(new_path, unicode)
@@ -603,7 +592,7 @@
         meta_map = {}
         graph = self.source.get_graph()
         available_revs = set()
-        for revmeta in self.source._revmeta_provider.iter_all_changes(self.source.get_layout(), mapping=None, from_revnum=self.source.get_latest_revnum(), pb=pb):
+        for revmeta in self.source._revmeta_provider.iter_all_changes(self.source.get_layout(), mapping=mapping, from_revnum=self.source.get_latest_revnum(), pb=pb):
             revid = revmeta.get_revision_id(mapping)
             available_revs.add(revid)
             meta_map[revid] = revmeta

=== modified file 'repository.py'
--- a/repository.py	2008-09-04 17:33:09 +0000
+++ b/repository.py	2008-09-05 20:24:24 +0000
@@ -190,15 +190,6 @@
         self._cached_revnum = self.transport.get_latest_revnum()
         return self._cached_revnum
 
-    def start_write_group(self):
-        pass
-
-    def abort_write_group(self):
-        pass
-
-    def commit_write_group(self):
-        pass
-
     def item_keys_introduced_by(self, revision_ids, _files_pb=None):
         fileids = {}
 
@@ -230,7 +221,6 @@
             else:
                 revisions_with_signatures.add(rev_id)
         yield ("signatures", None, revisions_with_signatures)
-
         yield ("revisions", None, revision_ids)
 
     @needs_read_lock
@@ -271,8 +261,7 @@
             yield self.get_revision_delta(revision)
 
     def get_revision_delta(self, revision):
-        parentrevmeta = self.branch_prev_location(revision.svn_meta.branch_path, revision.svn_meta.revnum, 
-                                                  revision.svn_mapping)
+        parentrevmeta = self._revmeta_provider.branch_prev_location(revision.svn_meta, revision.svn_mapping)
         from bzrlib.plugins.svn.fetch import TreeDeltaBuildEditor
         if parentrevmeta is None:
             parentfileidmap = {}
@@ -417,20 +406,6 @@
 
         return SvnRevisionTree(self, revision_id)
 
-    def branch_prev_location(self, path, revnum, mapping):
-        assert isinstance(path, str)
-        assert isinstance(revnum, int)
-
-        iterator = self._revmeta_provider.iter_reverse_branch_changes(path, revnum, to_revnum=0,
-                                                    mapping=mapping, limit=2)
-        revmeta = iterator.next()
-        assert revmeta.branch_path == path
-        assert revmeta.revnum == revnum
-        try:
-            return iterator.next()
-        except StopIteration:
-            return None
-
     def get_parent_map(self, revids):
         parent_map = {}
         for revision_id in revids:

=== modified file 'revmeta.py'
--- a/revmeta.py	2008-09-04 17:33:09 +0000
+++ b/revmeta.py	2008-09-05 20:24:24 +0000
@@ -32,8 +32,7 @@
     :param from_rev: Revision to look up children in.
     """
     for c in find_children(from_bp, from_rev):
-        path = c.replace(from_bp, bp+"/", 1).replace("//", "/")
-        paths[path] = ('A', None, -1)
+        paths[changes.rebase_path(c, from_bp, bp)] = ('A', None, -1)
     return paths
 
 
@@ -54,6 +53,12 @@
         self.metabranch = metabranch
         self.uuid = uuid
 
+    def __eq__(self, other):
+        return (type(self) == type(other) and 
+                self.branch_path == other.branch_path and
+                self.revnum == other.revnum and
+                self.uuid == other.uuid)
+
     def __repr__(self):
         return "<RevisionMetadata for revision %d in repository %s>" % (self.revnum, repr(self.uuid))
 
@@ -93,6 +98,10 @@
         fileprops = self.get_fileprops()
         return isinstance(fileprops, dict) or fileprops.is_loaded
 
+    def knows_revprops(self):
+        revprops = self.get_revprops()
+        return isinstance(revprops, dict) or revprops.is_loaded
+
     def get_previous_fileprops(self):
         prev = changes.find_prev_location(self.get_paths(), self.branch_path, self.revnum)
         if prev is None:
@@ -109,6 +118,8 @@
         return self._changed_fileprops
 
     def get_lhs_parent_revmeta(self, mapping):
+        assert (mapping.is_branch(self.branch_path) or 
+                mapping.is_tag(self.branch_path)), "%s not valid in %r" % (self.branch_path, mapping)
         if self.metabranch is not None and self.metabranch.mapping == mapping:
             # Perhaps the metabranch already has the parent?
             parentrevmeta = self.metabranch.get_lhs_parent(self)
@@ -116,7 +127,7 @@
                 return parentrevmeta
         # FIXME: Don't use self.repository.branch_prev_location,
         #        since it browses history
-        return self.repository.branch_prev_location(self.branch_path, self.revnum, mapping)
+        return self.repository._revmeta_provider.branch_prev_location(self, mapping)
 
     def get_lhs_parent(self, mapping):
         # Sometimes we can retrieve the lhs parent from the revprop data
@@ -299,7 +310,7 @@
         this revmeta.
         """
         i = self._revs.index(revmeta)
-        for desc in self._revs[i+1:]:
+        for desc in self._revs[:i]:
             if desc.knows_fileprops():
                 return (desc.estimate_bzr_fileprop_ancestors() > 0)
         # assume the worst
@@ -406,6 +417,19 @@
     def get_mainline(self, branch_path, revnum, mapping, pb=None):
         return list(self.iter_reverse_branch_changes(branch_path, revnum, to_revnum=0, mapping=mapping, pb=pb))
 
+    def branch_prev_location(self, revmeta, mapping):
+        iterator = self.iter_reverse_branch_changes(revmeta.branch_path, revmeta.revnum, to_revnum=0, mapping=mapping, limit=2)
+        firstrevmeta = iterator.next()
+        assert revmeta == firstrevmeta
+        try:
+            parentrevmeta = iterator.next()
+            if (not mapping.is_branch(parentrevmeta.branch_path) and
+                not mapping.is_tag(parentrevmeta.branch_path)):
+                return None
+            return parentrevmeta
+        except StopIteration:
+            return None
+
     def iter_reverse_branch_changes(self, branch_path, from_revnum, to_revnum, 
                                     mapping=None, pb=None, limit=0):
         """Return all the changes that happened in a branch 
@@ -413,6 +437,7 @@
 
         :return: iterator that returns RevisionMetadata objects.
         """
+        assert mapping is None or mapping.is_branch(branch_path) or mapping.is_tag(branch_path)
         history_iter = self.iter_changes(branch_path, from_revnum, to_revnum, 
                                          mapping, pb=pb, limit=limit)
         metabranch = RevisionMetadataBranch(mapping)

=== modified file 'tests/mapping3/__init__.py'
--- a/tests/mapping3/__init__.py	2008-09-05 17:12:11 +0000
+++ b/tests/mapping3/__init__.py	2008-09-05 20:24:24 +0000
@@ -18,6 +18,7 @@
 from bzrlib.errors import NoSuchRevision
 from bzrlib.repository import Repository
 from bzrlib.tests import TestCase
+from bzrlib.trace import mutter
 
 from bzrlib.plugins.svn import format
 from bzrlib.plugins.svn.layout import TrunkLayout, RootLayout
@@ -127,8 +128,6 @@
 
         repos = Repository.open(self.repos_url)
         mapping = repos.get_mapping()
-        if not mapping.roundtripping:
-            raise TestNotApplicable()
         revid = repos.generate_revision_id(1, "", mapping)
         self.assertEquals(
                 mapping.revision_id_foreign_to_bzr((repos.uuid, 1, "")),
@@ -306,6 +305,7 @@
         dc.close()
 
         oldrepos = Repository.open(self.repos_url)
+        oldrepos.set_layout(RootLayout())
         dir = BzrDir.create("f", format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)

=== modified file 'tests/mapping_implementations/test_repository.py'
--- a/tests/mapping_implementations/test_repository.py	2008-09-05 17:12:11 +0000
+++ b/tests/mapping_implementations/test_repository.py	2008-09-05 20:24:24 +0000
@@ -75,7 +75,10 @@
             raise TestNotApplicable
         ret = list(repos._revmeta_provider.iter_changes('bla/bar', 2, 0, repos.get_mapping()))
         self.assertEquals(1, len(ret))
-        self.assertEquals("bla/bar", ret[0][0])
+        if repos.get_mapping().is_branch("foo/bar"):
+            self.assertEquals("foo/bar", ret[0][0])
+        else:
+            self.assertEquals("bla/bar", ret[0][0])
 
     def test_set_make_working_trees(self):
         repos_url = self.make_repository("a")
@@ -174,8 +177,15 @@
             repos.set_layout(CustomLayout(["pygments"]))
         except svn_errors.LayoutUnusable:
             raise TestNotApplicable
-        changes = repos._revmeta_provider.iter_reverse_branch_changes("pygments", 2, 0)
-        self.assertEquals([('pygments',
+        changes = repos._revmeta_provider.iter_reverse_branch_changes("pygments", 2, 0, mapping=repos.get_mapping())
+        if repos.get_mapping().is_branch("pykleur"):
+            self.assertEquals([('pygments',
+                  {'pygments': ('A', 'pykleur', 1)},
+                    2),
+                    ('pykleur', {'pykleur': ('A', None, -1), 'pykleur/bla': ('A', None, -1)}, 1)],
+                    [(l.branch_path, l.get_paths(), l.revnum) for l in changes])
+        else:
+            self.assertEquals([('pygments',
               {'pygments/bla': ('A', None, -1), 'pygments': ('A', None, -1)},
                 2)],
                 [(l.branch_path, l.get_paths(), l.revnum) for l in changes])




More information about the bazaar-commits mailing list