[PATCH 2 of 2 v2] patchbomb: put diffstat between commit message and patch for --git
Henning Schild
henning at hennsch.de
Wed Nov 16 18:57:26 UTC 2016
# HG changeset patch
# User Henning Schild <henning at hennsch.de>
# Date 1478958881 -3600
# Sat Nov 12 14:54:41 2016 +0100
# Node ID aef597f906d9b282664ed15ee739125e211a92bf
# Parent 9713d11a26da1462629eac6f2d7d76b8b31e6a5f
patchbomb: put diffstat between commit message and patch for --git
When sending patch mails to a git-based project the diffstat should be placed
right under the commit message. This patch makes hg email behave like git
format-patch.
diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py
--- a/hgext/patchbomb.py
+++ b/hgext/patchbomb.py
@@ -140,8 +140,10 @@
desc = []
node = None
body = ''
+ linenr = 0
for line in patchlines:
+ linenr = linenr + 1
if line.startswith('#'):
if line.startswith('# Node ID'):
node = line.split()[-1]
@@ -150,6 +152,16 @@
break
desc.append(line)
+ ds = patch.diffstat(patchlines)
+ if opts.get('diffstat') and opts.get('git'):
+ linenr = linenr - 1
+ if (patchlines[linenr - 1] == ''):
+ linenr = linenr - 1
+ patchlines.pop(linenr)
+ patchlines.insert(linenr, '---')
+ linenr = linenr + 1
+ patchlines.insert(linenr, ds)
+
if not patchname and not node:
raise ValueError
@@ -166,8 +178,7 @@
while patchlines and not patchlines[0].strip():
patchlines.pop(0)
- ds = patch.diffstat(patchlines)
- if opts.get('diffstat'):
+ if opts.get('diffstat') and not opts.get('git'):
body += ds + '\n\n'
addattachment = opts.get('attach') or opts.get('inline')
diff --git a/tests/test-patchbomb.t b/tests/test-patchbomb.t
--- a/tests/test-patchbomb.t
+++ b/tests/test-patchbomb.t
@@ -722,6 +722,57 @@
+c
+test diffstat for single patch for git:
+ $ hg email --git --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y -r 2
+ this patch series consists of 1 patches.
+
+
+ Final summary:
+
+ From: quux
+ To: foo
+ Cc: bar
+ Subject: [PATCH] test
+ c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+ are you sure you want to send (yn)? y
+
+ displaying [PATCH] test ...
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+ Subject: [PATCH] test
+ X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+ X-Mercurial-Series-Index: 1
+ X-Mercurial-Series-Total: 1
+ Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
+ X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
+ User-Agent: Mercurial-patchbomb/* (glob)
+ Date: Thu, 01 Jan 1970 00:01:00 +0000
+ From: quux
+ To: foo
+ Cc: bar
+
+ # HG changeset patch
+ # User test
+ # Date 3 0
+ # Thu Jan 01 00:00:03 1970 +0000
+ # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
+ # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+ c
+ ---
+ c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+ diff --git a/c b/c
+ new file mode 100644
+ --- /dev/null
+ +++ b/c
+ @@ -0,0 +1,1 @@
+ +c
+
+
test diffstat for multiple patches:
$ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y \
> -r 0:1
@@ -839,6 +890,123 @@
+b
+test diffstat for multiple patches for git:
+ $ hg email --git --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d \
+ > -y -r 0:1
+ this patch series consists of 2 patches.
+
+
+ Write the introductory message for the patch series.
+
+
+ Final summary:
+
+ From: quux
+ To: foo
+ Cc: bar
+ Subject: [PATCH 0 of 2] test
+ a | 1 +
+ b | 1 +
+ 2 files changed, 2 insertions(+), 0 deletions(-)
+ Subject: [PATCH 1 of 2] a
+ a | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+ Subject: [PATCH 2 of 2] b
+ b | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+ are you sure you want to send (yn)? y
+
+ displaying [PATCH 0 of 2] test ...
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+ Subject: [PATCH 0 of 2] test
+ Message-Id: <patchbomb.60@*> (glob)
+ User-Agent: Mercurial-patchbomb/* (glob)
+ Date: Thu, 01 Jan 1970 00:01:00 +0000
+ From: quux
+ To: foo
+ Cc: bar
+
+
+ a | 1 +
+ b | 1 +
+ 2 files changed, 2 insertions(+), 0 deletions(-)
+
+ displaying [PATCH 1 of 2] a ...
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+ Subject: [PATCH 1 of 2] a
+ X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+ X-Mercurial-Series-Index: 1
+ X-Mercurial-Series-Total: 2
+ Message-Id: <8580ff50825a50c8f716.61@*> (glob)
+ X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
+ In-Reply-To: <patchbomb.60@*> (glob)
+ References: <patchbomb.60@*> (glob)
+ User-Agent: Mercurial-patchbomb/* (glob)
+ Date: Thu, 01 Jan 1970 00:01:01 +0000
+ From: quux
+ To: foo
+ Cc: bar
+
+ # HG changeset patch
+ # User test
+ # Date 1 0
+ # Thu Jan 01 00:00:01 1970 +0000
+ # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
+ # Parent 0000000000000000000000000000000000000000
+ a
+ ---
+ a | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+ diff --git a/a b/a
+ new file mode 100644
+ --- /dev/null
+ +++ b/a
+ @@ -0,0 +1,1 @@
+ +a
+
+ displaying [PATCH 2 of 2] b ...
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+ Subject: [PATCH 2 of 2] b
+ X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+ X-Mercurial-Series-Index: 2
+ X-Mercurial-Series-Total: 2
+ Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
+ X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
+ In-Reply-To: <patchbomb.60@*> (glob)
+ References: <patchbomb.60@*> (glob)
+ User-Agent: Mercurial-patchbomb/* (glob)
+ Date: Thu, 01 Jan 1970 00:01:02 +0000
+ From: quux
+ To: foo
+ Cc: bar
+
+ # HG changeset patch
+ # User test
+ # Date 2 0
+ # Thu Jan 01 00:00:02 1970 +0000
+ # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+ # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
+ b
+ ---
+ b | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+ diff --git a/b b/b
+ new file mode 100644
+ --- /dev/null
+ +++ b/b
+ @@ -0,0 +1,1 @@
+ +b
+
+
test inline for single patch:
$ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | $FILTERBOUNDARY
this patch series consists of 1 patches.
More information about the Mercurial-devel
mailing list