Rev 647: Fix more tests. in file:///data/jelmer/bzr-svn/noschemes/

Jelmer Vernooij jelmer at samba.org
Sun Feb 3 22:42:32 GMT 2008


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

------------------------------------------------------------
revno: 647
revision-id:jelmer at samba.org-20080203224230-25pj7p5215mp5jjq
parent: jelmer at samba.org-20080203212755-9sqre2vif4p80nuw
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: noschemes
timestamp: Sun 2008-02-03 23:42:30 +0100
message:
  Fix more tests.
modified:
  commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
  mapping.py                     mapping.py-20080128201303-6cp01phc0dmc0kiv-1
  repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
  tests/test_commit.py           test_commit.py-20060624213521-l5kcufywkh9mnilk-1
  tests/test_mapping.py          test_mapping.py-20080201131338-0zd86eznn4bojtee-1
  workingtree.py                 workingtree.py-20060306120941-b083cb0fdd4a69de
=== modified file 'commit.py'
--- a/commit.py	2008-02-03 18:03:33 +0000
+++ b/commit.py	2008-02-03 22:42:30 +0000
@@ -30,9 +30,23 @@
 from copy import deepcopy
 from cStringIO import StringIO
 from errors import ChangesRootLHSHistory, MissingPrefix, RevpropChangeFailed
+from svk import generate_svk_feature, serialize_svk_features, parse_svk_features 
+from mapping import parse_revision_id
 from repository import (SvnRepositoryFormat, SvnRepository)
 import urllib
 
+def _revision_id_to_svk_feature(revid):
+    """Create a SVK feature identifier from a revision id.
+
+    :param revid: Revision id to convert.
+    :return: Matching SVK feature identifier.
+    """
+    assert isinstance(revid, str)
+    (uuid, branch, revnum, _) = parse_revision_id(revid)
+    # TODO: What about renamed revisions? Should use 
+    # repository.lookup_revision_id here.
+    return generate_svk_feature(uuid, branch, revnum)
+
 
 def _check_dirs_exist(transport, bp_parts, base_rev):
     """Make sure that the specified directories exist.
@@ -128,6 +142,20 @@
             return self.repository.branchprop_list.get_property(self.base_path, self.base_revnum, name, default)
         (self._svn_revprops, self._svnprops) = self.base_mapping.export_revision(self.branch.get_branch_path(), timestamp, timezone, committer, revprops, revision_id, self.base_revno+1, merges, get_branch_file_property)
 
+        if len(merges) > 0:
+            old_svk_features = parse_svk_features(get_branch_file_property(SVN_PROP_SVK_MERGE, ""))
+            svk_features = set(old_svk_features)
+
+            # SVK compatibility
+            for merge in merges:
+                try:
+                    svk_features.add(_revision_id_to_svk_feature(merge))
+                except InvalidRevisionId:
+                    pass
+
+            if old_svk_features != svk_features:
+                self._svnprops[SVN_PROP_SVK_MERGE] = serialize_svk_features(svk_features)
+
     def mutter(self, text):
         if 'commit' in debug.debug_flags:
             mutter(text)

=== modified file 'mapping.py'
--- a/mapping.py	2008-02-03 20:52:24 +0000
+++ b/mapping.py	2008-02-03 22:42:30 +0000
@@ -27,10 +27,6 @@
 import time
 import urllib
 
-from svk import (SVN_PROP_SVK_MERGE, svk_features_merged_since, 
-                 parse_svk_features, serialize_svk_features, 
-                 parse_svk_feature, generate_svk_feature)
-
 MAPPING_VERSION = 3
 
 SVN_PROP_BZR_PREFIX = 'bzr:'
@@ -502,48 +498,12 @@
         parse_revision_metadata(
                 get_branch_file_property(SVN_PROP_BZR_REVISION_INFO, ""), rev)
 
-    def _svk_merged_revisions(self, get_branch_file_property):
-        """Find out what SVK features were merged in a revision.
-
-        """
-        current = get_branch_file_property(SVN_PROP_SVK_MERGE, "")
-        (prev_path, prev_revnum) = self._log.get_previous(branch, revnum)
-        if prev_path is None and prev_revnum == -1:
-            previous = ""
-        else:
-            previous = self.branchprop_list.get_property(prev_path.encode("utf-8"), 
-                         prev_revnum, SVN_PROP_SVK_MERGE, "")
-        for feature in svk_features_merged_since(current, previous):
-            revid = self._svk_feature_to_revision_id(feature)
-            if revid is not None:
-                yield revid
-
-    def _svk_feature_to_revision_id(self, feature):
-        """Convert a SVK feature to a revision id for this repository.
-
-        :param feature: SVK feature.
-        :return: revision id.
-        """
-        try:
-            (uuid, bp, revnum) = parse_svk_feature(feature)
-        except errors.InvalidPropertyValue:
-            return None
-        if uuid != self.uuid:
-            return None
-        if not self.scheme.is_branch(bp) and not self.scheme.is_tag(bp):
-            return None
-        return self.generate_revision_id(revnum, bp)
-
     def get_rhs_parents(self, revprops, get_branch_file_property):
         rhs_parents = []
         bzr_merges = get_branch_file_property(SVN_PROP_BZR_ANCESTRY+str(self.scheme), None)
         if bzr_merges is not None:
             return parse_merge_property(bzr_merges.splitlines()[-1])
 
-        svk_merges = get_branch_file_property(SVN_PROP_SVK_MERGE, None)
-        if svk_merges is not None:
-            return self._svk_merged_revisions(get_branch_file_property)
-
         return []
 
     def get_rhs_ancestors(self, revprops, get_branch_file_property):
@@ -558,18 +518,6 @@
             return {}
         return parse_fileid_property(fileids)
 
-    def _revision_id_to_svk_feature(self, revid):
-        """Create a SVK feature identifier from a revision id.
-
-        :param revid: Revision id to convert.
-        :return: Matching SVK feature identifier.
-        """
-        assert isinstance(revid, str)
-        (uuid, branch, revnum, _) = self.__class__.parse_revision_id(revid)
-        # TODO: What about renamed revisions? Should use 
-        # repository.lookup_revision_id here.
-        return generate_svk_feature(uuid, branch, revnum)
-
     def _record_merges(self, merges, get_branch_file_property):
         """Store the extra merges (non-LHS parents) in a file property.
 
