Merge with -stable
authorMatt Mackall <mpm@selenic.com>
Sat, 24 Mar 2007 02:45:08 -0500
changeset 4268 f38f90a177dc
parent 4265 94bb953b43e5 (current diff)
parent 4267 8185a1ca8628 (diff)
child 4269 73c918c71300
Merge with -stable
mercurial/commands.py
mercurial/localrepo.py
--- a/mercurial/commands.py	Fri Mar 23 01:04:21 2007 -0500
+++ b/mercurial/commands.py	Sat Mar 24 02:45:08 2007 -0500
@@ -2499,6 +2499,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'))
@@ -2962,7 +2965,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/mercurial/localrepo.py	Fri Mar 23 01:04:21 2007 -0500
+++ b/mercurial/localrepo.py	Sat Mar 24 02:45:08 2007 -0500
@@ -289,10 +289,10 @@
                     warn(_("tag '%s' refers to unknown node") % key)
                     continue
 
-                h = {}
+                h = []
                 if key in filetags:
                     n, h = filetags[key]
-                    h[n] = True
+                    h.append(n)
                 filetags[key] = (bin_n, h)
 
             for k,nh in filetags.items():
@@ -308,7 +308,7 @@
                 if bn != an and an in bh and \
                    (bn not in ah or len(bh) > len(ah)):
                     an = bn
-                ah.update(bh)
+                ah.append([n for n in bh if n not in ah])
                 globaltags[k] = an, ah
 
         # read the tags file from each head, ending with the tip
--- a/tests/test-tags	Fri Mar 23 01:04:21 2007 -0500
+++ b/tests/test-tags	Sat Mar 24 02:45:08 2007 -0500
@@ -74,12 +74,34 @@
 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
 hg tags
 
+# test tag removal
 hg tag --remove -d '1000000 0' bar 
 hg tip
 hg tags
+
+# test tag rank
+cd ..
+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' -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 tags
+
+hg tag -d '1000000 0' -r 3 bar         # should complain
+hg tags
\ No newline at end of file
--- a/tests/test-tags.out	Fri Mar 23 01:04:21 2007 -0500
+++ b/tests/test-tags.out	Sat Mar 24 02:45:08 2007 -0500
@@ -49,3 +49,11 @@
 summary:     Removed tag bar
 
 tip                                5:57e1983b4a60
+tip                                5:d8bb4d1eff25
+bar                                0:b409d9da318e
+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