Patchwork convert: properly pass null ids through .hgtags (issue4678)

login
register
mail settings
Submitter Matt Mackall
Date May 27, 2015, 10:17 p.m.
Message ID <a50dbbf2c38b83872a4a.1432765067@ruin.waste.org>
Download mbox | patch
Permalink /patch/9313/
State Accepted
Headers show

Comments

Matt Mackall - May 27, 2015, 10:17 p.m.
# HG changeset patch
# User Matt Mackall <mpm@selenic.com>
# Date 1432754909 18000
#      Wed May 27 14:28:29 2015 -0500
# Branch stable
# Node ID a50dbbf2c38b83872a4a5d6d1f2b649f93dac261
# Parent  b1b89a0a606d74bfb48dfad239a352c55d3499b3
convert: properly pass null ids through .hgtags (issue4678)

Mercurial uses tags of null to mark deletions, but convert was
silently discarding these because it had no mapping for them. Thus, it
was resurrecting deleted tags.
Pierre-Yves David - May 27, 2015, 11:16 p.m.
On 05/27/2015 03:17 PM, Matt Mackall wrote:
> # HG changeset patch
> # User Matt Mackall <mpm@selenic.com>
> # Date 1432754909 18000
> #      Wed May 27 14:28:29 2015 -0500
> # Branch stable
> # Node ID a50dbbf2c38b83872a4a5d6d1f2b649f93dac261
> # Parent  b1b89a0a606d74bfb48dfad239a352c55d3499b3
> convert: properly pass null ids through .hgtags (issue4678)

Sure, pushed to the clowncopter.

>
> Mercurial uses tags of null to mark deletions, but convert was
> silently discarding these because it had no mapping for them. Thus, it
> was resurrecting deleted tags.
>
> diff -r b1b89a0a606d -r a50dbbf2c38b hgext/convert/hg.py
> --- a/hgext/convert/hg.py	Tue May 26 13:02:28 2015 -0700
> +++ b/hgext/convert/hg.py	Wed May 27 14:28:29 2015 -0500
> @@ -128,7 +128,10 @@
>                   continue
>               revid = revmap.get(source.lookuprev(s[0]))
>               if not revid:
> -                continue
> +                if s[0] == hex(nullid):
> +                    revid = s[0]
> +                else:
> +                    continue
>               fp.write('%s %s\n' % (revid, s[1]))
>           return fp.getvalue()
>
> diff -r b1b89a0a606d -r a50dbbf2c38b tests/test-convert-hg-source.t
> --- a/tests/test-convert-hg-source.t	Tue May 26 13:02:28 2015 -0700
> +++ b/tests/test-convert-hg-source.t	Wed May 27 14:28:29 2015 -0500
> @@ -38,6 +38,13 @@
>     (branch merge, don't forget to commit)
>     $ hg ci -m 'merge remote copy' -d '4 0'
>     created new head
> +
> +Make and delete some tags
> +
> +  $ hg tag that
> +  $ hg tag --remove that
> +  $ hg tag this
> +
>   #if execbit
>     $ chmod +x baz
>   #else
> @@ -50,11 +57,14 @@
>     scanning source...
>     sorting...
>     converting...
> -  5 add foo bar
> -  4 change foo
> -  3 make bar and baz copies of foo
> -  2 merge local copy
> -  1 merge remote copy
> +  8 add foo bar
> +  7 change foo
> +  6 make bar and baz copies of foo
> +  5 merge local copy
> +  4 merge remote copy
> +  3 Added tag that for changeset 88586c4e9f02
> +  2 Removed tag that
> +  1 Added tag this for changeset c56a7f387039
>     0 mark baz executable
>     updating bookmarks
>     $ cd new
> @@ -66,12 +76,12 @@
>   #if execbit
>     $ hg bookmarks
>        premerge1                 3:973ef48a98a4
> -     premerge2                 5:13d9b87cf8f8
> +     premerge2                 8:91d107c423ba
>   #else
>   Different hash because no x bit
>     $ hg bookmarks
>        premerge1                 3:973ef48a98a4
> -     premerge2                 5:df0779bcf33c
> +     premerge2                 8:3537b15eaaca
>   #endif
>     $ cd ..
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
>

Patch

diff -r b1b89a0a606d -r a50dbbf2c38b hgext/convert/hg.py
--- a/hgext/convert/hg.py	Tue May 26 13:02:28 2015 -0700
+++ b/hgext/convert/hg.py	Wed May 27 14:28:29 2015 -0500
@@ -128,7 +128,10 @@ 
                 continue
             revid = revmap.get(source.lookuprev(s[0]))
             if not revid:
-                continue
+                if s[0] == hex(nullid):
+                    revid = s[0]
+                else:
+                    continue
             fp.write('%s %s\n' % (revid, s[1]))
         return fp.getvalue()
 
diff -r b1b89a0a606d -r a50dbbf2c38b tests/test-convert-hg-source.t
--- a/tests/test-convert-hg-source.t	Tue May 26 13:02:28 2015 -0700
+++ b/tests/test-convert-hg-source.t	Wed May 27 14:28:29 2015 -0500
@@ -38,6 +38,13 @@ 
   (branch merge, don't forget to commit)
   $ hg ci -m 'merge remote copy' -d '4 0'
   created new head
+
+Make and delete some tags
+
+  $ hg tag that
+  $ hg tag --remove that
+  $ hg tag this
+
 #if execbit
   $ chmod +x baz
 #else
@@ -50,11 +57,14 @@ 
   scanning source...
   sorting...
   converting...
-  5 add foo bar
-  4 change foo
-  3 make bar and baz copies of foo
-  2 merge local copy
-  1 merge remote copy
+  8 add foo bar
+  7 change foo
+  6 make bar and baz copies of foo
+  5 merge local copy
+  4 merge remote copy
+  3 Added tag that for changeset 88586c4e9f02
+  2 Removed tag that
+  1 Added tag this for changeset c56a7f387039
   0 mark baz executable
   updating bookmarks
   $ cd new
@@ -66,12 +76,12 @@ 
 #if execbit
   $ hg bookmarks
      premerge1                 3:973ef48a98a4
-     premerge2                 5:13d9b87cf8f8
+     premerge2                 8:91d107c423ba
 #else
 Different hash because no x bit
   $ hg bookmarks
      premerge1                 3:973ef48a98a4
-     premerge2                 5:df0779bcf33c
+     premerge2                 8:3537b15eaaca
 #endif
   $ cd ..