Mercurial > hg-stable
changeset 31673:7d0459706716
tags: move '_tags' from 'repo' to 'tags' module
As far as I understand, that function do not needs to be on the local repository
class, so we extract it in the 'tags' module were it will be nice and
comfortable. We keep the '_' in the name since its only user will follow in the
next changeset.
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Mon, 27 Mar 2017 15:55:07 +0200 |
parents | e540846c67e0 |
children | a719f3315366 |
files | mercurial/localrepo.py mercurial/tags.py |
diffstat | 2 files changed, 77 insertions(+), 75 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/localrepo.py Mon Mar 13 15:17:20 2017 +0100 +++ b/mercurial/localrepo.py Mon Mar 27 15:55:07 2017 +0200 @@ -649,80 +649,6 @@ """ return hook.hook(self.ui, self, name, throw, **args) - @unfilteredmethod - def _tag(self, names, node, message, local, user, date, extra=None, - editor=False): - if isinstance(names, str): - names = (names,) - - branches = self.branchmap() - for name in names: - self.hook('pretag', throw=True, node=hex(node), tag=name, - local=local) - if name in branches: - self.ui.warn(_("warning: tag %s conflicts with existing" - " branch name\n") % name) - - def writetags(fp, names, munge, prevtags): - fp.seek(0, 2) - if prevtags and prevtags[-1] != '\n': - fp.write('\n') - for name in names: - if munge: - m = munge(name) - else: - m = name - - if (self._tagscache.tagtypes and - name in self._tagscache.tagtypes): - old = self.tags().get(name, nullid) - fp.write('%s %s\n' % (hex(old), m)) - fp.write('%s %s\n' % (hex(node), m)) - fp.close() - - prevtags = '' - if local: - try: - fp = self.vfs('localtags', 'r+') - except IOError: - fp = self.vfs('localtags', 'a') - else: - prevtags = fp.read() - - # local tags are stored in the current charset - writetags(fp, names, None, prevtags) - for name in names: - self.hook('tag', node=hex(node), tag=name, local=local) - return - - try: - fp = self.wvfs('.hgtags', 'rb+') - except IOError as e: - if e.errno != errno.ENOENT: - raise - fp = self.wvfs('.hgtags', 'ab') - else: - prevtags = fp.read() - - # committed tags are stored in UTF-8 - writetags(fp, names, encoding.fromlocal, prevtags) - - fp.close() - - self.invalidatecaches() - - if '.hgtags' not in self.dirstate: - self[None].add(['.hgtags']) - - m = matchmod.exact(self.root, '', ['.hgtags']) - tagnode = self.commit(message, user, date, extra=extra, match=m, - editor=editor) - - for name in names: - self.hook('tag', node=hex(node), tag=name, local=local) - - return tagnode - def tag(self, names, node, message, local, user, date, editor=False): '''tag a revision with one or more symbolic names. @@ -751,7 +677,8 @@ hint=_('please commit .hgtags manually')) self.tags() # instantiate the cache - self._tag(names, node, message, local, user, date, editor=editor) + tagsmod._tag(self.unfiltered(), names, node, message, local, user, date, + editor=editor) @filteredpropertycache def _tagscache(self):
--- a/mercurial/tags.py Mon Mar 13 15:17:20 2017 +0100 +++ b/mercurial/tags.py Mon Mar 27 15:55:07 2017 +0200 @@ -20,9 +20,11 @@ nullid, short, ) +from .i18n import _ from . import ( encoding, error, + match as matchmod, scmutil, util, ) @@ -393,6 +395,79 @@ except (OSError, IOError): pass +def _tag(repo, names, node, message, local, user, date, extra=None, + editor=False): + if isinstance(names, str): + names = (names,) + + branches = repo.branchmap() + for name in names: + repo.hook('pretag', throw=True, node=hex(node), tag=name, + local=local) + if name in branches: + repo.ui.warn(_("warning: tag %s conflicts with existing" + " branch name\n") % name) + + def writetags(fp, names, munge, prevtags): + fp.seek(0, 2) + if prevtags and prevtags[-1] != '\n': + fp.write('\n') + for name in names: + if munge: + m = munge(name) + else: + m = name + + if (repo._tagscache.tagtypes and + name in repo._tagscache.tagtypes): + old = repo.tags().get(name, nullid) + fp.write('%s %s\n' % (hex(old), m)) + fp.write('%s %s\n' % (hex(node), m)) + fp.close() + + prevtags = '' + if local: + try: + fp = repo.vfs('localtags', 'r+') + except IOError: + fp = repo.vfs('localtags', 'a') + else: + prevtags = fp.read() + + # local tags are stored in the current charset + writetags(fp, names, None, prevtags) + for name in names: + repo.hook('tag', node=hex(node), tag=name, local=local) + return + + try: + fp = repo.wvfs('.hgtags', 'rb+') + except IOError as e: + if e.errno != errno.ENOENT: + raise + fp = repo.wvfs('.hgtags', 'ab') + else: + prevtags = fp.read() + + # committed tags are stored in UTF-8 + writetags(fp, names, encoding.fromlocal, prevtags) + + fp.close() + + repo.invalidatecaches() + + if '.hgtags' not in repo.dirstate: + repo[None].add(['.hgtags']) + + m = matchmod.exact(repo.root, '', ['.hgtags']) + tagnode = repo.commit(message, user, date, extra=extra, match=m, + editor=editor) + + for name in names: + repo.hook('tag', node=hex(node), tag=name, local=local) + + return tagnode + _fnodescachefile = 'cache/hgtagsfnodes1' _fnodesrecsize = 4 + 20 # changeset fragment + filenode _fnodesmissingrec = '\xff' * 24