[PATCH 3 of 3] patchbomb: introduce a 'patchwork.confirm' option

Pierre-Yves David pierre-yves.david at ens-lyon.org
Tue Dec 2 21:12:06 CST 2014


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1417570521 28800
#      Tue Dec 02 17:35:21 2014 -0800
# Node ID 20e66de4913566197f0066f5835086c844deb401
# Parent  d943db1f1f572bf3c01b8ca6b5e728ebc30649aa
patchbomb: introduce a 'patchwork.confirm' option

When set to true, this option will make patchbomb always ask for confirmation
before sending the email. Confirmation is a powerful way to prevent stupid
mistake when the sending patches.

This should let me get ride of my global alias adding
--confirm to hg email.

I know that some people may get bitten when moving from a machine with confirm
configured  to machine where it is not. But I think it is still worth the risk.

diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py
--- a/hgext/patchbomb.py
+++ b/hgext/patchbomb.py
@@ -50,10 +50,13 @@ overwritten by command line flags like -
 
   [patchbomb]
   intro=auto   # include introduction message if more than 1 patch (default)
   intro=never  # never included an introduction message
   intro=always # always include an introduction message
+
+You can set patchbomb to always ask for confirmation by setting
+``patchbomb.confirm`` to true.
 '''
 
 import os, errno, socket, tempfile, cStringIO
 import email
 # On python2.4 you have to import these by name or they fail to
@@ -428,13 +431,14 @@ def patchbomb(ui, repo, *revs, **opts):
     Then when all is done, patchbomb messages are displayed. If the
     PAGER environment variable is set, your pager will be fired up once
     for each patchbomb message, so you can verify everything is alright.
 
     In case email sending fails, you will find a backup of your series
-    introductory message in ``.hg/last-email.txt``. The inclusion the
-    introduction can also be control using the ``patchbomb.intro`` option. (see
-    hg help patchbomb for details)
+    introductory message in ``.hg/last-email.txt``.
+
+    The default behavior of this command can be customized through
+    configuration. (See :hg:`help patchbomb` for details)
 
     Examples::
 
       hg email -r 3000          # send patch 3000 only
       hg email -r 3000 -r 3001  # send patches 3000 and 3001
@@ -551,11 +555,14 @@ def patchbomb(ui, repo, *revs, **opts):
         raise util.Abort(_('no recipient addresses provided'))
     cc = getaddrs('Cc', ask=True, default='') or []
     bcc = getaddrs('Bcc') or []
     replyto = getaddrs('Reply-To')
 
-    if opts.get('diffstat') or opts.get('confirm'):
+    confirm = ui.configbool('patchbomb', 'confirm')
+    confirm |= bool(opts.get('diffstat') or opts.get('confirm'))
+
+    if confirm:
         ui.write(_('\nFinal summary:\n\n'), label='patchbomb.finalsummary')
         ui.write(('From: %s\n' % sender), label='patchbomb.from')
         for addr in showaddrs:
             ui.write('%s\n' % addr, label='patchbomb.to')
         for m, subj, ds in msgs:
diff --git a/tests/test-patchbomb.t b/tests/test-patchbomb.t
--- a/tests/test-patchbomb.t
+++ b/tests/test-patchbomb.t
@@ -84,10 +84,30 @@ Mercurial-patchbomb/.* -> Mercurial-patc
   
   are you sure you want to send (yn)? n
   abort: patchbomb canceled
   [255]
 
+  $ hg --config ui.interactive=1 --config patchbomb.confirm=true email -n -f quux -t foo -c bar -r tip<<EOF
+  > n
+  > EOF
+  this patch series consists of 1 patches.
+  
+  
+  Final summary:
+  
+  From: quux
+  To: foo
+  Cc: bar
+  Subject: [PATCH] a
+   a |  1 +
+   1 files changed, 1 insertions(+), 0 deletions(-)
+  
+  are you sure you want to send (yn)? n
+  abort: patchbomb canceled
+  [255]
+
+
 Test diff.git is respected
   $ hg --config diff.git=True email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -r tip
   this patch series consists of 1 patches.
   
   


More information about the Mercurial-devel mailing list