Rev 2341: (Marien Zwart) RevisionSpec.from_string() should support Unicode parameters. (especially for revid:) in http://bzr.arbash-meinel.com/branches/bzr/jam-integration

John Arbash Meinel john at arbash-meinel.com
Mon Mar 12 16:29:55 GMT 2007


At http://bzr.arbash-meinel.com/branches/bzr/jam-integration

------------------------------------------------------------
revno: 2341
revision-id: john at arbash-meinel.com-20070312162947-y3a3fjf0iwalwot5
parent: pqm at pqm.ubuntu.com-20070312161518-2706316ad769b56a
parent: marienz at gentoo.org-20070311181444-9p0nwvaljp1h42xh
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: jam-integration
timestamp: Mon 2007-03-12 10:29:47 -0600
message:
  (Marien Zwart) RevisionSpec.from_string() should support Unicode parameters. (especially for revid:)
modified:
  bzrlib/revisionspec.py         revisionspec.py-20050907152633-17567659fd5c0ddb
  bzrlib/tests/blackbox/test_tags.py test_tags.py-20070116132048-5h4qak2cm22jlb9e-1
  bzrlib/tests/test_revisionnamespaces.py testrevisionnamespaces.py-20050711050225-8b4af89e6b1efe84
    ------------------------------------------------------------
    revno: 2325.2.5
    merged: marienz at gentoo.org-20070311181444-9p0nwvaljp1h42xh
    parent: marienz at gentoo.org-20070309042901-n5sben4mqbf6iwgj
    committer: Marien Zwart <marienz at gentoo.org>
    branch nick: bzr.dev
    timestamp: Sun 2007-03-11 19:14:44 +0100
    message:
      Call osutils.safe_revision_id instead of duplicating it.
    ------------------------------------------------------------
    revno: 2325.2.4
    merged: marienz at gentoo.org-20070309042901-n5sben4mqbf6iwgj
    parent: marienz at gentoo.org-20070309042706-173aok1s5f30rcuj
    committer: Marien Zwart <marienz at gentoo.org>
    branch nick: bzr.dev
    timestamp: Fri 2007-03-09 05:29:01 +0100
    message:
      Rename rev_id to revision_id because HACKING says so.
    ------------------------------------------------------------
    revno: 2325.2.3
    merged: marienz at gentoo.org-20070309042706-173aok1s5f30rcuj
    parent: marienz at gentoo.org-20070308185109-wdlc2839v8qcuqhc
    committer: Marien Zwart <marienz at gentoo.org>
    branch nick: bzr.dev
    timestamp: Fri 2007-03-09 05:27:06 +0100
    message:
      Make the revid RevisionSpec also support utf8-encoded bytestrings.
    ------------------------------------------------------------
    revno: 2325.2.2
    merged: marienz at gentoo.org-20070308185109-wdlc2839v8qcuqhc
    parent: marienz at gentoo.org-20070308171357-7u3cn4ra7m2zhw0w
    committer: Marien Zwart <marienz at gentoo.org>
    branch nick: bzr.dev
    timestamp: Thu 2007-03-08 19:51:09 +0100
    message:
      Make the revid RevisionSpec always return a str object, not a unicode object.
    ------------------------------------------------------------
    revno: 2325.2.1
    merged: marienz at gentoo.org-20070308171357-7u3cn4ra7m2zhw0w
    parent: pqm at pqm.ubuntu.com-20070307233124-ad2724bf65e09035
    committer: Marien Zwart <marienz at gentoo.org>
    branch nick: bzr.dev
    timestamp: Thu 2007-03-08 18:13:57 +0100
    message:
      Make the test suite failure reporting a bit more robust.
-------------- next part --------------
=== modified file 'bzrlib/revisionspec.py'
--- a/bzrlib/revisionspec.py	2007-03-11 20:25:39 +0000
+++ b/bzrlib/revisionspec.py	2007-03-12 16:29:47 +0000
@@ -21,6 +21,7 @@
 
 from bzrlib import (
     errors,
+    osutils,
     revision,
     symbol_versioning,
     trace,
@@ -379,7 +380,11 @@
     prefix = 'revid:'
 
     def _match_on(self, branch, revs):
-        return RevisionInfo.from_revision_id(branch, self.spec, revs)
+        # self.spec comes straight from parsing the command line arguments,
+        # so we expect it to be a Unicode string. Switch it to the internal
+        # representation.
+        revision_id = osutils.safe_revision_id(self.spec, warn=False)
+        return RevisionInfo.from_revision_id(branch, revision_id, revs)
 
 SPEC_TYPES.append(RevisionSpec_revid)
 

=== modified file 'bzrlib/tests/blackbox/test_tags.py'
--- a/bzrlib/tests/blackbox/test_tags.py	2007-03-06 06:35:00 +0000
+++ b/bzrlib/tests/blackbox/test_tags.py	2007-03-08 18:51:09 +0000
@@ -60,6 +60,11 @@
         # can also create tags using -r
         self.run_bzr('tag', '-d', 'branch', 'tag2', '-r1')
         self.assertEquals(t.branch.tags.lookup_tag('tag2'), 'first-revid')
+        # regression test: make sure a unicode revision from the user
+        # gets turned into a str object properly. The use of a unicode
+        # object for the revid is intentional.
+        self.run_bzr('tag', '-d', 'branch', 'tag3', u'-rrevid:first-revid')
+        self.assertEquals(t.branch.tags.lookup_tag('tag3'), 'first-revid')
         # can also delete an existing tag
         out, err = self.run_bzr('tag', '--delete', '-d', 'branch', 'tag2')
         # cannot replace an existing tag normally

=== modified file 'bzrlib/tests/test_revisionnamespaces.py'
--- a/bzrlib/tests/test_revisionnamespaces.py	2007-03-11 04:53:13 +0000
+++ b/bzrlib/tests/test_revisionnamespaces.py	2007-03-12 16:29:47 +0000
@@ -67,11 +67,11 @@
     def assertInHistoryIs(self, exp_revno, exp_revision_id, revision_spec):
         rev_info = self.get_in_history(revision_spec)
         self.assertEqual(exp_revno, rev_info.revno,
-                         'Revision spec: %s returned wrong revno: %s != %s'
+                         'Revision spec: %r returned wrong revno: %r != %r'
                          % (revision_spec, exp_revno, rev_info.revno))
         self.assertEqual(exp_revision_id, rev_info.rev_id,
-                         'Revision spec: %s returned wrong revision id:'
-                         ' %s != %s'
+                         'Revision spec: %r returned wrong revision id:'
+                         ' %r != %r'
                          % (revision_spec, exp_revision_id, rev_info.rev_id))
 
     def assertInvalid(self, revision_spec, extra=''):
@@ -277,6 +277,13 @@
                                           revision_id='alt_r3')
         self.assertInHistoryIs(None, 'alt_r3', 'revid:alt_r3')
 
+    def test_unicode(self):
+        """We correctly convert a unicode ui string to an encoded revid."""
+        revision_id = u'\N{SNOWMAN}'.encode('utf-8')
+        self.tree.commit('unicode', rev_id=revision_id)
+        self.assertInHistoryIs(3, revision_id, u'revid:\N{SNOWMAN}')
+        self.assertInHistoryIs(3, revision_id, 'revid:' + revision_id)
+
 
 class TestRevisionSpec_last(TestRevisionSpec):
 



More information about the bazaar-commits mailing list