mercurial/localrepo.py
changeset 3773 73860ffbe798
parent 3761 9433bdcaa9ae
child 3774 b1eeaeb936ae
equal deleted inserted replaced
3772:29d91e57d055 3773:73860ffbe798
   196                 raise util.Abort(_('%r cannot be used in a tag name') % c)
   196                 raise util.Abort(_('%r cannot be used in a tag name') % c)
   197 
   197 
   198         self.hook('pretag', throw=True, node=hex(node), tag=name, local=local)
   198         self.hook('pretag', throw=True, node=hex(node), tag=name, local=local)
   199 
   199 
   200         if local:
   200         if local:
       
   201             # local tags are stored in the current charset
   201             self.opener('localtags', 'a').write('%s %s\n' % (hex(node), name))
   202             self.opener('localtags', 'a').write('%s %s\n' % (hex(node), name))
   202             self.hook('tag', node=hex(node), tag=name, local=local)
   203             self.hook('tag', node=hex(node), tag=name, local=local)
   203             return
   204             return
   204 
   205 
   205         for x in self.status()[:5]:
   206         for x in self.status()[:5]:
   206             if '.hgtags' in x:
   207             if '.hgtags' in x:
   207                 raise util.Abort(_('working copy of .hgtags is changed '
   208                 raise util.Abort(_('working copy of .hgtags is changed '
   208                                    '(please commit .hgtags manually)'))
   209                                    '(please commit .hgtags manually)'))
   209 
   210 
   210         self.wfile('.hgtags', 'ab').write('%s %s\n' % (hex(node), name))
   211         # committed tags are stored in UTF-8
       
   212         line = '%s %s\n' % (hex(node), util.fromlocal(name))
       
   213         self.wfile('.hgtags', 'ab').write(line)
   211         if self.dirstate.state('.hgtags') == '?':
   214         if self.dirstate.state('.hgtags') == '?':
   212             self.add(['.hgtags'])
   215             self.add(['.hgtags'])
   213 
   216 
   214         self.commit(['.hgtags'], message, user, date)
   217         self.commit(['.hgtags'], message, user, date)
   215         self.hook('tag', node=hex(node), tag=name, local=local)
   218         self.hook('tag', node=hex(node), tag=name, local=local)
   225                 s = l.split(" ", 1)
   228                 s = l.split(" ", 1)
   226                 if len(s) != 2:
   229                 if len(s) != 2:
   227                     self.ui.warn(_("%s: cannot parse entry\n") % context)
   230                     self.ui.warn(_("%s: cannot parse entry\n") % context)
   228                     return
   231                     return
   229                 node, key = s
   232                 node, key = s
   230                 key = key.strip()
   233                 key = util.tolocal(key.strip()) # stored in UTF-8
   231                 try:
   234                 try:
   232                     bin_n = bin(node)
   235                     bin_n = bin(node)
   233                 except TypeError:
   236                 except TypeError:
   234                     self.ui.warn(_("%s: node '%s' is not well formed\n") %
   237                     self.ui.warn(_("%s: node '%s' is not well formed\n") %
   235                                  (context, node))
   238                                  (context, node))
   254 
   257 
   255             try:
   258             try:
   256                 f = self.opener("localtags")
   259                 f = self.opener("localtags")
   257                 count = 0
   260                 count = 0
   258                 for l in f:
   261                 for l in f:
       
   262                     # localtags are stored in the local character set
       
   263                     # while the internal tag table is stored in UTF-8
       
   264                     l = util.fromlocal(l)
   259                     count += 1
   265                     count += 1
   260                     parsetag(l, _("localtags, line %d") % count)
   266                     parsetag(l, _("localtags, line %d") % count)
   261             except IOError:
   267             except IOError:
   262                 pass
   268                 pass
   263 
   269