Rev 1030: Merge 0.4. in file:///data/jelmer/bzr-svn/pyrex/

Jelmer Vernooij jelmer at samba.org
Sat Mar 22 14:27:18 GMT 2008


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

------------------------------------------------------------
revno: 1030
revision-id: jelmer at samba.org-20080322142716-p7vpxnkkm0740643
parent: jelmer at samba.org-20080321224537-io5qh96elw3lxhzs
parent: jelmer at samba.org-20080322140604-gr99ufb54gy6i9g4
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: pyrex
timestamp: Sat 2008-03-22 15:27:16 +0100
message:
  Merge 0.4.
modified:
  NEWS                           news-20061231030336-h9fhq245ie0de8bs-1
  commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
  mapping.py                     mapping.py-20080128201303-6cp01phc0dmc0kiv-1
  pre-revprop-change.example     prerevpropchange.exa-20071214160928-9g7oevg3tlky780a-1
  repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
  svk.py                         svk.py-20080201171509-m2eg9m6jrmlbwxg5-1
  tests/__init__.py              __init__.py-20060508151940-e9f4d914801a2535
  tests/test_fetch.py            test_fetch.py-20070624210302-luvgwjmlfysk5qeq-1
  tests/test_mapping.py          test_mapping.py-20080201131338-0zd86eznn4bojtee-1
  tests/test_push.py             test_push.py-20070201165715-g2ievcdfqi33wqsy-1
  tests/test_repos.py            test_repos.py-20060508151940-ddc49a59257ca712
    ------------------------------------------------------------
    revno: 950.1.29
    revision-id: jelmer at samba.org-20080322140604-gr99ufb54gy6i9g4
    parent: jelmer at samba.org-20080322133824-lxslia5p2n8e0lme
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Sat 2008-03-22 15:06:04 +0100
    message:
      Support storing commit message in bzr:log.
    modified:
      mapping.py                     mapping.py-20080128201303-6cp01phc0dmc0kiv-1
    ------------------------------------------------------------
    revno: 950.1.28
    revision-id: jelmer at samba.org-20080322133824-lxslia5p2n8e0lme
    parent: jelmer at samba.org-20080322132804-khp1h5o6o8jzx50s
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Sat 2008-03-22 14:38:24 +0100
    message:
      Support fetching revision properties from a svn repository.
    modified:
      commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
      fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
      tests/__init__.py              __init__.py-20060508151940-e9f4d914801a2535
      tests/test_fetch.py            test_fetch.py-20070624210302-luvgwjmlfysk5qeq-1
    ------------------------------------------------------------
    revno: 950.1.27
    revision-id: jelmer at samba.org-20080322132804-khp1h5o6o8jzx50s
    parent: jelmer at samba.org-20080322132203-bo1whwfys2dnqa5o
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Sat 2008-03-22 14:28:04 +0100
    message:
      Allow changing gpg signatures
    modified:
      pre-revprop-change.example     prerevpropchange.exa-20071214160928-9g7oevg3tlky780a-1
    ------------------------------------------------------------
    revno: 950.1.26
    revision-id: jelmer at samba.org-20080322132203-bo1whwfys2dnqa5o
    parent: jelmer at samba.org-20080322130529-jv7tf6lj3njw2sm7
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Sat 2008-03-22 14:22:03 +0100
    message:
      Support setting revision signatures in Subversion repositories.
    modified:
      NEWS                           news-20061231030336-h9fhq245ie0de8bs-1
      repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
      tests/test_repos.py            test_repos.py-20060508151940-ddc49a59257ca712
    ------------------------------------------------------------
    revno: 950.1.25
    revision-id: jelmer at samba.org-20080322130529-jv7tf6lj3njw2sm7
    parent: jelmer at samba.org-20080322021233-ooblxnxj7944y27f
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Sat 2008-03-22 14:05:29 +0100
    message:
      Remove obsolete FIXME, allow passing in revision properties to Repository.get_revision().
    modified:
      mapping.py                     mapping.py-20080128201303-6cp01phc0dmc0kiv-1
      repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
    ------------------------------------------------------------
    revno: 950.1.24
    revision-id: jelmer at samba.org-20080322021233-ooblxnxj7944y27f
    parent: jelmer at samba.org-20080322005103-zarm22bzsyjbwyd8
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Sat 2008-03-22 03:12:33 +0100
    message:
      Fix import of serializer.
    modified:
      repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
    ------------------------------------------------------------
    revno: 950.1.23
    revision-id: jelmer at samba.org-20080322005103-zarm22bzsyjbwyd8
    parent: jelmer at samba.org-20080321233545-o06rh49csiw8k1pg
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Sat 2008-03-22 01:51:03 +0100
    message:
      Fix errors.
    modified:
      svk.py                         svk.py-20080201171509-m2eg9m6jrmlbwxg5-1
    ------------------------------------------------------------
    revno: 950.1.22
    revision-id: jelmer at samba.org-20080321233545-o06rh49csiw8k1pg
    parent: jelmer at samba.org-20080321233322-c4eihjtm4tz8jtj2
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Sat 2008-03-22 00:35:45 +0100
    message:
      Fix typo.
    modified:
      commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
    ------------------------------------------------------------
    revno: 950.1.21
    revision-id: jelmer at samba.org-20080321233322-c4eihjtm4tz8jtj2
    parent: jelmer at samba.org-20080321233029-wethm3d2vg2pf920
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Sat 2008-03-22 00:33:22 +0100
    message:
      Print invalid property name.
    modified:
      commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
    ------------------------------------------------------------
    revno: 950.1.20
    revision-id: jelmer at samba.org-20080321233029-wethm3d2vg2pf920
    parent: jelmer at samba.org-20080321224326-k9fj54i1gc2ugmhw
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Sat 2008-03-22 00:30:29 +0100
    message:
      Fix tests.
    modified:
      tests/test_mapping.py          test_mapping.py-20080201131338-0zd86eznn4bojtee-1
      tests/test_push.py             test_push.py-20070201165715-g2ievcdfqi33wqsy-1
