Mercurial > hg
view tests/test-bugzilla.t @ 33198:36b3febd739f
phabricator: add a contrib script
The default Phabricator client arcanist is not friendly to send a stack of
changesets. It works better when a feature branch is reviewed as a single
review unit. However, we want multiple revisions per feature branch.
To be able to have an `hg email`-like UX to send and receive a stack of
commits easily, it seems we have to re-invent things. This patch adds
`phabricator.py` speaking Conduit API [1] in `contrib` as the first step.
This may also be an option for people who don't want to run PHP.
Config could be done in `hgrc` (instead of `arcrc` or `arcconfig`):
[phabricator]
# API token. Get it from https://phab.mercurial-scm.org/conduit/login/
token = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx
url = https://phab.mercurial-scm.org/
# callsign is used by the next patch
callsign = HG
This patch only adds a single command: `debugcallconduit` to keep the patch
size small. To test it, having the above config, and run:
$ hg debugcallconduit diffusion.repository.search <<EOF
> {"constraints": {"callsigns": ["HG"]}}
> EOF
The result will be printed in prettified JSON format.
[1]: Conduit APIs are listed at https://phab.mercurial-scm.org/conduit/
author | Jun Wu <quark@fb.com> |
---|---|
date | Sun, 02 Jul 2017 20:08:09 -0700 |
parents | 22c53b3a390d |
children | fbfecd1dbfb5 |
line wrap: on
line source
mock bugzilla driver for testing template output: $ cat <<EOF > bzmock.py > from __future__ import absolute_import > from mercurial import extensions > > def extsetup(ui): > bugzilla = extensions.find('bugzilla') > class bzmock(bugzilla.bzaccess): > def __init__(self, ui): > super(bzmock, self).__init__(ui) > self._logfile = ui.config('bugzilla', 'mocklog') > def updatebug(self, bugid, newstate, text, committer): > with open(self._logfile, 'a') as f: > f.write('update bugid=%r, newstate=%r, committer=%r\n' > % (bugid, newstate, committer)) > f.write('----\n' + text + '\n----\n') > def notify(self, bugs, committer): > with open(self._logfile, 'a') as f: > f.write('notify bugs=%r, committer=%r\n' > % (bugs, committer)) > bugzilla.bugzilla._versions['mock'] = bzmock > EOF set up mock repository: $ hg init mockremote $ cat <<EOF > mockremote/.hg/hgrc > [extensions] > bugzilla = > bzmock = $TESTTMP/bzmock.py > > [bugzilla] > version = mock > mocklog = $TESTTMP/bzmock.log > > [hooks] > incoming.bugzilla = python:hgext.bugzilla.hook > > [web] > baseurl=http://example.org/hg > > %include $TESTTMP/bzstyle.hgrc > EOF $ hg clone -q mockremote mocklocal push with default template: $ echo '[bugzilla]' > bzstyle.hgrc $ echo foo > mocklocal/foo $ hg ci -R mocklocal -Aqm 'Fixes bug 123' $ hg -R mocklocal push -q $ cat bzmock.log && rm bzmock.log update bugid=123, newstate={}, committer='test' ---- changeset 7875a8342c6f in repo $TESTTMP/mockremote refers to bug 123. (glob) details: Fixes bug 123 ---- notify bugs={123: {}}, committer='test' push with style: $ cat <<EOF > bzstyle.map > changeset = "{node|short} refers to bug {bug}." > EOF $ echo "style = $TESTTMP/bzstyle.map" >> bzstyle.hgrc $ echo foo >> mocklocal/foo $ hg ci -R mocklocal -qm 'Fixes bug 456' $ hg -R mocklocal push -q $ cat bzmock.log && rm bzmock.log update bugid=456, newstate={}, committer='test' ---- 2808b172464b refers to bug 456. ---- notify bugs={456: {}}, committer='test' push with template (overrides style): $ cat <<EOF >> bzstyle.hgrc > template = Changeset {node|short} in {root|basename}. > {hgweb}/rev/{node|short}\n > {desc} > EOF $ echo foo >> mocklocal/foo $ hg ci -R mocklocal -qm 'Fixes bug 789' $ hg -R mocklocal push -q $ cat bzmock.log && rm bzmock.log update bugid=789, newstate={}, committer='test' ---- Changeset a770f3e409f2 in mockremote. http://example.org/hg/rev/a770f3e409f2 Fixes bug 789 ---- notify bugs={789: {}}, committer='test'