phabricator: add --confirm option to phabsend command
authorPulkit Goyal <7895pulkit@gmail.com>
Thu, 03 Aug 2017 03:09:33 +0530
changeset 33690 40cfe3197bc1
parent 33689 9c27a2891b75
child 33691 1664406a44d9
phabricator: add --confirm option to phabsend command This adds a --confirm flag similar to the confirm flag of `hg email` using which one can confirm the changesets before they get emailed. The confirm flag will show the changesets and ask for confirmation before sending them. Differential Revision: https://phab.mercurial-scm.org/D218
contrib/phabricator.py
--- a/contrib/phabricator.py	Tue Aug 01 18:07:34 2017 +0200
+++ b/contrib/phabricator.py	Thu Aug 03 03:09:33 2017 +0530
@@ -313,7 +313,8 @@
 
 @command('phabsend',
          [('r', 'rev', [], _('revisions to send'), _('REV')),
-          ('', 'reviewer', [], _('specify reviewers'))],
+          ('', 'reviewer', [], _('specify reviewers')),
+          ('', 'confirm', None, _('ask for confirmation before sending'))],
          _('REV [OPTIONS]'))
 def phabsend(ui, repo, *revs, **opts):
     """upload changesets to Phabricator
@@ -326,6 +327,13 @@
     maintain the association. After the first time, phabsend will check
     obsstore and tags information so it can figure out whether to update an
     existing Differential Revision, or create a new one.
+
+    The --confirm option lets you confirm changesets before sending them. You
+    can also add following to your configuration file to make it default
+    behaviour.
+
+    [phabsend]
+    confirm = true
     """
     revs = list(revs) + opts.get('rev', [])
     revs = scmutil.revrange(repo, revs)
@@ -333,6 +341,13 @@
     if not revs:
         raise error.Abort(_('phabsend requires at least one changeset'))
 
+    confirm = ui.configbool('phabsend', 'confirm')
+    confirm |= bool(opts.get('confirm'))
+    if confirm:
+        confirmed = _confirmbeforesend(repo, revs)
+        if not confirmed:
+            raise error.Abort(_('phabsend cancelled'))
+
     actions = []
     reviewers = opts.get('reviewer', [])
     if reviewers:
@@ -379,6 +394,20 @@
 _metanamemap = util.sortdict([(r'user', 'User'), (r'date', 'Date'),
                               (r'node', 'Node ID'), (r'parent', 'Parent ')])
 
+def _confirmbeforesend(repo, revs):
+    ui = repo.ui
+    for rev in revs:
+        ctx = repo[rev]
+        desc = ctx.description().splitlines()[0]
+        ui.write(('%d: ' % rev), label='phabsend.revnumber')
+        ui.write(('%s\n' % desc), label='phabsend.desc')
+
+    if ui.promptchoice(_('Phabsend the above changes (yn)?'
+                            '$$ &Yes $$ &No')):
+        return False
+
+    return True
+
 def querydrev(repo, params, stack=False):
     """return a list of "Differential Revision" dicts