=== modified file 'NEWS'
--- a/NEWS	2008-03-21 22:45:37 +0000
+++ b/NEWS	2008-03-22 14:27:16 +0000
@@ -16,6 +16,8 @@
 
    * --prefix is now determined from the specified url in svn-import. (#160335)
 
+   * Support storing revision signatures.
+
   BUGS
   
    * Fix compatibility with bzr 1.3.

=== modified file 'commit.py'
--- a/commit.py	2008-03-21 22:45:37 +0000
+++ b/commit.py	2008-03-22 14:27:16 +0000
@@ -471,7 +471,7 @@
             existing_bp_parts = _check_dirs_exist(self.repository.transport, 
                                               bp_parts, -1)
             for prop in self._svn_revprops:
-                assert is_valid_property_name(prop)
+                assert is_valid_property_name(prop), "Invalid property name %r" % prop
             try:
                 self.editor = self.repository.transport.get_commit_editor(
                         self._svn_revprops, done, None, False)
@@ -506,7 +506,7 @@
 
             # Set all the revprops
             for prop, value in self._svnprops.items():
-                assert is_valid_property_name(prop)
+                assert is_valid_property_name(prop), "Invalid property name %r" % prop
                 if value is not None:
                     value = value.encode('utf-8')
                 branch_editors[-1].change_prop(prop, value)
@@ -701,6 +701,8 @@
     except ChangesRootLHSHistory:
         raise BzrError("Unable to push revision %r because it would change the ordering of existing revisions on the Subversion repository root. Use rebase and try again or push to a non-root path" % revision_id)
 
+    # FIXME: copy revisions signature
+
     if 'validate' in debug.debug_flags:
         crev = target.repository.get_revision(revision_id)
         ctree = target.repository.revision_tree(revision_id)
@@ -764,6 +766,8 @@
                              
                 replay_delta(builder, base_tree, old_tree)
                 builder.commit(rev.message)
+
+                # FIXME: Copy revision signature for rev
         finally:
             self.source.unlock()
  

=== modified file 'fetch.py'
--- a/fetch.py	2008-03-21 22:45:37 +0000
+++ b/fetch.py	2008-03-22 14:27:16 +0000
@@ -31,7 +31,8 @@
 from mapping import (SVN_PROP_BZR_ANCESTRY, SVN_PROP_BZR_MERGE, 
                      SVN_PROP_BZR_PREFIX, SVN_PROP_BZR_REVISION_INFO, 
                      SVN_PROP_BZR_BRANCHING_SCHEME, SVN_PROP_BZR_REVISION_ID,
-                     SVN_PROP_BZR_FILEIDS, parse_merge_property,
+                     SVN_PROP_BZR_FILEIDS, SVN_REVPROP_BZR_SIGNATURE,
+                     parse_merge_property,
                      parse_revision_metadata)
 from repository import (SvnRepository, SvnRepositoryFormat)
 from svk import SVN_PROP_SVK_MERGE
@@ -125,7 +126,9 @@
         svn_revprops = self.source._log._get_transport().revprop_list(self.revnum)
         self.mapping.import_revision(svn_revprops, self._branch_fileprops, rev)
 
-        return rev
+        signature = svn_revprops.get(SVN_REVPROP_BZR_SIGNATURE)
+
+        return (rev, signature)
 
     def open_root(self, base_revnum):
         if self.old_inventory.root is None:
@@ -460,13 +463,15 @@
             file_weave.add_lines(self.revid, parents, lines)
 
     def _finish_commit(self):
-        rev = self._get_revision(self.revid)
+        (rev, signature) = self._get_revision(self.revid)
         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 = osutils.sha_string(
                 self.target.serialise_inventory(self.inventory))
         self.target.add_revision(self.revid, rev, self.inventory)
+        if signature is not None:
+            self.target.add_signature_text(self.revid, signature)
         self.target.commit_write_group()
         self._write_group_active = False
 

=== modified file 'mapping.py'
--- a/mapping.py	2008-03-21 22:45:37 +0000
+++ b/mapping.py	2008-03-22 14:27:16 +0000
@@ -49,6 +49,7 @@
 SVN_REVPROP_BZR_SCHEME = 'bzr:scheme'
 SVN_REVPROP_BZR_SIGNATURE = 'bzr:gpg-signature'
 SVN_REVPROP_BZR_TIMESTAMP = 'bzr:timestamp'
+SVN_REVPROP_BZR_LOG = 'bzr:log'
 
 
 def escape_svn_path(x):
@@ -242,6 +243,9 @@
     if props.has_key(SVN_REVPROP_BZR_COMMITTER):
         rev.committer = props[SVN_REVPROP_BZR_COMMITTER].decode("utf-8")
 
+    if props.has_key(SVN_REVPROP_BZR_LOG):
+        rev.message = props[SVN_REVPROP_BZR_LOG]
+
     for name, value in props.items():
         if name.startswith(SVN_REVPROP_BZR_REVPROP_PREFIX):
             rev.properties[name[len(SVN_REVPROP_BZR_REVPROP_PREFIX):]] = value
@@ -795,12 +799,9 @@
     """
     if not revid.startswith("svn-"):
         raise InvalidRevisionId(revid, None)
-    try:
-        mapping_version = revid[len("svn-"):len("svn-vx")]
-        mapping = mapping_registry.get(mapping_version)
-        return mapping.parse_revision_id(revid)
-    except KeyError:
-        pass
+    mapping_version = revid[len("svn-"):len("svn-vx")]
+    mapping = mapping_registry.get(mapping_version)
+    return mapping.parse_revision_id(revid)
 
 
 def get_default_mapping():

=== modified file 'pre-revprop-change.example'
--- a/pre-revprop-change.example	2008-02-03 19:41:38 +0000
+++ b/pre-revprop-change.example	2008-03-22 13:28:04 +0000
@@ -17,7 +17,9 @@
 
 if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
 
-# Allow adding bzr-svm revision properties:
+if [ "$ACTION" = "M" -a "$PROPNAME" = "bzr:gpg-signature" ]; then exit 0; fi
+
+# Allow adding bzr-svn revision properties:
 if [ "$ACTION" = "A" -a "`echo "$PROPNAME" | cut -d : -f 1`" = "bzr" ]; then exit 0; fi
 
 echo "Changing revision properties other than svn:log or bzr:* is prohibited" >&2

=== modified file 'repository.py'
--- a/repository.py	2008-03-21 22:45:37 +0000
+++ b/repository.py	2008-03-22 14:27:16 +0000
@@ -40,7 +40,7 @@
 from config import SvnRepositoryConfig
 import errors
 import logwalker
-from mapping import (SVN_PROP_BZR_REVISION_ID, 
+from mapping import (SVN_PROP_BZR_REVISION_ID, SVN_REVPROP_BZR_SIGNATURE,
                      SVN_PROP_BZR_BRANCHING_SCHEME, BzrSvnMappingv3FileProps,
                      parse_revision_metadata, parse_revid_property, 
                      parse_merge_property, BzrSvnMapping,
@@ -444,8 +444,7 @@
             if revid is not None:
                 yield revid
 
-    def revision_parents(self, revision_id, svn_fileprops=None, 
-                         svn_revprops=None):
+    def revision_parents(self, revision_id, svn_fileprops=None, svn_revprops=None):
         """See Repository.revision_parents()."""
         parent_ids = ()
         (branch, revnum, mapping) = self.lookup_revision_id(revision_id)
@@ -467,15 +466,17 @@
 
         return parent_ids
 
-    def get_revision(self, revision_id):
+    def get_revision(self, revision_id, svn_revprops=None, svn_fileprops=None):
         """See Repository.get_revision."""
         if not revision_id or not isinstance(revision_id, str):
             raise InvalidRevisionId(revision_id=revision_id, branch=self)
 
         (path, revnum, mapping) = self.lookup_revision_id(revision_id)
         
-        svn_revprops = lazy_dict(lambda: self.transport.revprop_list(revnum))
-        svn_fileprops = lazy_dict(lambda: self.branchprop_list.get_changed_properties(path, revnum))
+        if svn_revprops is None:
+            svn_revprops = lazy_dict(lambda: self.transport.revprop_list(revnum))
+        if svn_fileprops is None:
+            svn_fileprops = lazy_dict(lambda: self.branchprop_list.get_changed_properties(path, revnum))
         parent_ids = self.revision_parents(revision_id, svn_fileprops=svn_fileprops, svn_revprops=svn_revprops)
 
         # Commit SVN revision properties to a Revision object
@@ -547,7 +548,6 @@
 
         # Try a simple parse
         try:
-            # FIXME: Also try to parse with the other formats..
             (uuid, branch_path, revnum, mapping) = parse_revision_id(revid)
             assert isinstance(branch_path, str)
             assert isinstance(mapping, BzrSvnMapping)
@@ -796,10 +796,9 @@
         :return: False, as no signatures are stored for revisions in Subversion 
             at the moment.
         """
-        # TODO: Retrieve from SVN_PROP_BZR_SIGNATURE 
-        return False # SVN doesn't store GPG signatures. Perhaps 
-                     # store in SVN revision property?
-
+        (path, revnum, mapping) = self.lookup_revision_id(revision_id)
+        revprops = self.transport.revprop_list(revnum)
+        return revprops.has_key(SVN_REVPROP_BZR_SIGNATURE)
 
     def get_signature_text(self, revision_id):
         """Return the signature text for a particular revision.
@@ -808,9 +807,16 @@
                             signature.
         :raises NoSuchRevision: Always
         """
-        # TODO: Retrieve from SVN_PROP_BZR_SIGNATURE 
-        # SVN doesn't store GPG signatures
-        raise NoSuchRevision(self, revision_id)
+        (path, revnum, mapping) = self.lookup_revision_id(revision_id)
+        revprops = self.transport.revprop_list(revnum)
+        try:
+            return revprops[SVN_REVPROP_BZR_SIGNATURE]
+        except KeyError:
+            raise NoSuchRevision(self, revision_id)
+
+    def add_signature_text(self, revision_id, signature):
+        (path, revnum, mapping) = self.lookup_revision_id(revision_id)
+        self.transport.change_rev_prop(revnum, SVN_REVPROP_BZR_SIGNATURE, signature)
 
     def get_revision_graph(self, revision_id=None):
         """See Repository.get_revision_graph()."""

=== modified file 'svk.py'
--- a/svk.py	2008-02-08 17:56:00 +0000
+++ b/svk.py	2008-03-22 00:51:03 +0000
@@ -15,6 +15,8 @@
 
 """Utility functions for dealing with SVK properties."""
 
+import errors
+
 SVN_PROP_SVK_MERGE = 'svk:merge'
 
 parse_svk_features = lambda text: set(text.splitlines())

=== modified file 'tests/__init__.py'
--- a/tests/__init__.py	2008-03-21 22:45:37 +0000
+++ b/tests/__init__.py	2008-03-22 14:27:16 +0000
@@ -120,6 +120,9 @@
 
     def client_get_revprop(self, url, revnum, name):
         return self.client_ctx.revprop_get(name, url, revnum)[0]
+
+    def client_set_revprop(self, url, revnum, name, value):
+        return self.client_ctx.revprop_set(name, url, renum, value)
         
     def client_commit(self, dir, message=None, recursive=True):
         """Commit current changes in specified working copy.

=== modified file 'tests/test_fetch.py'
--- a/tests/test_fetch.py	2008-03-12 15:01:25 +0000
+++ b/tests/test_fetch.py	2008-03-22 13:38:24 +0000
@@ -189,6 +189,19 @@
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
+    def test_fetch_signature(self):
+        repos_url = self.make_client('d', 'dc')
+        self.build_tree({'dc/trunk/bar': "data"})
+        self.client_add("dc/trunk")
+        self.client_commit("dc", "My Message")
+        self.client_set_revprop(repos_url, 1, "bzr:gpg-signature", "SIGNATURE")
+        oldrepos = Repository.open(repos_url)
+        oldrepos.set_branching_scheme(TrunkBranchingScheme(0))
+        dir = BzrDir.create("f", format.get_rich_root_format())
+        newrepos = dir.create_repository()
+        oldrepos.copy_content_into(newrepos)
+        self.assertEquals("SIGNATURE", newrepos.get_signature_text(oldrepos.generate_revision_id(1, "trunk", oldrepos.get_mapping())))
+
     def test_fetch_special_char_edit(self):
         repos_url = self.make_client('d', 'dc')
         self.build_tree({u'dc/trunk/IöC': None})

=== modified file 'tests/test_mapping.py'
--- a/tests/test_mapping.py	2008-02-17 00:41:05 +0000
+++ b/tests/test_mapping.py	2008-03-21 23:30:29 +0000
@@ -114,13 +114,13 @@
 
 class ParseMergePropertyTestCase(TestCase):
     def test_parse_merge_space(self):
-        self.assertEqual([], parse_merge_property("bla bla"))
+        self.assertEqual((), parse_merge_property("bla bla"))
 
     def test_parse_merge_empty(self):
-        self.assertEqual([], parse_merge_property(""))
+        self.assertEqual((), parse_merge_property(""))
 
     def test_parse_merge_simple(self):
-        self.assertEqual(["bla", "bloe"], parse_merge_property("bla\tbloe"))
+        self.assertEqual(("bla", "bloe"), parse_merge_property("bla\tbloe"))
 
 
 class MappingTestAdapter:

=== modified file 'tests/test_push.py'
--- a/tests/test_push.py	2008-03-21 22:45:37 +0000
+++ b/tests/test_push.py	2008-03-22 14:27:16 +0000
@@ -752,7 +752,7 @@
         trunk = Branch.open(repos_url + "/trunk")
         trunk.pull(bzrwt.branch)
 
-        self.assertEquals(bzr_parents, 
+        self.assertEquals(tuple(bzr_parents), 
                 trunk.repository.get_revision(revid2).parent_ids)
 
         self.assertEquals([revid1, revid2], trunk.revision_history())

=== modified file 'tests/test_repos.py'
--- a/tests/test_repos.py	2008-03-21 22:45:37 +0000
+++ b/tests/test_repos.py	2008-03-22 14:27:16 +0000
@@ -131,11 +131,22 @@
         self.assertRaises(NotImplementedError, repos.add_revision, "revid", 
                 None)
 
-    def test_has_signature_for_revision_id(self):
+    def test_has_signature_for_revision_id_no(self):
         repos_url = self.make_client("a", "dc")
         repos = Repository.open(repos_url)
         self.assertFalse(repos.has_signature_for_revision_id("foo"))
 
+    def test_set_signature(self):
+        repos_url = self.make_client("a", "dc")
+        repos = Repository.open(repos_url)
+        self.build_tree({"dc/foo": "bar"})
+        self.client_add("dc/foo")
+        self.client_commit("dc", "msg")
+        revid = repos.get_mapping().generate_revision_id(repos.uuid, 1, "")
+        repos.add_signature_text(revid, "TEXT")
+        self.assertTrue(repos.has_signature_for_revision_id(revid))
+        self.assertEquals(repos.get_signature_text(revid), "TEXT")
+
     def test_repr(self):
         repos_url = self.make_client("a", "dc")
         self.build_tree({'dc/foo': "data"})




More information about the bazaar-commits mailing list