Handle transcoding of tags
authorMatt Mackall <mpm@selenic.com>
Sun, 03 Dec 2006 16:16:33 -0600
changeset 3772 73860ffbe798
parent 3771 29d91e57d055
child 3773 b1eeaeb936ae
Handle transcoding of tags
mercurial/commands.py
mercurial/localrepo.py
--- a/mercurial/commands.py	Sun Dec 03 16:16:33 2006 -0600
+++ b/mercurial/commands.py	Sun Dec 03 16:16:33 2006 -0600
@@ -2210,7 +2210,9 @@
         if ui.quiet:
             ui.write("%s\n" % t)
         else:
-            ui.write("%-30s %s\n" % (t, r))
+            t = util.localsub(t, 30)
+            t += " " * (30 - util.locallen(t))
+            ui.write("%s %s\n" % (t, r))
 
 def tip(ui, repo, **opts):
     """show the tip revision
--- a/mercurial/localrepo.py	Sun Dec 03 16:16:33 2006 -0600
+++ b/mercurial/localrepo.py	Sun Dec 03 16:16:33 2006 -0600
@@ -198,6 +198,7 @@
         self.hook('pretag', throw=True, node=hex(node), tag=name, local=local)
 
         if local:
+            # local tags are stored in the current charset
             self.opener('localtags', 'a').write('%s %s\n' % (hex(node), name))
             self.hook('tag', node=hex(node), tag=name, local=local)
             return
@@ -207,7 +208,9 @@
                 raise util.Abort(_('working copy of .hgtags is changed '
                                    '(please commit .hgtags manually)'))
 
-        self.wfile('.hgtags', 'ab').write('%s %s\n' % (hex(node), name))
+        # committed tags are stored in UTF-8
+        line = '%s %s\n' % (hex(node), util.fromlocal(name))
+        self.wfile('.hgtags', 'ab').write(line)
         if self.dirstate.state('.hgtags') == '?':
             self.add(['.hgtags'])
 
@@ -227,7 +230,7 @@
                     self.ui.warn(_("%s: cannot parse entry\n") % context)
                     return
                 node, key = s
-                key = key.strip()
+                key = util.tolocal(key.strip()) # stored in UTF-8
                 try:
                     bin_n = bin(node)
                 except TypeError:
@@ -256,6 +259,9 @@
                 f = self.opener("localtags")
                 count = 0
                 for l in f:
+                    # localtags are stored in the local character set
+                    # while the internal tag table is stored in UTF-8
+                    l = util.fromlocal(l)
                     count += 1
                     parsetag(l, _("localtags, line %d") % count)
             except IOError: