# HG changeset patch # User Matt Mackall # Date 1174625570 18000 # Node ID fe7f38dda34b5fc16c495831bb7564d74a5d88d4 # Parent 89075f10641408fad1249103e5c30e8949039f14 tags: fix abababa case, with test case diff -r 89075f106414 -r fe7f38dda34b mercurial/localrepo.py --- a/mercurial/localrepo.py Mon Mar 19 19:07:40 2007 -0300 +++ b/mercurial/localrepo.py Thu Mar 22 23:52:50 2007 -0500 @@ -288,10 +288,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(): @@ -307,7 +307,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 diff -r 89075f106414 -r fe7f38dda34b tests/test-tags --- a/tests/test-tags Mon Mar 19 19:07:40 2007 -0300 +++ b/tests/test-tags Thu Mar 22 23:52:50 2007 -0500 @@ -80,6 +80,25 @@ 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' 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 tags +hg co 3 +echo barbar > foo +hg ci -m 'change foo' -d '1000000 0' # rev 0 +hg tags diff -r 89075f106414 -r fe7f38dda34b tests/test-tags.out --- a/tests/test-tags.out Mon Mar 19 19:07:40 2007 -0300 +++ b/tests/test-tags.out Thu Mar 22 23:52:50 2007 -0500 @@ -49,3 +49,8 @@ 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