changeset 4267:8185a1ca8628

tags: require -f to replace an existing tag based on a patch from Johan Herland <johherla@online.no>
author Matt Mackall <mpm@selenic.com>
date Fri, 23 Mar 2007 00:12:28 -0500
parents fe7f38dda34b
children f38f90a177dc 4787e2b0dd03
files mercurial/commands.py tests/test-tags tests/test-tags.out
diffstat 3 files changed, 19 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Thu Mar 22 23:52:50 2007 -0500
+++ b/mercurial/commands.py	Fri Mar 23 00:12:28 2007 -0500
@@ -2463,6 +2463,9 @@
         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 @@
          _('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')),
--- a/tests/test-tags	Thu Mar 22 23:52:50 2007 -0500
+++ b/tests/test-tags	Fri Mar 23 00:12:28 2007 -0500
@@ -74,7 +74,7 @@
 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 @@
 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
--- a/tests/test-tags.out	Thu Mar 22 23:52:50 2007 -0500
+++ b/tests/test-tags.out	Fri Mar 23 00:12:28 2007 -0500
@@ -54,3 +54,6 @@
 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