Patchwork D218: phabricator: add --confirm option to phabsend command

login
register
mail settings
Submitter phabricator
Date Aug. 2, 2017, 9:40 p.m.
Message ID <differential-rev-PHID-DREV-lll2lbu4g7tigm5wrs5k-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/22649/
State Superseded
Headers show

Comments

phabricator - Aug. 2, 2017, 9:40 p.m.
pulkit created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  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.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D218

AFFECTED FILES
  contrib/phabricator.py

CHANGE DETAILS




To: pulkit, #hg-reviewers
Cc: mercurial-devel
phabricator - Aug. 4, 2017, 9:35 p.m.
durin42 accepted this revision.
durin42 added a comment.
This revision is now accepted and ready to land.


  Sure.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D218

To: pulkit, #hg-reviewers, durin42
Cc: durin42, mercurial-devel

Patch

diff --git a/contrib/phabricator.py b/contrib/phabricator.py
--- a/contrib/phabricator.py
+++ b/contrib/phabricator.py
@@ -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
@@ -333,6 +334,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 +387,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