git-remote-hg
git-remote-hg copied to clipboard
Incompatibility with hg-git 0.8 version due to rename detection
[ see also felipec/git#35 ]
hg-git recently added file rename detection. In particular, they add a mercurial "extra" field where they record the "source" of renames, and this new field ("hg-git-rename-source=git") break things.
Note that Mercurial 3.3 is incompatible with hg-git 0.7.0, and so once hg 3.3 is out, one will have to use it with hg-git newer than 0.7.0, which in turn means git-remote-hg users may run into this issue.
Relevant hg-git commit: https://bitbucket.org/durin42/hg-git/commits/fffe8883960b7c45e0dfe597f3b79bd1f4824cbe
Typical diff (from first hg-git test, "executable bit")
--- output-hg 2015-01-13 15:46:17.000000000 +0000
+++ output-git 2015-01-13 15:46:18.000000000 +0000
@@ -1,8 +1,8 @@
-@ changeset: 2:04585efb2d7e9262381ab791282b68ceb33398d0
+@ changeset: 2:1efb93106a36bf71352ab04e769a3422522cf946
| bookmark: master
| tag: tip
| phase: draft
-| parent: 1:9d3aaf34d914c50354fbcca3a0c309351f159546
+| parent: 1:d7cae8b1fdab97568ba5eca44ca2bf5a44d7c394
| parent: -1:0000000000000000000000000000000000000000
| manifest: 2:51e6255d794f794a8c4e0f03edf264444e3c5ce7
| user: A U Thor <[email protected]>
@@ -10,14 +10,13 @@
| files: alpha
| extra: branch=default
| extra: committer=C O Mitter <[email protected]> 1167600600 -9000
-| extra: hg-git-rename-source=git
| description:
| clear executable bit
|
|
-o changeset: 1:9d3aaf34d914c50354fbcca3a0c309351f159546
+o changeset: 1:d7cae8b1fdab97568ba5eca44ca2bf5a44d7c394
| phase: draft
-| parent: 0:97e0f86af84c927e56ac1e6159b5b2386ac3e110
+| parent: 0:362b656574c3c9e89fa7f2d7a943091dc93bce4d
| parent: -1:0000000000000000000000000000000000000000
| manifest: 1:e4bf4ef5e9aea7a6a57573e533a5519bd062f144
| user: A U Thor <[email protected]>
@@ -25,12 +24,11 @@
| files: alpha
| extra: branch=default
| extra: committer=C O Mitter <[email protected]> 1167600600 -9000
-| extra: hg-git-rename-source=git
| description:
| set executable bit
|
|
-o changeset: 0:97e0f86af84c927e56ac1e6159b5b2386ac3e110
+o changeset: 0:362b656574c3c9e89fa7f2d7a943091dc93bce4d
phase: draft
parent: -1:0000000000000000000000000000000000000000
parent: -1:0000000000000000000000000000000000000000
@@ -40,7 +38,6 @@
files+: alpha
extra: branch=default
extra: committer=C O Mitter <[email protected]> 1167600600 -9000
- extra: hg-git-rename-source=git
description:
add alpha
In case it helps (probably not): The following naive and brainless patch (i.e. made without actually thinking about the issue) is, not surprisingly, not helping much. It causes some tests to pass, but causes issues in others.
diff --git a/git-remote-hg b/git-remote-hg
index 0d903e3..6900499 100755
--- a/git-remote-hg
+++ b/git-remote-hg
@@ -538,7 +538,8 @@ def export_ref(repo, name, kind, head):
extra_msg += "rename : %s => %s\n" % e
for key, value in extra.iteritems():
- if key in ('author', 'committer', 'encoding', 'message', 'branch', 'hg-git'):
+ if key in ('author', 'committer', 'encoding', 'message', 'branch',
+ 'hg-git', 'hg-git-rename-source'):
continue
else:
extra_msg += "extra : %s : %s\n" % (key, urllib.quote(value))
@@ -870,6 +871,9 @@ def parse_commit(parser):
extra[ek] = urllib.unquote(ev)
data = data[:i]
+ if 'hg-git-rename-source' not in extra:
+ extra['hg-git-rename-source'] = 'git' # HACK
+
ctx = context.memctx(repo, (p1, p2), data,
files.keys(), getfilectx,
user, (date, tz), extra)