mercurial/localrepo.py
changeset 4116 35b39097c3e6
parent 4070 961ccb615cf7
child 4134 9dc64c8414ca
equal deleted inserted replaced
4115:eb0967c6e77b 4116:35b39097c3e6
   215                 r = runhook(hname, cmd) or r
   215                 r = runhook(hname, cmd) or r
   216         return r
   216         return r
   217 
   217 
   218     tag_disallowed = ':\r\n'
   218     tag_disallowed = ':\r\n'
   219 
   219 
   220     def tag(self, name, node, message, local, user, date):
   220     def _tag(self, name, node, message, local, user, date, parent=None):
   221         '''tag a revision with a symbolic name.
   221         use_dirstate = parent is None
   222 
       
   223         if local is True, the tag is stored in a per-repository file.
       
   224         otherwise, it is stored in the .hgtags file, and a new
       
   225         changeset is committed with the change.
       
   226 
       
   227         keyword arguments:
       
   228 
       
   229         local: whether to store tag in non-version-controlled file
       
   230         (default False)
       
   231 
       
   232         message: commit message to use if committing
       
   233 
       
   234         user: name of user to use if committing
       
   235 
       
   236         date: date tuple to use if committing'''
       
   237 
   222 
   238         for c in self.tag_disallowed:
   223         for c in self.tag_disallowed:
   239             if c in name:
   224             if c in name:
   240                 raise util.Abort(_('%r cannot be used in a tag name') % c)
   225                 raise util.Abort(_('%r cannot be used in a tag name') % c)
   241 
   226 
   245             # local tags are stored in the current charset
   230             # local tags are stored in the current charset
   246             self.opener('localtags', 'a').write('%s %s\n' % (hex(node), name))
   231             self.opener('localtags', 'a').write('%s %s\n' % (hex(node), name))
   247             self.hook('tag', node=hex(node), tag=name, local=local)
   232             self.hook('tag', node=hex(node), tag=name, local=local)
   248             return
   233             return
   249 
   234 
       
   235         # committed tags are stored in UTF-8
       
   236         line = '%s %s\n' % (hex(node), util.fromlocal(name))
       
   237         if use_dirstate:
       
   238             self.wfile('.hgtags', 'ab').write(line)
       
   239         else:
       
   240             ntags = self.filectx('.hgtags', parent).data()
       
   241             self.wfile('.hgtags', 'ab').write(ntags + line)
       
   242         if use_dirstate and self.dirstate.state('.hgtags') == '?':
       
   243             self.add(['.hgtags'])
       
   244 
       
   245         tagnode = self.commit(['.hgtags'], message, user, date, p1=parent)
       
   246 
       
   247         self.hook('tag', node=hex(node), tag=name, local=local)
       
   248 
       
   249         return tagnode
       
   250 
       
   251     def tag(self, name, node, message, local, user, date):
       
   252         '''tag a revision with a symbolic name.
       
   253 
       
   254         if local is True, the tag is stored in a per-repository file.
       
   255         otherwise, it is stored in the .hgtags file, and a new
       
   256         changeset is committed with the change.
       
   257 
       
   258         keyword arguments:
       
   259 
       
   260         local: whether to store tag in non-version-controlled file
       
   261         (default False)
       
   262 
       
   263         message: commit message to use if committing
       
   264 
       
   265         user: name of user to use if committing
       
   266 
       
   267         date: date tuple to use if committing'''
       
   268 
   250         for x in self.status()[:5]:
   269         for x in self.status()[:5]:
   251             if '.hgtags' in x:
   270             if '.hgtags' in x:
   252                 raise util.Abort(_('working copy of .hgtags is changed '
   271                 raise util.Abort(_('working copy of .hgtags is changed '
   253                                    '(please commit .hgtags manually)'))
   272                                    '(please commit .hgtags manually)'))
   254 
   273 
   255         # committed tags are stored in UTF-8
   274 
   256         line = '%s %s\n' % (hex(node), util.fromlocal(name))
   275         self._tag(name, node, message, local, user, date)
   257         self.wfile('.hgtags', 'ab').write(line)
       
   258         if self.dirstate.state('.hgtags') == '?':
       
   259             self.add(['.hgtags'])
       
   260 
       
   261         self.commit(['.hgtags'], message, user, date)
       
   262         self.hook('tag', node=hex(node), tag=name, local=local)
       
   263 
   276 
   264     def tags(self):
   277     def tags(self):
   265         '''return a mapping of tag to node'''
   278         '''return a mapping of tag to node'''
   266         if not self.tagscache:
   279         if not self.tagscache:
   267             self.tagscache = {}
   280             self.tagscache = {}