mercurial/localrepo.py
changeset 8402 0ad521500424
parent 8401 ca7dc47eecc6
child 8403 553909cd1baa
equal deleted inserted replaced
8401:ca7dc47eecc6 8402:0ad521500424
   127     def hook(self, name, throw=False, **args):
   127     def hook(self, name, throw=False, **args):
   128         return hook.hook(self.ui, self, name, throw, **args)
   128         return hook.hook(self.ui, self, name, throw, **args)
   129 
   129 
   130     tag_disallowed = ':\r\n'
   130     tag_disallowed = ':\r\n'
   131 
   131 
   132     def _tag(self, names, node, message, local, user, date, parent=None,
   132     def _tag(self, names, node, message, local, user, date, extra={}):
   133              extra={}):
       
   134         use_dirstate = parent is None
       
   135 
       
   136         if isinstance(names, str):
   133         if isinstance(names, str):
   137             allchars = names
   134             allchars = names
   138             names = (names,)
   135             names = (names,)
   139         else:
   136         else:
   140             allchars = ''.join(names)
   137             allchars = ''.join(names)
   171             writetags(fp, names, None, prevtags)
   168             writetags(fp, names, None, prevtags)
   172             for name in names:
   169             for name in names:
   173                 self.hook('tag', node=hex(node), tag=name, local=local)
   170                 self.hook('tag', node=hex(node), tag=name, local=local)
   174             return
   171             return
   175 
   172 
   176         if use_dirstate:
   173         try:
   177             try:
   174             fp = self.wfile('.hgtags', 'rb+')
   178                 fp = self.wfile('.hgtags', 'rb+')
   175         except IOError:
   179             except IOError:
   176             fp = self.wfile('.hgtags', 'ab')
   180                 fp = self.wfile('.hgtags', 'ab')
       
   181             else:
       
   182                 prevtags = fp.read()
       
   183         else:
   177         else:
   184             try:
   178             prevtags = fp.read()
   185                 prevtags = self.filectx('.hgtags', parent).data()
       
   186             except error.LookupError:
       
   187                 pass
       
   188             fp = self.wfile('.hgtags', 'wb')
       
   189             if prevtags:
       
   190                 fp.write(prevtags)
       
   191 
   179 
   192         # committed tags are stored in UTF-8
   180         # committed tags are stored in UTF-8
   193         writetags(fp, names, encoding.fromlocal, prevtags)
   181         writetags(fp, names, encoding.fromlocal, prevtags)
   194 
   182 
   195         if use_dirstate and '.hgtags' not in self.dirstate:
   183         if '.hgtags' not in self.dirstate:
   196             self.add(['.hgtags'])
   184             self.add(['.hgtags'])
   197 
   185 
   198         tagnode = self.commit(['.hgtags'], message, user, date, p1=parent,
   186         tagnode = self.commit(['.hgtags'], message, user, date, extra=extra)
   199                               extra=extra)
       
   200 
   187 
   201         for name in names:
   188         for name in names:
   202             self.hook('tag', node=hex(node), tag=name, local=local)
   189             self.hook('tag', node=hex(node), tag=name, local=local)
   203 
   190 
   204         return tagnode
   191         return tagnode