Submitter | Denis Laxalde |
---|---|
Date | Oct. 6, 2019, 11:14 a.m. |
Message ID | <bbfd3358c4169aef9837.1570360463@marimba> |
Download | mbox | patch |
Permalink | /patch/42000/ |
State | Accepted |
Headers | show |
Comments
sure, queued > On Oct 6, 2019, at 07:14, Denis Laxalde <denis@laxalde.org> wrote: > > # HG changeset patch > # User Denis Laxalde <denis@laxalde.org> > # Date 1570359979 -7200 > # Sun Oct 06 13:06:19 2019 +0200 > # Node ID bbfd3358c4169aef9837dcd6d72648a16acd56aa > # Parent d0e3c6accb3c176527c8b85e739cf1d30343d96d > import: read X-Mercurial-Node email header to determine nodeid > > This would be useful to import and obsolete patches sent using 'hg email > --plain', using evolve's --obsolete option of 'hg import'. > > If email body contains Mercurial patch header ('# HG changeset patch' > block), nodeid parsed from X-Mercurial-Node header will still be > overridden by respective value found in body. > > diff --git a/mercurial/patch.py b/mercurial/patch.py > index 53cb8a3..db80833 100644 > --- a/mercurial/patch.py > +++ b/mercurial/patch.py > @@ -242,6 +242,11 @@ def _extract(ui, fileobj, tmpname, tmpfp > # should try to parse msg['Date'] > parents = [] > > + nodeid = msg[r'X-Mercurial-Node'] > + if nodeid: > + data['nodeid'] = nodeid = mail.headdecode(nodeid) > + ui.debug('Node ID: %s\n' % nodeid) > + > if subject: > if subject.startswith('[PATCH'): > pend = subject.find(']') > diff --git a/tests/test-import.t b/tests/test-import.t > index e5c2c35..8122d1b 100644 > --- a/tests/test-import.t > +++ b/tests/test-import.t > @@ -237,7 +237,6 @@ import of malformed plain diff should fa > [255] > $ rm -r b > > - > hg -R repo import > put the clone in a subdir - having a directory named "a" > used to hide a bug. > @@ -396,6 +395,48 @@ hg export in email, should use patch hea > summary: second change > $ rm -r b > > +hg email --plain, should read X-Mercurial-Node header > + > + $ cat >> a/.hg/hgrc << EOF > + > [extensions] > + > patchbomb = > + > [email] > + > from = foo > + > cc = foo > + > to = bar > + > EOF > + $ hg --cwd a email -m ../tip-plain.mbox --plain --date '1970-1-1 0:1' tip > + this patch series consists of 1 patches. > + > + > + sending [PATCH] second change ... > + > + $ hg clone -r0 a b -q > + $ hg --cwd b import --debug ../tip-plain.mbox > + applying ../tip-plain.mbox > + Node ID: 1d4bd90af0e43687763d158dfa83ff2a4b6c0c32 > + Subject: second change > + From: foo > + Content-Type: text/plain > + found patch at byte 0 > + message: > + second change > + patching file a > + committing files: > + a > + committing manifest > + committing changelog > + created de620f6fe949 > + updating the branch cache > + $ hg --cwd b tip > + changeset: 1:de620f6fe949 > + tag: tip > + user: foo > + date: Thu Jan 01 00:00:00 1970 +0000 > + summary: second change > + > + $ rm -r b > + > > subject: duplicate detection, removal of [PATCH] > The '---' tests the gitsendmail handling without proper mail headers > _______________________________________________ > Mercurial-devel mailing list > Mercurial-devel@mercurial-scm.org > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Patch
diff --git a/mercurial/patch.py b/mercurial/patch.py index 53cb8a3..db80833 100644 --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -242,6 +242,11 @@ def _extract(ui, fileobj, tmpname, tmpfp # should try to parse msg['Date'] parents = [] + nodeid = msg[r'X-Mercurial-Node'] + if nodeid: + data['nodeid'] = nodeid = mail.headdecode(nodeid) + ui.debug('Node ID: %s\n' % nodeid) + if subject: if subject.startswith('[PATCH'): pend = subject.find(']') diff --git a/tests/test-import.t b/tests/test-import.t index e5c2c35..8122d1b 100644 --- a/tests/test-import.t +++ b/tests/test-import.t @@ -237,7 +237,6 @@ import of malformed plain diff should fa [255] $ rm -r b - hg -R repo import put the clone in a subdir - having a directory named "a" used to hide a bug. @@ -396,6 +395,48 @@ hg export in email, should use patch hea summary: second change $ rm -r b +hg email --plain, should read X-Mercurial-Node header + + $ cat >> a/.hg/hgrc << EOF + > [extensions] + > patchbomb = + > [email] + > from = foo + > cc = foo + > to = bar + > EOF + $ hg --cwd a email -m ../tip-plain.mbox --plain --date '1970-1-1 0:1' tip + this patch series consists of 1 patches. + + + sending [PATCH] second change ... + + $ hg clone -r0 a b -q + $ hg --cwd b import --debug ../tip-plain.mbox + applying ../tip-plain.mbox + Node ID: 1d4bd90af0e43687763d158dfa83ff2a4b6c0c32 + Subject: second change + From: foo + Content-Type: text/plain + found patch at byte 0 + message: + second change + patching file a + committing files: + a + committing manifest + committing changelog + created de620f6fe949 + updating the branch cache + $ hg --cwd b tip + changeset: 1:de620f6fe949 + tag: tip + user: foo + date: Thu Jan 01 00:00:00 1970 +0000 + summary: second change + + $ rm -r b + subject: duplicate detection, removal of [PATCH] The '---' tests the gitsendmail handling without proper mail headers