@@ -579,19 +527,6 @@
         old = get_branch_file_property(SVN_PROP_BZR_ANCESTRY+str(self.scheme), "")
         svnprops = { SVN_PROP_BZR_ANCESTRY+str(self.scheme): old + "\t".join(merges) + "\n" }
 
-        old_svk_features = parse_svk_features(get_branch_file_property(SVN_PROP_SVK_MERGE, ""))
-        svk_features = set(old_svk_features)
-
-        # SVK compatibility
-        for merge in merges:
-            try:
-                svk_features.add(self._revision_id_to_svk_feature(merge))
-            except InvalidRevisionId:
-                pass
-
-        if old_svk_features != svk_features:
-            svnprops[SVN_PROP_SVK_MERGE] = serialize_svk_features(svk_features)
-
         return svnprops
  
     def export_revision(self, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, 

=== modified file 'repository.py'
--- a/repository.py	2008-02-03 19:41:38 +0000
+++ b/repository.py	2008-02-03 22:42:30 +0000
@@ -46,9 +46,25 @@
 from revids import RevidMap
 from scheme import (BranchingScheme, ListBranchingScheme, 
                     parse_list_scheme_text, guess_scheme_from_history)
+from svk import (SVN_PROP_SVK_MERGE, svk_features_merged_since, 
+                 parse_svk_feature)
 from tree import SvnRevisionTree
 import urllib
 
+def svk_feature_to_revision_id(feature, mapping):
+    """Convert a SVK feature to a revision id for this repository.
+
+    :param feature: SVK feature.
+    :return: revision id.
+    """
+    try:
+        (uuid, bp, revnum) = parse_svk_feature(feature)
+    except errors.InvalidPropertyValue:
+        return None
+    if not mapping.is_branch(bp) and not mapping.is_tag(bp):
+        return None
+    return mapping.generate_revision_id(uuid, revnum, bp)
+
 
 class SvnRepositoryFormat(RepositoryFormat):
     """Repository format for Subversion repositories (accessed using svn_ra).
@@ -387,6 +403,23 @@
             parents_list.append(parents)
         return parents_list
 
+    def _svk_merged_revisions(self, branch, revnum, mapping, 
+                              get_branch_property):
+        """Find out what SVK features were merged in a revision.
+
+        """
+        current = get_branch_property(branch, revnum, SVN_PROP_SVK_MERGE, "")
+        (prev_path, prev_revnum) = self._log.get_previous(branch, revnum)
+        if prev_path is None and prev_revnum == -1:
+            previous = ""
+        else:
+            previous = self.branchprop_list.get_property(prev_path.encode("utf-8"), 
+                         prev_revnum, SVN_PROP_SVK_MERGE, "")
+        for feature in svk_features_merged_since(current, previous):
+            revid = svk_feature_to_revision_id(feature, mapping)
+            if revid is not None:
+                yield revid
+
     def revision_parents(self, revision_id, get_branch_fileprop=None):
         """See Repository.revision_parents()."""
         parent_ids = []
@@ -401,7 +434,11 @@
 
         svn_revprops = self.transport.revprop_list(revnum)
 
-        parent_ids.extend(mapping.get_rhs_parents(svn_revprops, get_branch_fileprop))
+        extra_rhs_parents = mapping.get_rhs_parents(svn_revprops, get_branch_fileprop)
+        parent_ids.extend(extra_rhs_parents)
+
+        if extra_rhs_parents == []:
+            parent_ids.extend(self._svk_merged_revisions(branch, revnum, mapping, self.branchprop_list.get_property))
 
         return parent_ids
 

=== modified file 'tests/test_commit.py'
--- a/tests/test_commit.py	2008-02-03 18:03:33 +0000
+++ b/tests/test_commit.py	2008-02-03 22:42:30 +0000
@@ -21,10 +21,11 @@
 from bzrlib.branch import Branch, PullResult
 from bzrlib.bzrdir import BzrDir
 from bzrlib.errors import DivergedBranches, BzrError
+from bzrlib.tests import TestCase
 from bzrlib.trace import mutter
 from bzrlib.workingtree import WorkingTree
 
-from commit import set_svn_revprops
+from commit import set_svn_revprops, _revision_id_to_svk_feature
 from copy import copy
 from errors import RevpropChangeFailed
 from mapping import MAPPING_VERSION
@@ -581,3 +582,10 @@
         transport = SvnRaTransport(repos_url)
         self.assertRaises(RevpropChangeFailed, 
                 lambda: set_svn_revprops(transport, 1, {"svn:author": "Somebody", "svn:date": svn_time_to_cstring(1000000*473385600)}))
+
+class SvkTestCase(TestCase):
+    def test_revid_svk_map(self):
+        self.assertEqual("auuid:/:6", 
+              _revision_id_to_svk_feature("svn-v3-undefined:auuid::6"))
+
+

=== modified file 'tests/test_mapping.py'
--- a/tests/test_mapping.py	2008-02-03 20:52:24 +0000
+++ b/tests/test_mapping.py	2008-02-03 22:42:30 +0000
@@ -192,10 +192,6 @@
     def setUp(self):
         self.mapping = BzrSvnMappingv3(NoBranchingScheme())
 
-    def test_revid_svk_map(self):
-        self.assertEqual("auuid:/:6", 
-              self.mapping._revision_id_to_svk_feature("svn-v3-undefined:auuid::6"))
-
     def test_generate_revid(self):
         self.assertEqual("svn-v3-undefined:myuuid:branch:5", 
                          BzrSvnMappingv3._generate_revision_id("myuuid", 5, "branch", "undefined"))

=== modified file 'workingtree.py'
--- a/workingtree.py	2008-02-03 18:03:33 +0000
+++ b/workingtree.py	2008-02-03 22:42:30 +0000
@@ -33,6 +33,7 @@
 from bzrlib.workingtree import WorkingTree, WorkingTreeFormat
 
 from branch import SvnBranch
+from commit import _revision_id_to_svk_feature
 from convert import SvnConverter
 from errors import LocalCommitsUnsupported, NoSvnRepositoryPresent
 from mapping import (SVN_PROP_BZR_ANCESTRY, SVN_PROP_BZR_FILEIDS, 
@@ -646,7 +647,7 @@
             # Set svk:merge
             for merge in merges:
                 try:
-                    svk_merges.add(self.branch.mapping._revision_id_to_svk_feature(merge))
+                    svk_merges.add(_revision_id_to_svk_feature(merge))
                 except InvalidRevisionId:
                     pass
 




More information about the bazaar-commits mailing list