# HG changeset patch # User Matt Mackall # Date 1174626748 18000 # Node ID 8185a1ca86287807ce55a149551396caf7bf3b6a # Parent fe7f38dda34b5fc16c495831bb7564d74a5d88d4 tags: require -f to replace an existing tag based on a patch from Johan Herland diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2463,6 +2463,9 @@ def tag(ui, repo, name, rev_=None, **opt rev_ = nullid if not message: message = _('Removed tag %s') % name + elif name in repo.tags() and not opts['force']: + raise util.Abort(_('a tag named %s already exists (use -f to force)') + % name) if not rev_ and repo.dirstate.parents()[1] != nullid: raise util.Abort(_('uncommitted merge - please provide a ' 'specific revision')) @@ -2955,7 +2958,8 @@ table = { _('hg status [OPTION]... [FILE]...')), "tag": (tag, - [('l', 'local', None, _('make the tag local')), + [('f', 'force', None, _('replace existing tag')), + ('l', 'local', None, _('make the tag local')), ('m', 'message', '', _('message for tag commit log entry')), ('d', 'date', '', _('record datecode as commit date')), ('u', 'user', '', _('record user as commiter')), diff --git a/tests/test-tags b/tests/test-tags --- a/tests/test-tags +++ b/tests/test-tags @@ -74,7 +74,7 @@ hg tag -d '1000000 0' bar # echo >> foo hg ci -m 'change foo 1' -d '1000000 0' # rev 2 hg up -C 1 -hg tag -r 1 -d '1000000 0' bar # rev 3 +hg tag -r 1 -d '1000000 0' -f bar # rev 3 hg up -C 1 echo >> foo hg ci -m 'change foo 2' -d '1000000 0' # rev 4 @@ -91,14 +91,17 @@ hg init t3 cd t3 echo foo > foo hg add foo -hg ci -m 'add foo' -d '1000000 0' # rev 0 -hg tag -d '1000000 0' bar # rev 1 bar -> 0 -hg tag -d '1000000 0' bar # rev 2 bar -> 1 -hg tag -d '1000000 0' -r 0 bar # rev 3 bar -> 0 -hg tag -d '1000000 0' -r 1 bar # rev 3 bar -> 1 -hg tag -d '1000000 0' -r 0 bar # rev 4 bar -> 0 +hg ci -m 'add foo' -d '1000000 0' # rev 0 +hg tag -d '1000000 0' -f bar # rev 1 bar -> 0 +hg tag -d '1000000 0' -f bar # rev 2 bar -> 1 +hg tag -d '1000000 0' -fr 0 bar # rev 3 bar -> 0 +hg tag -d '1000000 0' -fr 1 bar # rev 3 bar -> 1 +hg tag -d '1000000 0' -fr 0 bar # rev 4 bar -> 0 hg tags hg co 3 echo barbar > foo -hg ci -m 'change foo' -d '1000000 0' # rev 0 +hg ci -m 'change foo' -d '1000000 0' # rev 0 hg tags + +hg tag -d '1000000 0' -r 3 bar # should complain +hg tags \ No newline at end of file diff --git a/tests/test-tags.out b/tests/test-tags.out --- a/tests/test-tags.out +++ b/tests/test-tags.out @@ -54,3 +54,6 @@ bar 0:b40 1 files updated, 0 files merged, 0 files removed, 0 files unresolved tip 6:b5ff9d142648 bar 0:b409d9da318e +abort: a tag named bar already exists (use -f to force) +tip 6:b5ff9d142648 +bar 0:b409d9da318e