comparison contrib/phabricator.py @ 33834:6e666cd59879

phabricator: add phabupdate command to update status in batch Changing status (accept, etc) on the webpage is not very convenient - currently there is no way to accept (or abandon etc.) a stack using a single click or command. This patch adds a `phabupdate` command that could be used to change status in batch. It also supports `--comment` which will write a comment on the last revision, which is similar to what we do using emails. Differential Revision: https://phab.mercurial-scm.org/D127
author Jun Wu <quark@fb.com>
date Tue, 18 Jul 2017 02:05:19 -0700
parents fb59192b4981
children 45a8cd74de4e
comparison
equal deleted inserted replaced
33833:fb59192b4981 33834:6e666cd59879
7 """simple Phabricator integration 7 """simple Phabricator integration
8 8
9 This extension provides a ``phabsend`` command which sends a stack of 9 This extension provides a ``phabsend`` command which sends a stack of
10 changesets to Phabricator without amending commit messages, and a ``phabread`` 10 changesets to Phabricator without amending commit messages, and a ``phabread``
11 command which prints a stack of revisions in a format suitable 11 command which prints a stack of revisions in a format suitable
12 for :hg:`import`. 12 for :hg:`import`, and a ``phabupdate`` command to update statuses in batch.
13 13
14 By default, Phabricator requires ``Test Plan`` which might prevent some 14 By default, Phabricator requires ``Test Plan`` which might prevent some
15 changeset from being sent. The requirement could be disabled by changing 15 changeset from being sent. The requirement could be disabled by changing
16 ``differential.require-test-plan-field`` config server side. 16 ``differential.require-test-plan-field`` config server side.
17 17
796 """ 796 """
797 if opts.get('stack'): 797 if opts.get('stack'):
798 spec = ':(%s)' % spec 798 spec = ':(%s)' % spec
799 drevs = querydrev(repo, spec) 799 drevs = querydrev(repo, spec)
800 readpatch(repo, drevs, ui.write) 800 readpatch(repo, drevs, ui.write)
801
802 @command('phabupdate',
803 [('', 'accept', False, _('accept revisions')),
804 ('', 'reject', False, _('reject revisions')),
805 ('', 'abandon', False, _('abandon revisions')),
806 ('', 'reclaim', False, _('reclaim revisions')),
807 ('m', 'comment', '', _('comment on the last revision')),
808 ], _('DREVSPEC [OPTIONS]'))
809 def phabupdate(ui, repo, spec, **opts):
810 """update Differential Revision in batch
811
812 DREVSPEC selects revisions. See :hg:`help phabread` for its usage.
813 """
814 flags = [n for n in 'accept reject abandon reclaim'.split() if opts.get(n)]
815 if len(flags) > 1:
816 raise error.Abort(_('%s cannot be used together') % ', '.join(flags))
817
818 actions = []
819 for f in flags:
820 actions.append({'type': f, 'value': 'true'})
821
822 drevs = querydrev(repo, spec)
823 for i, drev in enumerate(drevs):
824 if i + 1 == len(drevs) and opts.get('comment'):
825 actions.append({'type': 'comment', 'value': opts['comment']})
826 if actions:
827 params = {'objectIdentifier': drev[r'phid'],
828 'transactions': actions}
829 callconduit(repo, 'differential.revision.edit', params)