Mercurial > hg
annotate hgext/phabricator.py @ 45685:57b5452a55d5
pyoxidizer: produce working Python 3 Windows installers (issue6366)
While we've had code to produce Python 3 Windows installers with
PyOxidizer, we haven't been advertising them on the web site due to
a bug in making TLS connections and issues around resource handling.
This commit upgrades our PyOxidizer install and configuration to
use a recent Git commit of PyOxidizer. This new version of PyOxidizer
contains a *ton* of changes, improvements, and bug fixes. Notably,
Windows shared distributions now mostly "just work" and the TLS bug
and random problems with Python extension modules in the standard
library go away. And Python has been upgraded from 3.7 to 3.8.6.
The price we pay for this upgrade is a ton of backwards incompatible
changes to Starlark.
I applied this commit (the overall series actually) on stable to
produce Windows installers for Mercurial 5.5.2, which I published
shortly before submitting this commit for review.
In order to get the stable branch working, I decided to take a
less aggressive approach to Python resource management. Previously,
we were attempting to load all Python modules from memory and were
performing some hacks to copy Mercurial's non-module resources
into additional directories in Starlark. This commit implements
a resource callback function in Starlark (a new feature since
PyOxidizer 0.7) to dynamically assign standard library resources
to in-memory loading and all other resources to filesystem loading.
This means that Mercurial's files and all the other packages we ship
in the Windows installers (e.g. certifi and pygments) are loaded
from the filesystem instead of from memory. This avoids issues
due to lack of __file__ and enables us to ship a working Python
3 installer on Windows.
The end state of the install layout after this patch is not
ideal for @: we still copy resource files like templates and
help text to directories next to the hg.exe executable. There
is code in @ to use importlib.resources to load these files and
we could likely remove these copies once this lands on @. But for
now, the install layout mimics what we've shipped for seemingly
forever and is backwards compatible. It allows us to achieve the
milestone of working Python 3 Windows installers and gets us a
giant step closer to deleting Python 2.
Differential Revision: https://phab.mercurial-scm.org/D9148
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 04 Oct 2020 22:32:41 -0700 |
parents | c7fe0dfb5312 |
children | 294aab57a5f3 |
rev | line source |
---|---|
33198 | 1 # phabricator.py - simple Phabricator integration |
2 # | |
3 # Copyright 2017 Facebook, Inc. | |
4 # | |
5 # This software may be used and distributed according to the terms of the | |
6 # GNU General Public License version 2 or any later version. | |
39655
87539f615b87
phabricator: mark extension as experimental for now
Augie Fackler <raf@durin42.com>
parents:
39654
diff
changeset
|
7 """simple Phabricator integration (EXPERIMENTAL) |
33198 | 8 |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
9 This extension provides a ``phabsend`` command which sends a stack of |
33975 | 10 changesets to Phabricator, and a ``phabread`` command which prints a stack of |
11 revisions in a format suitable for :hg:`import`, and a ``phabupdate`` command | |
12 to update statuses in batch. | |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
13 |
43839
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
14 A "phabstatus" view for :hg:`show` is also provided; it displays status |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
15 information of Phabricator differentials associated with unfinished |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
16 changesets. |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
17 |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
18 By default, Phabricator requires ``Test Plan`` which might prevent some |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
19 changeset from being sent. The requirement could be disabled by changing |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
20 ``differential.require-test-plan-field`` config server side. |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
21 |
33198 | 22 Config:: |
23 | |
24 [phabricator] | |
25 # Phabricator URL | |
26 url = https://phab.example.com/ | |
27 | |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
28 # Repo callsign. If a repo has a URL https://$HOST/diffusion/FOO, then its |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
29 # callsign is "FOO". |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
30 callsign = FOO |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
31 |
34064
8b659b7388c0
phabricator: add a config to use curl for communication
Jun Wu <quark@fb.com>
parents:
34063
diff
changeset
|
32 # curl command to use. If not set (default), use builtin HTTP library to |
8b659b7388c0
phabricator: add a config to use curl for communication
Jun Wu <quark@fb.com>
parents:
34063
diff
changeset
|
33 # communicate. If set, use the specified curl command. This could be useful |
8b659b7388c0
phabricator: add a config to use curl for communication
Jun Wu <quark@fb.com>
parents:
34063
diff
changeset
|
34 # if you need to specify advanced options that is not easily supported by |
8b659b7388c0
phabricator: add a config to use curl for communication
Jun Wu <quark@fb.com>
parents:
34063
diff
changeset
|
35 # the internal library. |
8b659b7388c0
phabricator: add a config to use curl for communication
Jun Wu <quark@fb.com>
parents:
34063
diff
changeset
|
36 curlcmd = curl --connect-timeout 2 --retry 3 --silent |
36787
4397909f82d3
phabricator: specify API tokens per host, rather than per repo
Tom Prince <mozilla@hocat.ca>
parents:
36514
diff
changeset
|
37 |
37996
0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
Matt Harbison <matt_harbison@yahoo.com>
parents:
37976
diff
changeset
|
38 [auth] |
37997
71cf20d47f25
phabricator: split auth.url into the standard auth.schemes and auth.prefix
Matt Harbison <matt_harbison@yahoo.com>
parents:
37996
diff
changeset
|
39 example.schemes = https |
71cf20d47f25
phabricator: split auth.url into the standard auth.schemes and auth.prefix
Matt Harbison <matt_harbison@yahoo.com>
parents:
37996
diff
changeset
|
40 example.prefix = phab.example.com |
71cf20d47f25
phabricator: split auth.url into the standard auth.schemes and auth.prefix
Matt Harbison <matt_harbison@yahoo.com>
parents:
37996
diff
changeset
|
41 |
36787
4397909f82d3
phabricator: specify API tokens per host, rather than per repo
Tom Prince <mozilla@hocat.ca>
parents:
36514
diff
changeset
|
42 # API token. Get it from https://$HOST/conduit/login/ |
37996
0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
Matt Harbison <matt_harbison@yahoo.com>
parents:
37976
diff
changeset
|
43 example.phabtoken = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx |
33198 | 44 """ |
45 | |
46 from __future__ import absolute_import | |
47 | |
43187
453079605242
phabricator: add the uploadchunks function
Ian Moody <moz-ian@perix.co.uk>
parents:
43186
diff
changeset
|
48 import base64 |
41080
9d35ae3d9999
phabricator: ensure that the return of urlopener.open() is closed
Matt Harbison <matt_harbison@yahoo.com>
parents:
41078
diff
changeset
|
49 import contextlib |
43188
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
50 import hashlib |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
51 import itertools |
33198 | 52 import json |
43189
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
53 import mimetypes |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
54 import operator |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
55 import re |
33198 | 56 |
44715
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
57 from mercurial.node import bin, nullid, short |
33198 | 58 from mercurial.i18n import _ |
43089
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43080
diff
changeset
|
59 from mercurial.pycompat import getattr |
43183
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
60 from mercurial.thirdparty import attr |
33198 | 61 from mercurial import ( |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
62 cmdutil, |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
63 context, |
44610
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
64 copies, |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
65 encoding, |
33198 | 66 error, |
42973
24bf7a3d3c30
phabricator: use exthelper to register commands, config, and templates
Matt Harbison <matt_harbison@yahoo.com>
parents:
42951
diff
changeset
|
67 exthelper, |
43839
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
68 graphmod, |
37997
71cf20d47f25
phabricator: split auth.url into the standard auth.schemes and auth.prefix
Matt Harbison <matt_harbison@yahoo.com>
parents:
37996
diff
changeset
|
69 httpconnection as httpconnectionmod, |
44127
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
70 localrepo, |
43839
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
71 logcmdutil, |
43186
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
72 match, |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
73 mdiff, |
33735
e6d8ee3c9ec3
obsutil: rename allprecursors into allpredecessors
Boris Feld <boris.feld@octobus.net>
parents:
33692
diff
changeset
|
74 obsutil, |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
75 parser, |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
76 patch, |
41163
0101a35deae2
phabricator: warn if unable to amend, instead of aborting after posting
Matt Harbison <matt_harbison@yahoo.com>
parents:
41080
diff
changeset
|
77 phases, |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
78 pycompat, |
45426
1a5d3e555c70
phabricator: update the hashes in commit messages as they get submitted
Matt Harbison <matt_harbison@yahoo.com>
parents:
45246
diff
changeset
|
79 rewriteutil, |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
80 scmutil, |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
81 smartset, |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
82 tags, |
42188
289d82a070e9
phabricator: use templatefilters.json in writediffproperties
Ian Moody <moz-ian@perix.co.uk>
parents:
41971
diff
changeset
|
83 templatefilters, |
39654
4057e38bba76
phabricator: fix templating bug by using hybriddict
Augie Fackler <raf@durin42.com>
parents:
39652
diff
changeset
|
84 templateutil, |
33198 | 85 url as urlmod, |
86 util, | |
87 ) | |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36818
diff
changeset
|
88 from mercurial.utils import ( |
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36818
diff
changeset
|
89 procutil, |
37800
6cf5f5b4eb57
phabricator: specify some metadata compatibly with arc
Tom Prince <mozilla@hocat.ca>
parents:
37120
diff
changeset
|
90 stringutil, |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36818
diff
changeset
|
91 ) |
43839
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
92 from . import show |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
93 |
33198 | 94 |
39735
c0c703861b60
phabricator: add testedwith boilerplate
Yuya Nishihara <yuya@tcha.org>
parents:
39655
diff
changeset
|
95 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
c0c703861b60
phabricator: add testedwith boilerplate
Yuya Nishihara <yuya@tcha.org>
parents:
39655
diff
changeset
|
96 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
c0c703861b60
phabricator: add testedwith boilerplate
Yuya Nishihara <yuya@tcha.org>
parents:
39655
diff
changeset
|
97 # be specifying the version(s) of Mercurial they are tested with, or |
c0c703861b60
phabricator: add testedwith boilerplate
Yuya Nishihara <yuya@tcha.org>
parents:
39655
diff
changeset
|
98 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
99 testedwith = b'ships-with-hg-core' |
39735
c0c703861b60
phabricator: add testedwith boilerplate
Yuya Nishihara <yuya@tcha.org>
parents:
39655
diff
changeset
|
100 |
42973
24bf7a3d3c30
phabricator: use exthelper to register commands, config, and templates
Matt Harbison <matt_harbison@yahoo.com>
parents:
42951
diff
changeset
|
101 eh = exthelper.exthelper() |
33198 | 102 |
42973
24bf7a3d3c30
phabricator: use exthelper to register commands, config, and templates
Matt Harbison <matt_harbison@yahoo.com>
parents:
42951
diff
changeset
|
103 cmdtable = eh.cmdtable |
24bf7a3d3c30
phabricator: use exthelper to register commands, config, and templates
Matt Harbison <matt_harbison@yahoo.com>
parents:
42951
diff
changeset
|
104 command = eh.command |
24bf7a3d3c30
phabricator: use exthelper to register commands, config, and templates
Matt Harbison <matt_harbison@yahoo.com>
parents:
42951
diff
changeset
|
105 configtable = eh.configtable |
24bf7a3d3c30
phabricator: use exthelper to register commands, config, and templates
Matt Harbison <matt_harbison@yahoo.com>
parents:
42951
diff
changeset
|
106 templatekeyword = eh.templatekeyword |
44127
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
107 uisetup = eh.finaluisetup |
38042
5a7cf42ba6ef
phabricator: register config settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
37997
diff
changeset
|
108 |
5a7cf42ba6ef
phabricator: register config settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
37997
diff
changeset
|
109 # developer config: phabricator.batchsize |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
110 eh.configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
111 b'phabricator', b'batchsize', default=12, |
38042
5a7cf42ba6ef
phabricator: register config settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
37997
diff
changeset
|
112 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
113 eh.configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
114 b'phabricator', b'callsign', default=None, |
38042
5a7cf42ba6ef
phabricator: register config settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
37997
diff
changeset
|
115 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
116 eh.configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
117 b'phabricator', b'curlcmd', default=None, |
38042
5a7cf42ba6ef
phabricator: register config settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
37997
diff
changeset
|
118 ) |
44715
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
119 # developer config: phabricator.debug |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
120 eh.configitem( |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
121 b'phabricator', b'debug', default=False, |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
122 ) |
38042
5a7cf42ba6ef
phabricator: register config settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
37997
diff
changeset
|
123 # developer config: phabricator.repophid |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
124 eh.configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
125 b'phabricator', b'repophid', default=None, |
38042
5a7cf42ba6ef
phabricator: register config settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
37997
diff
changeset
|
126 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
127 eh.configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
128 b'phabricator', b'url', default=None, |
38042
5a7cf42ba6ef
phabricator: register config settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
37997
diff
changeset
|
129 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
130 eh.configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
131 b'phabsend', b'confirm', default=False, |
38042
5a7cf42ba6ef
phabricator: register config settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
37997
diff
changeset
|
132 ) |
44551
9bae1d1a0f4c
phabricator: add a config knob to import in the secret phase
Matt Harbison <matt_harbison@yahoo.com>
parents:
44550
diff
changeset
|
133 eh.configitem( |
9bae1d1a0f4c
phabricator: add a config knob to import in the secret phase
Matt Harbison <matt_harbison@yahoo.com>
parents:
44550
diff
changeset
|
134 b'phabimport', b'secret', default=False, |
9bae1d1a0f4c
phabricator: add a config knob to import in the secret phase
Matt Harbison <matt_harbison@yahoo.com>
parents:
44550
diff
changeset
|
135 ) |
44552
f10055b099b3
phabricator: add a config knob to create obsolete markers when importing
Matt Harbison <matt_harbison@yahoo.com>
parents:
44551
diff
changeset
|
136 eh.configitem( |
f10055b099b3
phabricator: add a config knob to create obsolete markers when importing
Matt Harbison <matt_harbison@yahoo.com>
parents:
44551
diff
changeset
|
137 b'phabimport', b'obsolete', default=False, |
f10055b099b3
phabricator: add a config knob to create obsolete markers when importing
Matt Harbison <matt_harbison@yahoo.com>
parents:
44551
diff
changeset
|
138 ) |
38042
5a7cf42ba6ef
phabricator: register config settings
Matt Harbison <matt_harbison@yahoo.com>
parents:
37997
diff
changeset
|
139 |
34063 | 140 colortable = { |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
141 b'phabricator.action.created': b'green', |
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
142 b'phabricator.action.skipped': b'magenta', |
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
143 b'phabricator.action.updated': b'magenta', |
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
144 b'phabricator.desc': b'', |
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
145 b'phabricator.drev': b'bold', |
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
146 b'phabricator.node': b'', |
43858
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
147 b'phabricator.status.abandoned': b'magenta dim', |
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
148 b'phabricator.status.accepted': b'green bold', |
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
149 b'phabricator.status.closed': b'green', |
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
150 b'phabricator.status.needsreview': b'yellow', |
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
151 b'phabricator.status.needsrevision': b'red', |
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
152 b'phabricator.status.changesplanned': b'red', |
34063 | 153 } |
154 | |
39650
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
155 _VCR_FLAGS = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
156 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
157 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
158 b'test-vcr', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
159 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
160 _( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
161 b'Path to a vcr file. If nonexistent, will record a new vcr transcript' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
162 b', otherwise will mock all http requests using the specified vcr file.' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
163 b' (ADVANCED)' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
164 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
165 ), |
39650
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
166 ] |
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
167 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
168 |
44127
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
169 @eh.wrapfunction(localrepo, "loadhgrc") |
45502
c7fe0dfb5312
phabricator: fix loadhgrc() override broken by D8656
Martin von Zweigbergk <martinvonz@google.com>
parents:
45485
diff
changeset
|
170 def _loadhgrc(orig, ui, wdirvfs, hgvfs, requirements, *args, **opts): |
44127
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
171 """Load ``.arcconfig`` content into a ui instance on repository open. |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
172 """ |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
173 result = False |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
174 arcconfig = {} |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
175 |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
176 try: |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
177 # json.loads only accepts bytes from 3.6+ |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
178 rawparams = encoding.unifromlocal(wdirvfs.read(b".arcconfig")) |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
179 # json.loads only returns unicode strings |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
180 arcconfig = pycompat.rapply( |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
181 lambda x: encoding.unitolocal(x) |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
182 if isinstance(x, pycompat.unicode) |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
183 else x, |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
184 pycompat.json_loads(rawparams), |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
185 ) |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
186 |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
187 result = True |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
188 except ValueError: |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
189 ui.warn(_(b"invalid JSON in %s\n") % wdirvfs.join(b".arcconfig")) |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
190 except IOError: |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
191 pass |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
192 |
44128
ff396501e841
phabricator: use .arcconfig for `phabricator.url` if not set locally
Matt Harbison <matt_harbison@yahoo.com>
parents:
44127
diff
changeset
|
193 cfg = util.sortdict() |
ff396501e841
phabricator: use .arcconfig for `phabricator.url` if not set locally
Matt Harbison <matt_harbison@yahoo.com>
parents:
44127
diff
changeset
|
194 |
44127
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
195 if b"repository.callsign" in arcconfig: |
44128
ff396501e841
phabricator: use .arcconfig for `phabricator.url` if not set locally
Matt Harbison <matt_harbison@yahoo.com>
parents:
44127
diff
changeset
|
196 cfg[(b"phabricator", b"callsign")] = arcconfig[b"repository.callsign"] |
ff396501e841
phabricator: use .arcconfig for `phabricator.url` if not set locally
Matt Harbison <matt_harbison@yahoo.com>
parents:
44127
diff
changeset
|
197 |
ff396501e841
phabricator: use .arcconfig for `phabricator.url` if not set locally
Matt Harbison <matt_harbison@yahoo.com>
parents:
44127
diff
changeset
|
198 if b"phabricator.uri" in arcconfig: |
ff396501e841
phabricator: use .arcconfig for `phabricator.url` if not set locally
Matt Harbison <matt_harbison@yahoo.com>
parents:
44127
diff
changeset
|
199 cfg[(b"phabricator", b"url")] = arcconfig[b"phabricator.uri"] |
ff396501e841
phabricator: use .arcconfig for `phabricator.url` if not set locally
Matt Harbison <matt_harbison@yahoo.com>
parents:
44127
diff
changeset
|
200 |
ff396501e841
phabricator: use .arcconfig for `phabricator.url` if not set locally
Matt Harbison <matt_harbison@yahoo.com>
parents:
44127
diff
changeset
|
201 if cfg: |
ff396501e841
phabricator: use .arcconfig for `phabricator.url` if not set locally
Matt Harbison <matt_harbison@yahoo.com>
parents:
44127
diff
changeset
|
202 ui.applyconfig(cfg, source=wdirvfs.join(b".arcconfig")) |
44127
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
203 |
45485
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45426
diff
changeset
|
204 return ( |
45502
c7fe0dfb5312
phabricator: fix loadhgrc() override broken by D8656
Martin von Zweigbergk <martinvonz@google.com>
parents:
45485
diff
changeset
|
205 orig(ui, wdirvfs, hgvfs, requirements, *args, **opts) or result |
45485
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45426
diff
changeset
|
206 ) # Load .hg/hgrc |
44127
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
207 |
59b3fe1e2021
phabricator: use .arcconfig for the callsign if not set locally (issue6243)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44076
diff
changeset
|
208 |
42435
16312ea45a8b
phabricator: make `hg debugcallconduit` work outside a hg repo
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42434
diff
changeset
|
209 def vcrcommand(name, flags, spec, helpcategory=None, optionalrepo=False): |
39650
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
210 fullflags = flags + _VCR_FLAGS |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
211 |
42268
af13e2088f77
phabricator: add custom vcr matcher to match request bodies
Ian Moody <moz-ian@perix.co.uk>
parents:
42258
diff
changeset
|
212 def hgmatcher(r1, r2): |
af13e2088f77
phabricator: add custom vcr matcher to match request bodies
Ian Moody <moz-ian@perix.co.uk>
parents:
42258
diff
changeset
|
213 if r1.uri != r2.uri or r1.method != r2.method: |
af13e2088f77
phabricator: add custom vcr matcher to match request bodies
Ian Moody <moz-ian@perix.co.uk>
parents:
42258
diff
changeset
|
214 return False |
43264
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
215 r1params = util.urlreq.parseqs(r1.body) |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
216 r2params = util.urlreq.parseqs(r2.body) |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
217 for key in r1params: |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
218 if key not in r2params: |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
219 return False |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
220 value = r1params[key][0] |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
221 # we want to compare json payloads without worrying about ordering |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
222 if value.startswith(b'{') and value.endswith(b'}'): |
43380
579672b347d2
py3: define and use json.loads polyfill
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43350
diff
changeset
|
223 r1json = pycompat.json_loads(value) |
579672b347d2
py3: define and use json.loads polyfill
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43350
diff
changeset
|
224 r2json = pycompat.json_loads(r2params[key][0]) |
43264
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
225 if r1json != r2json: |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
226 return False |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
227 elif r2params[key][0] != value: |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
228 return False |
a4da1c3b82ab
phabricator: update hgmatcher to cope with the new data format
Ian Moody <moz-ian@perix.co.uk>
parents:
43263
diff
changeset
|
229 return True |
42268
af13e2088f77
phabricator: add custom vcr matcher to match request bodies
Ian Moody <moz-ian@perix.co.uk>
parents:
42258
diff
changeset
|
230 |
42443
d3c81439e2ee
phabricator: auto-sanitise API tokens and HTTP cookies from VCR recordings
Ian Moody <moz-ian@perix.co.uk>
parents:
42435
diff
changeset
|
231 def sanitiserequest(request): |
d3c81439e2ee
phabricator: auto-sanitise API tokens and HTTP cookies from VCR recordings
Ian Moody <moz-ian@perix.co.uk>
parents:
42435
diff
changeset
|
232 request.body = re.sub( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
233 br'cli-[a-z0-9]+', br'cli-hahayouwish', request.body |
42443
d3c81439e2ee
phabricator: auto-sanitise API tokens and HTTP cookies from VCR recordings
Ian Moody <moz-ian@perix.co.uk>
parents:
42435
diff
changeset
|
234 ) |
d3c81439e2ee
phabricator: auto-sanitise API tokens and HTTP cookies from VCR recordings
Ian Moody <moz-ian@perix.co.uk>
parents:
42435
diff
changeset
|
235 return request |
d3c81439e2ee
phabricator: auto-sanitise API tokens and HTTP cookies from VCR recordings
Ian Moody <moz-ian@perix.co.uk>
parents:
42435
diff
changeset
|
236 |
d3c81439e2ee
phabricator: auto-sanitise API tokens and HTTP cookies from VCR recordings
Ian Moody <moz-ian@perix.co.uk>
parents:
42435
diff
changeset
|
237 def sanitiseresponse(response): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43504
diff
changeset
|
238 if 'set-cookie' in response['headers']: |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43504
diff
changeset
|
239 del response['headers']['set-cookie'] |
42443
d3c81439e2ee
phabricator: auto-sanitise API tokens and HTTP cookies from VCR recordings
Ian Moody <moz-ian@perix.co.uk>
parents:
42435
diff
changeset
|
240 return response |
d3c81439e2ee
phabricator: auto-sanitise API tokens and HTTP cookies from VCR recordings
Ian Moody <moz-ian@perix.co.uk>
parents:
42435
diff
changeset
|
241 |
39650
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
242 def decorate(fn): |
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
243 def inner(*args, **kwargs): |
45246
b1f2659c1c34
phabricator: unconditionally pop `test_vcr` to fix debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
45152
diff
changeset
|
244 vcr = kwargs.pop('test_vcr') |
b1f2659c1c34
phabricator: unconditionally pop `test_vcr` to fix debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
45152
diff
changeset
|
245 if vcr: |
b1f2659c1c34
phabricator: unconditionally pop `test_vcr` to fix debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
45152
diff
changeset
|
246 cassette = pycompat.fsdecode(vcr) |
39650
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
247 import hgdemandimport |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
248 |
39650
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
249 with hgdemandimport.deactivated(): |
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
250 import vcr as vcrmod |
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
251 import vcr.stubs as stubs |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
252 |
40378
b015f30a91fb
phabricator: do more of the VCR work in demandimport.deactivated()
Augie Fackler <augie@google.com>
parents:
40151
diff
changeset
|
253 vcr = vcrmod.VCR( |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43504
diff
changeset
|
254 serializer='json', |
42443
d3c81439e2ee
phabricator: auto-sanitise API tokens and HTTP cookies from VCR recordings
Ian Moody <moz-ian@perix.co.uk>
parents:
42435
diff
changeset
|
255 before_record_request=sanitiserequest, |
d3c81439e2ee
phabricator: auto-sanitise API tokens and HTTP cookies from VCR recordings
Ian Moody <moz-ian@perix.co.uk>
parents:
42435
diff
changeset
|
256 before_record_response=sanitiseresponse, |
40378
b015f30a91fb
phabricator: do more of the VCR work in demandimport.deactivated()
Augie Fackler <augie@google.com>
parents:
40151
diff
changeset
|
257 custom_patches=[ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
258 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
259 urlmod, |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43504
diff
changeset
|
260 'httpconnection', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
261 stubs.VCRHTTPConnection, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
262 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
263 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
264 urlmod, |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43504
diff
changeset
|
265 'httpsconnection', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
266 stubs.VCRHTTPSConnection, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
267 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
268 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
269 ) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43504
diff
changeset
|
270 vcr.register_matcher('hgmatcher', hgmatcher) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43504
diff
changeset
|
271 with vcr.use_cassette(cassette, match_on=['hgmatcher']): |
40378
b015f30a91fb
phabricator: do more of the VCR work in demandimport.deactivated()
Augie Fackler <augie@google.com>
parents:
40151
diff
changeset
|
272 return fn(*args, **kwargs) |
39650
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
273 return fn(*args, **kwargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
274 |
44436
09f3e003fc2a
phabricator: avoid a stacktrace when command arguments are missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
44427
diff
changeset
|
275 cmd = util.checksignature(inner, depth=2) |
09f3e003fc2a
phabricator: avoid a stacktrace when command arguments are missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
44427
diff
changeset
|
276 cmd.__name__ = fn.__name__ |
09f3e003fc2a
phabricator: avoid a stacktrace when command arguments are missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
44427
diff
changeset
|
277 cmd.__doc__ = fn.__doc__ |
09f3e003fc2a
phabricator: avoid a stacktrace when command arguments are missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
44427
diff
changeset
|
278 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
279 return command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
280 name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
281 fullflags, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
282 spec, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
283 helpcategory=helpcategory, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
284 optionalrepo=optionalrepo, |
44436
09f3e003fc2a
phabricator: avoid a stacktrace when command arguments are missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
44427
diff
changeset
|
285 )(cmd) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
286 |
39650
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
287 return decorate |
d8f07b16abfc
phabricator: add support for using the vcr library to mock interactions
Augie Fackler <raf@durin42.com>
parents:
38945
diff
changeset
|
288 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
289 |
44715
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
290 def _debug(ui, *msg, **opts): |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
291 """write debug output for Phabricator if ``phabricator.debug`` is set |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
292 |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
293 Specifically, this avoids dumping Conduit and HTTP auth chatter that is |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
294 printed with the --debug argument. |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
295 """ |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
296 if ui.configbool(b"phabricator", b"debug"): |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
297 flag = ui.debugflag |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
298 try: |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
299 ui.debugflag = True |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
300 ui.write(*msg, **opts) |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
301 finally: |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
302 ui.debugflag = flag |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
303 |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
304 |
33198 | 305 def urlencodenested(params): |
306 """like urlencode, but works with nested parameters. | |
307 | |
308 For example, if params is {'a': ['b', 'c'], 'd': {'e': 'f'}}, it will be | |
309 flattened to {'a[0]': 'b', 'a[1]': 'c', 'd[e]': 'f'} and then passed to | |
310 urlencode. Note: the encoding is consistent with PHP's http_build_query. | |
311 """ | |
312 flatparams = util.sortdict() | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
313 |
33198 | 314 def process(prefix, obj): |
41017
d7d3164e6a31
phabricator: properly encode boolean types in the request body
Matt Harbison <matt_harbison@yahoo.com>
parents:
40546
diff
changeset
|
315 if isinstance(obj, bool): |
d7d3164e6a31
phabricator: properly encode boolean types in the request body
Matt Harbison <matt_harbison@yahoo.com>
parents:
40546
diff
changeset
|
316 obj = {True: b'true', False: b'false'}[obj] # Python -> PHP form |
41900
47125193bad0
py3: convert indexes into bytes when enumerating lists in urlencodenested
Ian Moody <moz-ian@perix.co.uk>
parents:
41899
diff
changeset
|
317 lister = lambda l: [(b'%d' % k, v) for k, v in enumerate(l)] |
47125193bad0
py3: convert indexes into bytes when enumerating lists in urlencodenested
Ian Moody <moz-ian@perix.co.uk>
parents:
41899
diff
changeset
|
318 items = {list: lister, dict: lambda x: x.items()}.get(type(obj)) |
33198 | 319 if items is None: |
320 flatparams[prefix] = obj | |
321 else: | |
322 for k, v in items(obj): | |
323 if prefix: | |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
324 process(b'%s[%s]' % (prefix, k), v) |
33198 | 325 else: |
326 process(k, v) | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
327 |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
328 process(b'', params) |
33198 | 329 return util.urlreq.urlencode(flatparams) |
330 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
331 |
42433
500b64c5d991
phabricator: pass ui into readurltoken instead of passing repo
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42431
diff
changeset
|
332 def readurltoken(ui): |
37996
0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
Matt Harbison <matt_harbison@yahoo.com>
parents:
37976
diff
changeset
|
333 """return conduit url, token and make sure they exist |
0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
Matt Harbison <matt_harbison@yahoo.com>
parents:
37976
diff
changeset
|
334 |
37997
71cf20d47f25
phabricator: split auth.url into the standard auth.schemes and auth.prefix
Matt Harbison <matt_harbison@yahoo.com>
parents:
37996
diff
changeset
|
335 Currently read from [auth] config section. In the future, it might |
37996
0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
Matt Harbison <matt_harbison@yahoo.com>
parents:
37976
diff
changeset
|
336 make sense to read from .arcconfig and .arcrc as well. |
0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
Matt Harbison <matt_harbison@yahoo.com>
parents:
37976
diff
changeset
|
337 """ |
42433
500b64c5d991
phabricator: pass ui into readurltoken instead of passing repo
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42431
diff
changeset
|
338 url = ui.config(b'phabricator', b'url') |
37996
0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
Matt Harbison <matt_harbison@yahoo.com>
parents:
37976
diff
changeset
|
339 if not url: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
340 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
341 _(b'config %s.%s is required') % (b'phabricator', b'url') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
342 ) |
37996
0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
Matt Harbison <matt_harbison@yahoo.com>
parents:
37976
diff
changeset
|
343 |
42433
500b64c5d991
phabricator: pass ui into readurltoken instead of passing repo
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42431
diff
changeset
|
344 res = httpconnectionmod.readauthforuri(ui, url, util.url(url).user) |
37997
71cf20d47f25
phabricator: split auth.url into the standard auth.schemes and auth.prefix
Matt Harbison <matt_harbison@yahoo.com>
parents:
37996
diff
changeset
|
345 token = None |
37996
0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
Matt Harbison <matt_harbison@yahoo.com>
parents:
37976
diff
changeset
|
346 |
37997
71cf20d47f25
phabricator: split auth.url into the standard auth.schemes and auth.prefix
Matt Harbison <matt_harbison@yahoo.com>
parents:
37996
diff
changeset
|
347 if res: |
71cf20d47f25
phabricator: split auth.url into the standard auth.schemes and auth.prefix
Matt Harbison <matt_harbison@yahoo.com>
parents:
37996
diff
changeset
|
348 group, auth = res |
71cf20d47f25
phabricator: split auth.url into the standard auth.schemes and auth.prefix
Matt Harbison <matt_harbison@yahoo.com>
parents:
37996
diff
changeset
|
349 |
42433
500b64c5d991
phabricator: pass ui into readurltoken instead of passing repo
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42431
diff
changeset
|
350 ui.debug(b"using auth.%s.* for authentication\n" % group) |
37997
71cf20d47f25
phabricator: split auth.url into the standard auth.schemes and auth.prefix
Matt Harbison <matt_harbison@yahoo.com>
parents:
37996
diff
changeset
|
351 |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
352 token = auth.get(b'phabtoken') |
37996
0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
Matt Harbison <matt_harbison@yahoo.com>
parents:
37976
diff
changeset
|
353 |
36787
4397909f82d3
phabricator: specify API tokens per host, rather than per repo
Tom Prince <mozilla@hocat.ca>
parents:
36514
diff
changeset
|
354 if not token: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
355 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
356 _(b'Can\'t find conduit token associated to %s') % (url,) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
357 ) |
36787
4397909f82d3
phabricator: specify API tokens per host, rather than per repo
Tom Prince <mozilla@hocat.ca>
parents:
36514
diff
changeset
|
358 |
4397909f82d3
phabricator: specify API tokens per host, rather than per repo
Tom Prince <mozilla@hocat.ca>
parents:
36514
diff
changeset
|
359 return url, token |
33198 | 360 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
361 |
42434
f163e2b2594c
phabricator: pass ui instead of repo to callconduit
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42433
diff
changeset
|
362 def callconduit(ui, name, params): |
33198 | 363 """call Conduit API, params is a dict. return json.loads result, or None""" |
42434
f163e2b2594c
phabricator: pass ui instead of repo to callconduit
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42433
diff
changeset
|
364 host, token = readurltoken(ui) |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
365 url, authinfo = util.url(b'/'.join([host, b'api', name])).authinfo() |
42434
f163e2b2594c
phabricator: pass ui instead of repo to callconduit
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42433
diff
changeset
|
366 ui.debug(b'Conduit Call: %s %s\n' % (url, pycompat.byterepr(params))) |
33198 | 367 params = params.copy() |
43261
f5aa4a53acd1
phabricator: change conduit data format to match arcanist
Ian Moody <moz-ian@perix.co.uk>
parents:
43259
diff
changeset
|
368 params[b'__conduit__'] = { |
f5aa4a53acd1
phabricator: change conduit data format to match arcanist
Ian Moody <moz-ian@perix.co.uk>
parents:
43259
diff
changeset
|
369 b'token': token, |
f5aa4a53acd1
phabricator: change conduit data format to match arcanist
Ian Moody <moz-ian@perix.co.uk>
parents:
43259
diff
changeset
|
370 } |
f5aa4a53acd1
phabricator: change conduit data format to match arcanist
Ian Moody <moz-ian@perix.co.uk>
parents:
43259
diff
changeset
|
371 rawdata = { |
f5aa4a53acd1
phabricator: change conduit data format to match arcanist
Ian Moody <moz-ian@perix.co.uk>
parents:
43259
diff
changeset
|
372 b'params': templatefilters.json(params), |
f5aa4a53acd1
phabricator: change conduit data format to match arcanist
Ian Moody <moz-ian@perix.co.uk>
parents:
43259
diff
changeset
|
373 b'output': b'json', |
f5aa4a53acd1
phabricator: change conduit data format to match arcanist
Ian Moody <moz-ian@perix.co.uk>
parents:
43259
diff
changeset
|
374 b'__conduit__': 1, |
f5aa4a53acd1
phabricator: change conduit data format to match arcanist
Ian Moody <moz-ian@perix.co.uk>
parents:
43259
diff
changeset
|
375 } |
f5aa4a53acd1
phabricator: change conduit data format to match arcanist
Ian Moody <moz-ian@perix.co.uk>
parents:
43259
diff
changeset
|
376 data = urlencodenested(rawdata) |
42434
f163e2b2594c
phabricator: pass ui instead of repo to callconduit
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42433
diff
changeset
|
377 curlcmd = ui.config(b'phabricator', b'curlcmd') |
34064
8b659b7388c0
phabricator: add a config to use curl for communication
Jun Wu <quark@fb.com>
parents:
34063
diff
changeset
|
378 if curlcmd: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
379 sin, sout = procutil.popen2( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
380 b'%s -d @- %s' % (curlcmd, procutil.shellquote(url)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
381 ) |
34064
8b659b7388c0
phabricator: add a config to use curl for communication
Jun Wu <quark@fb.com>
parents:
34063
diff
changeset
|
382 sin.write(data) |
8b659b7388c0
phabricator: add a config to use curl for communication
Jun Wu <quark@fb.com>
parents:
34063
diff
changeset
|
383 sin.close() |
8b659b7388c0
phabricator: add a config to use curl for communication
Jun Wu <quark@fb.com>
parents:
34063
diff
changeset
|
384 body = sout.read() |
8b659b7388c0
phabricator: add a config to use curl for communication
Jun Wu <quark@fb.com>
parents:
34063
diff
changeset
|
385 else: |
42434
f163e2b2594c
phabricator: pass ui instead of repo to callconduit
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42433
diff
changeset
|
386 urlopener = urlmod.opener(ui, authinfo) |
41901
a98dabdb5a7b
py3: convert URL to str before passing it to request
Ian Moody <moz-ian@perix.co.uk>
parents:
41900
diff
changeset
|
387 request = util.urlreq.request(pycompat.strurl(url), data=data) |
41080
9d35ae3d9999
phabricator: ensure that the return of urlopener.open() is closed
Matt Harbison <matt_harbison@yahoo.com>
parents:
41078
diff
changeset
|
388 with contextlib.closing(urlopener.open(request)) as rsp: |
9d35ae3d9999
phabricator: ensure that the return of urlopener.open() is closed
Matt Harbison <matt_harbison@yahoo.com>
parents:
41078
diff
changeset
|
389 body = rsp.read() |
42434
f163e2b2594c
phabricator: pass ui instead of repo to callconduit
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42433
diff
changeset
|
390 ui.debug(b'Conduit Response: %s\n' % body) |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
391 parsed = pycompat.rapply( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
392 lambda x: encoding.unitolocal(x) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
393 if isinstance(x, pycompat.unicode) |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
394 else x, |
43047
0f90c2d2d7e8
py3: fix phabricator's use of json.loads() for py3.5
Ian Moody <moz-ian@perix.co.uk>
parents:
42973
diff
changeset
|
395 # json.loads only accepts bytes from py3.6+ |
43380
579672b347d2
py3: define and use json.loads polyfill
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43350
diff
changeset
|
396 pycompat.json_loads(encoding.unifromlocal(body)), |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
397 ) |
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
398 if parsed.get(b'error_code'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
399 msg = _(b'Conduit Error (%s): %s') % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
400 parsed[b'error_code'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
401 parsed[b'error_info'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
402 ) |
33198 | 403 raise error.Abort(msg) |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
404 return parsed[b'result'] |
33198 | 405 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
406 |
42435
16312ea45a8b
phabricator: make `hg debugcallconduit` work outside a hg repo
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42434
diff
changeset
|
407 @vcrcommand(b'debugcallconduit', [], _(b'METHOD'), optionalrepo=True) |
33198 | 408 def debugcallconduit(ui, repo, name): |
409 """call Conduit API | |
410 | |
411 Call parameters are read from stdin as a JSON blob. Result will be written | |
412 to stdout as a JSON blob. | |
413 """ | |
41971
99e00e5c4746
py3: convert to/from bytes/unicode for json.(dump|load)s in debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41970
diff
changeset
|
414 # json.loads only accepts bytes from 3.6+ |
99e00e5c4746
py3: convert to/from bytes/unicode for json.(dump|load)s in debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41970
diff
changeset
|
415 rawparams = encoding.unifromlocal(ui.fin.read()) |
99e00e5c4746
py3: convert to/from bytes/unicode for json.(dump|load)s in debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41970
diff
changeset
|
416 # json.loads only returns unicode strings |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
417 params = pycompat.rapply( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
418 lambda x: encoding.unitolocal(x) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
419 if isinstance(x, pycompat.unicode) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
420 else x, |
43380
579672b347d2
py3: define and use json.loads polyfill
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43350
diff
changeset
|
421 pycompat.json_loads(rawparams), |
41971
99e00e5c4746
py3: convert to/from bytes/unicode for json.(dump|load)s in debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41970
diff
changeset
|
422 ) |
99e00e5c4746
py3: convert to/from bytes/unicode for json.(dump|load)s in debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41970
diff
changeset
|
423 # json.dumps only accepts unicode strings |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
424 result = pycompat.rapply( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
425 lambda x: encoding.unifromlocal(x) if isinstance(x, bytes) else x, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
426 callconduit(ui, name, params), |
41971
99e00e5c4746
py3: convert to/from bytes/unicode for json.(dump|load)s in debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41970
diff
changeset
|
427 ) |
99e00e5c4746
py3: convert to/from bytes/unicode for json.(dump|load)s in debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41970
diff
changeset
|
428 s = json.dumps(result, sort_keys=True, indent=2, separators=(u',', u': ')) |
99e00e5c4746
py3: convert to/from bytes/unicode for json.(dump|load)s in debugcallconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41970
diff
changeset
|
429 ui.write(b'%s\n' % encoding.unitolocal(s)) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
430 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
431 |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
432 def getrepophid(repo): |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
433 """given callsign, return repository PHID or None""" |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
434 # developer config: phabricator.repophid |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
435 repophid = repo.ui.config(b'phabricator', b'repophid') |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
436 if repophid: |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
437 return repophid |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
438 callsign = repo.ui.config(b'phabricator', b'callsign') |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
439 if not callsign: |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
440 return None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
441 query = callconduit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
442 repo.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
443 b'diffusion.repository.search', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
444 {b'constraints': {b'callsigns': [callsign]}}, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
445 ) |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
446 if len(query[b'data']) == 0: |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
447 return None |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
448 repophid = query[b'data'][0][b'phid'] |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
449 repo.ui.setconfig(b'phabricator', b'repophid', repophid) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
450 return repophid |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
451 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
452 |
41532
bd3f03d8cc9f
global: use raw strings for regular expressions with escapes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41365
diff
changeset
|
453 _differentialrevisiontagre = re.compile(br'\AD([1-9][0-9]*)\Z') |
33263
ed61189763ef
phabricator: check associated Differential Revision from commit message
Jun Wu <quark@fb.com>
parents:
33200
diff
changeset
|
454 _differentialrevisiondescre = re.compile( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
455 br'^Differential Revision:\s*(?P<url>(?:.*)D(?P<id>[1-9][0-9]*))$', re.M |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
456 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
457 |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
458 |
33442
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
459 def getoldnodedrevmap(repo, nodelist): |
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
460 """find previous nodes that has been sent to Phabricator |
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
461 |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
462 return {node: (oldnode, Differential diff, Differential Revision ID)} |
33442
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
463 for node in nodelist with known previous sent versions, or associated |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
464 Differential Revision IDs. ``oldnode`` and ``Differential diff`` could |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
465 be ``None``. |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
466 |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
467 Examines commit messages like "Differential Revision:" to get the |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
468 association information. |
33263
ed61189763ef
phabricator: check associated Differential Revision from commit message
Jun Wu <quark@fb.com>
parents:
33200
diff
changeset
|
469 |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
470 If such commit message line is not found, examines all precursors and their |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
471 tags. Tags with format like "D1234" are considered a match and the node |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
472 with that tag, and the number after "D" (ex. 1234) will be returned. |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
473 |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
474 The ``old node``, if not None, is guaranteed to be the last diff of |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
475 corresponding Differential Revision, and exist in the repo. |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
476 """ |
33442
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
477 unfi = repo.unfiltered() |
43549
4cb3f5bb29ec
index: use `index.has_node` in `phabricator.getoldnodedrevmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43506
diff
changeset
|
478 has_node = unfi.changelog.index.has_node |
33263
ed61189763ef
phabricator: check associated Differential Revision from commit message
Jun Wu <quark@fb.com>
parents:
33200
diff
changeset
|
479 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
480 result = {} # {node: (oldnode?, lastdiff?, drev)} |
44715
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
481 # ordered for test stability when printing new -> old mapping below |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
482 toconfirm = util.sortdict() # {node: (force, {precnode}, drev)} |
33442
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
483 for node in nodelist: |
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
484 ctx = unfi[node] |
33443
e48082e0a8d5
phabricator: verify local tags before trusting them
Jun Wu <quark@fb.com>
parents:
33442
diff
changeset
|
485 # For tags like "D123", put them into "toconfirm" to verify later |
33735
e6d8ee3c9ec3
obsutil: rename allprecursors into allpredecessors
Boris Feld <boris.feld@octobus.net>
parents:
33692
diff
changeset
|
486 precnodes = list(obsutil.allpredecessors(unfi.obsstore, [node])) |
33443
e48082e0a8d5
phabricator: verify local tags before trusting them
Jun Wu <quark@fb.com>
parents:
33442
diff
changeset
|
487 for n in precnodes: |
43549
4cb3f5bb29ec
index: use `index.has_node` in `phabricator.getoldnodedrevmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43506
diff
changeset
|
488 if has_node(n): |
33442
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
489 for tag in unfi.nodetags(n): |
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
490 m = _differentialrevisiontagre.match(tag) |
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
491 if m: |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
492 toconfirm[node] = (0, set(precnodes), int(m.group(1))) |
43829
16b607e9f714
phabricator: fix processing of tags/desc in getoldnodedrevmap()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43549
diff
changeset
|
493 break |
16b607e9f714
phabricator: fix processing of tags/desc in getoldnodedrevmap()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43549
diff
changeset
|
494 else: |
16b607e9f714
phabricator: fix processing of tags/desc in getoldnodedrevmap()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43549
diff
changeset
|
495 continue # move to next predecessor |
16b607e9f714
phabricator: fix processing of tags/desc in getoldnodedrevmap()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43549
diff
changeset
|
496 break # found a tag, stop |
16b607e9f714
phabricator: fix processing of tags/desc in getoldnodedrevmap()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43549
diff
changeset
|
497 else: |
16b607e9f714
phabricator: fix processing of tags/desc in getoldnodedrevmap()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43549
diff
changeset
|
498 # Check commit message |
16b607e9f714
phabricator: fix processing of tags/desc in getoldnodedrevmap()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43549
diff
changeset
|
499 m = _differentialrevisiondescre.search(ctx.description()) |
16b607e9f714
phabricator: fix processing of tags/desc in getoldnodedrevmap()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43549
diff
changeset
|
500 if m: |
16b607e9f714
phabricator: fix processing of tags/desc in getoldnodedrevmap()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43549
diff
changeset
|
501 toconfirm[node] = (1, set(precnodes), int(m.group('id'))) |
33263
ed61189763ef
phabricator: check associated Differential Revision from commit message
Jun Wu <quark@fb.com>
parents:
33200
diff
changeset
|
502 |
33443
e48082e0a8d5
phabricator: verify local tags before trusting them
Jun Wu <quark@fb.com>
parents:
33442
diff
changeset
|
503 # Double check if tags are genuine by collecting all old nodes from |
e48082e0a8d5
phabricator: verify local tags before trusting them
Jun Wu <quark@fb.com>
parents:
33442
diff
changeset
|
504 # Phabricator, and expect precursors overlap with it. |
e48082e0a8d5
phabricator: verify local tags before trusting them
Jun Wu <quark@fb.com>
parents:
33442
diff
changeset
|
505 if toconfirm: |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
506 drevs = [drev for force, precs, drev in toconfirm.values()] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
507 alldiffs = callconduit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
508 unfi.ui, b'differential.querydiffs', {b'revisionIDs': drevs} |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
509 ) |
44646
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
510 |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
511 def getnodes(d, precset): |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
512 # Ignore other nodes that were combined into the Differential |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
513 # that aren't predecessors of the current local node. |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
514 return [n for n in getlocalcommits(d) if n in precset] |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
515 |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
516 for newnode, (force, precset, drev) in toconfirm.items(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
517 diffs = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
518 d for d in alldiffs.values() if int(d[b'revisionID']) == drev |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
519 ] |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
520 |
44646
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
521 # local predecessors known by Phabricator |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
522 phprecset = {n for d in diffs for n in getnodes(d, precset)} |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
523 |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
524 # Ignore if precursors (Phabricator and local repo) do not overlap, |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
525 # and force is not set (when commit message says nothing) |
44646
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
526 if not force and not phprecset: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
527 tagname = b'D%d' % drev |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
528 tags.tag( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
529 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
530 tagname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
531 nullid, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
532 message=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
533 user=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
534 date=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
535 local=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
536 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
537 unfi.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
538 _( |
43399
742065def6ca
py3: use %d to format an int
Ian Moody <moz-ian@perix.co.uk>
parents:
43380
diff
changeset
|
539 b'D%d: local tag removed - does not match ' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
540 b'Differential history\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
541 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
542 % drev |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
543 ) |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
544 continue |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
545 |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
546 # Find the last node using Phabricator metadata, and make sure it |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
547 # exists in the repo |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
548 oldnode = lastdiff = None |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
549 if diffs: |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
550 lastdiff = max(diffs, key=lambda d: int(d[b'id'])) |
44646
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
551 oldnodes = getnodes(lastdiff, precset) |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
552 |
44715
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
553 _debug( |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
554 unfi.ui, |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
555 b"%s mapped to old nodes %s\n" |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
556 % ( |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
557 short(newnode), |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
558 stringutil.pprint([short(n) for n in sorted(oldnodes)]), |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
559 ), |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
560 ) |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
561 |
44646
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
562 # If this commit was the result of `hg fold` after submission, |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
563 # and now resubmitted with --fold, the easiest thing to do is |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
564 # to leave the node clear. This only results in creating a new |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
565 # diff for the _same_ Differential Revision if this commit is |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
566 # the first or last in the selected range. If we picked a node |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
567 # from the list instead, it would have to be the lowest if at |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
568 # the beginning of the --fold range, or the highest at the end. |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
569 # Otherwise, one or more of the nodes wouldn't be considered in |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
570 # the diff, and the Differential wouldn't be properly updated. |
44646
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
571 # If this commit is the result of `hg split` in the same |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
572 # scenario, there is a single oldnode here (and multiple |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
573 # newnodes mapped to it). That makes it the same as the normal |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
574 # case, as the edges of the newnode range cleanly maps to one |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
575 # oldnode each. |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
576 if len(oldnodes) == 1: |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
577 oldnode = oldnodes[0] |
43549
4cb3f5bb29ec
index: use `index.has_node` in `phabricator.getoldnodedrevmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43506
diff
changeset
|
578 if oldnode and not has_node(oldnode): |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
579 oldnode = None |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
580 |
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
581 result[newnode] = (oldnode, lastdiff, drev) |
33443
e48082e0a8d5
phabricator: verify local tags before trusting them
Jun Wu <quark@fb.com>
parents:
33442
diff
changeset
|
582 |
33442
3ab0d5767b54
phabricator: finding old nodes in batch
Jun Wu <quark@fb.com>
parents:
33441
diff
changeset
|
583 return result |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
584 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
585 |
43839
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
586 def getdrevmap(repo, revs): |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
587 """Return a dict mapping each rev in `revs` to their Differential Revision |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
588 ID or None. |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
589 """ |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
590 result = {} |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
591 for rev in revs: |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
592 result[rev] = None |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
593 ctx = repo[rev] |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
594 # Check commit message |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
595 m = _differentialrevisiondescre.search(ctx.description()) |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
596 if m: |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
597 result[rev] = int(m.group('id')) |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
598 continue |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
599 # Check tags |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
600 for tag in repo.nodetags(ctx.node()): |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
601 m = _differentialrevisiontagre.match(tag) |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
602 if m: |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
603 result[rev] = int(m.group(1)) |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
604 break |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
605 |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
606 return result |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
607 |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
608 |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
609 def getdiff(basectx, ctx, diffopts): |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
610 """plain-text diff without header (user, commit message, etc)""" |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
611 output = util.stringio() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
612 for chunk, _label in patch.diffui( |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
613 ctx.repo(), basectx.p1().node(), ctx.node(), None, opts=diffopts |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
614 ): |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
615 output.write(chunk) |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
616 return output.getvalue() |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
617 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
618 |
43182
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
619 class DiffChangeType(object): |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
620 ADD = 1 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
621 CHANGE = 2 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
622 DELETE = 3 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
623 MOVE_AWAY = 4 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
624 COPY_AWAY = 5 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
625 MOVE_HERE = 6 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
626 COPY_HERE = 7 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
627 MULTICOPY = 8 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
628 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
629 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
630 class DiffFileType(object): |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
631 TEXT = 1 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
632 IMAGE = 2 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
633 BINARY = 3 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
634 |
a66e2844b0c6
phabricator: add the DiffChangeType and DiffFileType constants
Ian Moody <moz-ian@perix.co.uk>
parents:
43117
diff
changeset
|
635 |
43183
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
636 @attr.s |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
637 class phabhunk(dict): |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
638 """Represents a Differential hunk, which is owned by a Differential change |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
639 """ |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
640 |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
641 oldOffset = attr.ib(default=0) # camelcase-required |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
642 oldLength = attr.ib(default=0) # camelcase-required |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
643 newOffset = attr.ib(default=0) # camelcase-required |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
644 newLength = attr.ib(default=0) # camelcase-required |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
645 corpus = attr.ib(default='') |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
646 # These get added to the phabchange's equivalents |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
647 addLines = attr.ib(default=0) # camelcase-required |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
648 delLines = attr.ib(default=0) # camelcase-required |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
649 |
73d4bc60e389
phabricator: add the phabhunk data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43182
diff
changeset
|
650 |
43184
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
651 @attr.s |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
652 class phabchange(object): |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
653 """Represents a Differential change, owns Differential hunks and owned by a |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
654 Differential diff. Each one represents one file in a diff. |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
655 """ |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
656 |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
657 currentPath = attr.ib(default=None) # camelcase-required |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
658 oldPath = attr.ib(default=None) # camelcase-required |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
659 awayPaths = attr.ib(default=attr.Factory(list)) # camelcase-required |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
660 metadata = attr.ib(default=attr.Factory(dict)) |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
661 oldProperties = attr.ib(default=attr.Factory(dict)) # camelcase-required |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
662 newProperties = attr.ib(default=attr.Factory(dict)) # camelcase-required |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
663 type = attr.ib(default=DiffChangeType.CHANGE) |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
664 fileType = attr.ib(default=DiffFileType.TEXT) # camelcase-required |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
665 commitHash = attr.ib(default=None) # camelcase-required |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
666 addLines = attr.ib(default=0) # camelcase-required |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
667 delLines = attr.ib(default=0) # camelcase-required |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
668 hunks = attr.ib(default=attr.Factory(list)) |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
669 |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
670 def copynewmetadatatoold(self): |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
671 for key in list(self.metadata.keys()): |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
672 newkey = key.replace(b'new:', b'old:') |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
673 self.metadata[newkey] = self.metadata[key] |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
674 |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
675 def addoldmode(self, value): |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
676 self.oldProperties[b'unix:filemode'] = value |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
677 |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
678 def addnewmode(self, value): |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
679 self.newProperties[b'unix:filemode'] = value |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
680 |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
681 def addhunk(self, hunk): |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
682 if not isinstance(hunk, phabhunk): |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
683 raise error.Abort(b'phabchange.addhunk only takes phabhunks') |
43259
162b81e65e60
phabricator: convert phabhunk and phabchange keys to bytes when finalising
Ian Moody <moz-ian@perix.co.uk>
parents:
43258
diff
changeset
|
684 self.hunks.append(pycompat.byteskwargs(attr.asdict(hunk))) |
43184
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
685 # It's useful to include these stats since the Phab web UI shows them, |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
686 # and uses them to estimate how large a change a Revision is. Also used |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
687 # in email subjects for the [+++--] bit. |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
688 self.addLines += hunk.addLines |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
689 self.delLines += hunk.delLines |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
690 |
99ee4afd352f
phabricator: add the phabchange data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43183
diff
changeset
|
691 |
43185
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
692 @attr.s |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
693 class phabdiff(object): |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
694 """Represents a Differential diff, owns Differential changes. Corresponds |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
695 to a commit. |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
696 """ |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
697 |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
698 # Doesn't seem to be any reason to send this (output of uname -n) |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
699 sourceMachine = attr.ib(default=b'') # camelcase-required |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
700 sourcePath = attr.ib(default=b'/') # camelcase-required |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
701 sourceControlBaseRevision = attr.ib(default=b'0' * 40) # camelcase-required |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
702 sourceControlPath = attr.ib(default=b'/') # camelcase-required |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
703 sourceControlSystem = attr.ib(default=b'hg') # camelcase-required |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
704 branch = attr.ib(default=b'default') |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
705 bookmark = attr.ib(default=None) |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
706 creationMethod = attr.ib(default=b'phabsend') # camelcase-required |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
707 lintStatus = attr.ib(default=b'none') # camelcase-required |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
708 unitStatus = attr.ib(default=b'none') # camelcase-required |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
709 changes = attr.ib(default=attr.Factory(dict)) |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
710 repositoryPHID = attr.ib(default=None) # camelcase-required |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
711 |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
712 def addchange(self, change): |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
713 if not isinstance(change, phabchange): |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
714 raise error.Abort(b'phabdiff.addchange only takes phabchanges') |
43259
162b81e65e60
phabricator: convert phabhunk and phabchange keys to bytes when finalising
Ian Moody <moz-ian@perix.co.uk>
parents:
43258
diff
changeset
|
715 self.changes[change.currentPath] = pycompat.byteskwargs( |
162b81e65e60
phabricator: convert phabhunk and phabchange keys to bytes when finalising
Ian Moody <moz-ian@perix.co.uk>
parents:
43258
diff
changeset
|
716 attr.asdict(change) |
162b81e65e60
phabricator: convert phabhunk and phabchange keys to bytes when finalising
Ian Moody <moz-ian@perix.co.uk>
parents:
43258
diff
changeset
|
717 ) |
43185
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
718 |
75e7628b488f
phabricator: add the phabdiff data structure
Ian Moody <moz-ian@perix.co.uk>
parents:
43184
diff
changeset
|
719 |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
720 def maketext(pchange, basectx, ctx, fname): |
43186
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
721 """populate the phabchange for a text file""" |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
722 repo = ctx.repo() |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
723 fmatcher = match.exact([fname]) |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
724 diffopts = mdiff.diffopts(git=True, context=32767) |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
725 _pfctx, _fctx, header, fhunks = next( |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
726 patch.diffhunks(repo, basectx.p1(), ctx, fmatcher, opts=diffopts) |
43186
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
727 ) |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
728 |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
729 for fhunk in fhunks: |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
730 (oldOffset, oldLength, newOffset, newLength), lines = fhunk |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
731 corpus = b''.join(lines[1:]) |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
732 shunk = list(header) |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
733 shunk.extend(lines) |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
734 _mf, _mt, addLines, delLines, _hb = patch.diffstatsum( |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
735 patch.diffstatdata(util.iterlines(shunk)) |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
736 ) |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
737 pchange.addhunk( |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
738 phabhunk( |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
739 oldOffset, |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
740 oldLength, |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
741 newOffset, |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
742 newLength, |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
743 corpus, |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
744 addLines, |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
745 delLines, |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
746 ) |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
747 ) |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
748 |
f742fabad507
phabricator: add the maketext function
Ian Moody <moz-ian@perix.co.uk>
parents:
43185
diff
changeset
|
749 |
43187
453079605242
phabricator: add the uploadchunks function
Ian Moody <moz-ian@perix.co.uk>
parents:
43186
diff
changeset
|
750 def uploadchunks(fctx, fphid): |
453079605242
phabricator: add the uploadchunks function
Ian Moody <moz-ian@perix.co.uk>
parents:
43186
diff
changeset
|
751 """upload large binary files as separate chunks. |
453079605242
phabricator: add the uploadchunks function
Ian Moody <moz-ian@perix.co.uk>
parents:
43186
diff
changeset
|
752 Phab requests chunking over 8MiB, and splits into 4MiB chunks |
453079605242
phabricator: add the uploadchunks function
Ian Moody <moz-ian@perix.co.uk>
parents:
43186
diff
changeset
|
753 """ |
453079605242
phabricator: add the uploadchunks function
Ian Moody <moz-ian@perix.co.uk>
parents:
43186
diff
changeset
|
754 ui = fctx.repo().ui |
453079605242
phabricator: add the uploadchunks function
Ian Moody <moz-ian@perix.co.uk>
parents:
43186
diff
changeset
|
755 chunks = callconduit(ui, b'file.querychunks', {b'filePHID': fphid}) |
43504
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
756 with ui.makeprogress( |
43187
453079605242
phabricator: add the uploadchunks function
Ian Moody <moz-ian@perix.co.uk>
parents:
43186
diff
changeset
|
757 _(b'uploading file chunks'), unit=_(b'chunks'), total=len(chunks) |
43504
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
758 ) as progress: |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
759 for chunk in chunks: |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
760 progress.increment() |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
761 if chunk[b'complete']: |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
762 continue |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
763 bstart = int(chunk[b'byteStart']) |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
764 bend = int(chunk[b'byteEnd']) |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
765 callconduit( |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
766 ui, |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
767 b'file.uploadchunk', |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
768 { |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
769 b'filePHID': fphid, |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
770 b'byteStart': bstart, |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
771 b'data': base64.b64encode(fctx.data()[bstart:bend]), |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
772 b'dataEncoding': b'base64', |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
773 }, |
a78a65c33b5a
phabricator: use context manager form of progress in uploadchunks
Ian Moody <moz-ian@perix.co.uk>
parents:
43399
diff
changeset
|
774 ) |
43187
453079605242
phabricator: add the uploadchunks function
Ian Moody <moz-ian@perix.co.uk>
parents:
43186
diff
changeset
|
775 |
453079605242
phabricator: add the uploadchunks function
Ian Moody <moz-ian@perix.co.uk>
parents:
43186
diff
changeset
|
776 |
43188
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
777 def uploadfile(fctx): |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
778 """upload binary files to Phabricator""" |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
779 repo = fctx.repo() |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
780 ui = repo.ui |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
781 fname = fctx.path() |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
782 size = fctx.size() |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
783 fhash = pycompat.bytestr(hashlib.sha256(fctx.data()).hexdigest()) |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
784 |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
785 # an allocate call is required first to see if an upload is even required |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
786 # (Phab might already have it) and to determine if chunking is needed |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
787 allocateparams = { |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
788 b'name': fname, |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
789 b'contentLength': size, |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
790 b'contentHash': fhash, |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
791 } |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
792 filealloc = callconduit(ui, b'file.allocate', allocateparams) |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
793 fphid = filealloc[b'filePHID'] |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
794 |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
795 if filealloc[b'upload']: |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
796 ui.write(_(b'uploading %s\n') % bytes(fctx)) |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
797 if not fphid: |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
798 uploadparams = { |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
799 b'name': fname, |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
800 b'data_base64': base64.b64encode(fctx.data()), |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
801 } |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
802 fphid = callconduit(ui, b'file.upload', uploadparams) |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
803 else: |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
804 uploadchunks(fctx, fphid) |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
805 else: |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
806 ui.debug(b'server already has %s\n' % bytes(fctx)) |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
807 |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
808 if not fphid: |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
809 raise error.Abort(b'Upload of %s failed.' % bytes(fctx)) |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
810 |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
811 return fphid |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
812 |
24e8aac7c630
phabricator: add the uploadfile function
Ian Moody <moz-ian@perix.co.uk>
parents:
43187
diff
changeset
|
813 |
44424
98f7b9cf7bfc
phabricator: pass old `fctx` to `addoldbinary()` instead of inferring it
Matt Harbison <matt_harbison@yahoo.com>
parents:
44423
diff
changeset
|
814 def addoldbinary(pchange, oldfctx, fctx): |
43189
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
815 """add the metadata for the previous version of a binary file to the |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
816 phabchange for the new version |
44424
98f7b9cf7bfc
phabricator: pass old `fctx` to `addoldbinary()` instead of inferring it
Matt Harbison <matt_harbison@yahoo.com>
parents:
44423
diff
changeset
|
817 |
98f7b9cf7bfc
phabricator: pass old `fctx` to `addoldbinary()` instead of inferring it
Matt Harbison <matt_harbison@yahoo.com>
parents:
44423
diff
changeset
|
818 ``oldfctx`` is the previous version of the file; ``fctx`` is the new |
98f7b9cf7bfc
phabricator: pass old `fctx` to `addoldbinary()` instead of inferring it
Matt Harbison <matt_harbison@yahoo.com>
parents:
44423
diff
changeset
|
819 version of the file, or None if the file is being removed. |
43189
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
820 """ |
44424
98f7b9cf7bfc
phabricator: pass old `fctx` to `addoldbinary()` instead of inferring it
Matt Harbison <matt_harbison@yahoo.com>
parents:
44423
diff
changeset
|
821 if not fctx or fctx.cmp(oldfctx): |
43189
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
822 # Files differ, add the old one |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
823 pchange.metadata[b'old:file:size'] = oldfctx.size() |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
824 mimeguess, _enc = mimetypes.guess_type( |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
825 encoding.unifromlocal(oldfctx.path()) |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
826 ) |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
827 if mimeguess: |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
828 pchange.metadata[b'old:file:mime-type'] = pycompat.bytestr( |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
829 mimeguess |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
830 ) |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
831 fphid = uploadfile(oldfctx) |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
832 pchange.metadata[b'old:binary-phid'] = fphid |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
833 else: |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
834 # If it's left as IMAGE/BINARY web UI might try to display it |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
835 pchange.fileType = DiffFileType.TEXT |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
836 pchange.copynewmetadatatoold() |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
837 |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
838 |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
839 def makebinary(pchange, fctx): |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
840 """populate the phabchange for a binary file""" |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
841 pchange.fileType = DiffFileType.BINARY |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
842 fphid = uploadfile(fctx) |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
843 pchange.metadata[b'new:binary-phid'] = fphid |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
844 pchange.metadata[b'new:file:size'] = fctx.size() |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
845 mimeguess, _enc = mimetypes.guess_type(encoding.unifromlocal(fctx.path())) |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
846 if mimeguess: |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
847 mimeguess = pycompat.bytestr(mimeguess) |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
848 pchange.metadata[b'new:file:mime-type'] = mimeguess |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
849 if mimeguess.startswith(b'image/'): |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
850 pchange.fileType = DiffFileType.IMAGE |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
851 |
9f802243a42e
phabricator: add makebinary and addoldbinary functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43188
diff
changeset
|
852 |
43190
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
853 # Copied from mercurial/patch.py |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
854 gitmode = {b'l': b'120000', b'x': b'100755', b'': b'100644'} |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
855 |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
856 |
43263
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
857 def notutf8(fctx): |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
858 """detect non-UTF-8 text files since Phabricator requires them to be marked |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
859 as binary |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
860 """ |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
861 try: |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
862 fctx.data().decode('utf-8') |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
863 return False |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
864 except UnicodeDecodeError: |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
865 fctx.repo().ui.write( |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
866 _(b'file %s detected as non-UTF-8, marked as binary\n') |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
867 % fctx.path() |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
868 ) |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
869 return True |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
870 |
06a33a501aa2
phabricator: treat non-utf-8 text files as binary as phabricator requires
Ian Moody <moz-ian@perix.co.uk>
parents:
43262
diff
changeset
|
871 |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
872 def addremoved(pdiff, basectx, ctx, removed): |
43190
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
873 """add removed files to the phabdiff. Shouldn't include moves""" |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
874 for fname in removed: |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
875 pchange = phabchange( |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
876 currentPath=fname, oldPath=fname, type=DiffChangeType.DELETE |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
877 ) |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
878 oldfctx = basectx.p1()[fname] |
44608
7b9aaec17126
phabricator: eliminate a couple of duplicate filectx lookups
Matt Harbison <matt_harbison@yahoo.com>
parents:
44585
diff
changeset
|
879 pchange.addoldmode(gitmode[oldfctx.flags()]) |
44425
aa9979bb6853
phabricator: rename a variable to clarify that it is the parent filecontext
Matt Harbison <matt_harbison@yahoo.com>
parents:
44424
diff
changeset
|
880 if not (oldfctx.isbinary() or notutf8(oldfctx)): |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
881 maketext(pchange, basectx, ctx, fname) |
43190
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
882 |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
883 pdiff.addchange(pchange) |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
884 |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
885 |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
886 def addmodified(pdiff, basectx, ctx, modified): |
43190
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
887 """add modified files to the phabdiff""" |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
888 for fname in modified: |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
889 fctx = ctx[fname] |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
890 oldfctx = basectx.p1()[fname] |
43190
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
891 pchange = phabchange(currentPath=fname, oldPath=fname) |
44608
7b9aaec17126
phabricator: eliminate a couple of duplicate filectx lookups
Matt Harbison <matt_harbison@yahoo.com>
parents:
44585
diff
changeset
|
892 filemode = gitmode[fctx.flags()] |
7b9aaec17126
phabricator: eliminate a couple of duplicate filectx lookups
Matt Harbison <matt_harbison@yahoo.com>
parents:
44585
diff
changeset
|
893 originalmode = gitmode[oldfctx.flags()] |
43190
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
894 if filemode != originalmode: |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
895 pchange.addoldmode(originalmode) |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
896 pchange.addnewmode(filemode) |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
897 |
44427
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
898 if ( |
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
899 fctx.isbinary() |
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
900 or notutf8(fctx) |
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
901 or oldfctx.isbinary() |
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
902 or notutf8(oldfctx) |
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
903 ): |
43190
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
904 makebinary(pchange, fctx) |
44608
7b9aaec17126
phabricator: eliminate a couple of duplicate filectx lookups
Matt Harbison <matt_harbison@yahoo.com>
parents:
44585
diff
changeset
|
905 addoldbinary(pchange, oldfctx, fctx) |
43190
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
906 else: |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
907 maketext(pchange, basectx, ctx, fname) |
43190
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
908 |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
909 pdiff.addchange(pchange) |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
910 |
c19b327017b9
phabricator: add addremoved and addmodified functions
Ian Moody <moz-ian@perix.co.uk>
parents:
43189
diff
changeset
|
911 |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
912 def addadded(pdiff, basectx, ctx, added, removed): |
43258
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
913 """add file adds to the phabdiff, both new files and copies/moves""" |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
914 # Keep track of files that've been recorded as moved/copied, so if there are |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
915 # additional copies we can mark them (moves get removed from removed) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
916 copiedchanges = {} |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
917 movedchanges = {} |
44610
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
918 |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
919 copy = {} |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
920 if basectx != ctx: |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
921 copy = copies.pathcopies(basectx.p1(), ctx) |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
922 |
43258
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
923 for fname in added: |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
924 fctx = ctx[fname] |
44426
66a05dbb8b4c
phabricator: don't infer the old `fctx` in `notutf8()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44425
diff
changeset
|
925 oldfctx = None |
43258
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
926 pchange = phabchange(currentPath=fname) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
927 |
44608
7b9aaec17126
phabricator: eliminate a couple of duplicate filectx lookups
Matt Harbison <matt_harbison@yahoo.com>
parents:
44585
diff
changeset
|
928 filemode = gitmode[fctx.flags()] |
44610
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
929 |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
930 if copy: |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
931 originalfname = copy.get(fname, fname) |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
932 else: |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
933 originalfname = fname |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
934 if fctx.renamed(): |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
935 originalfname = fctx.renamed()[0] |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
936 |
022bf71515c9
phabricator: account for `basectx != ctx` when calculating renames
Matt Harbison <matt_harbison@yahoo.com>
parents:
44609
diff
changeset
|
937 renamed = fname != originalfname |
43258
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
938 |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
939 if renamed: |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
940 oldfctx = basectx.p1()[originalfname] |
44426
66a05dbb8b4c
phabricator: don't infer the old `fctx` in `notutf8()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44425
diff
changeset
|
941 originalmode = gitmode[oldfctx.flags()] |
43258
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
942 pchange.oldPath = originalfname |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
943 |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
944 if originalfname in removed: |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
945 origpchange = phabchange( |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
946 currentPath=originalfname, |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
947 oldPath=originalfname, |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
948 type=DiffChangeType.MOVE_AWAY, |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
949 awayPaths=[fname], |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
950 ) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
951 movedchanges[originalfname] = origpchange |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
952 removed.remove(originalfname) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
953 pchange.type = DiffChangeType.MOVE_HERE |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
954 elif originalfname in movedchanges: |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
955 movedchanges[originalfname].type = DiffChangeType.MULTICOPY |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
956 movedchanges[originalfname].awayPaths.append(fname) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
957 pchange.type = DiffChangeType.COPY_HERE |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
958 else: # pure copy |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
959 if originalfname not in copiedchanges: |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
960 origpchange = phabchange( |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
961 currentPath=originalfname, type=DiffChangeType.COPY_AWAY |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
962 ) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
963 copiedchanges[originalfname] = origpchange |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
964 else: |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
965 origpchange = copiedchanges[originalfname] |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
966 origpchange.awayPaths.append(fname) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
967 pchange.type = DiffChangeType.COPY_HERE |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
968 |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
969 if filemode != originalmode: |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
970 pchange.addoldmode(originalmode) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
971 pchange.addnewmode(filemode) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
972 else: # Brand-new file |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
973 pchange.addnewmode(gitmode[fctx.flags()]) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
974 pchange.type = DiffChangeType.ADD |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
975 |
44427
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
976 if ( |
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
977 fctx.isbinary() |
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
978 or notutf8(fctx) |
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
979 or (oldfctx and (oldfctx.isbinary() or notutf8(oldfctx))) |
4ce2330f2d0b
phabricator: also check parent fctx for binary where it is checked for UTF-8
Matt Harbison <matt_harbison@yahoo.com>
parents:
44426
diff
changeset
|
980 ): |
43258
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
981 makebinary(pchange, fctx) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
982 if renamed: |
44426
66a05dbb8b4c
phabricator: don't infer the old `fctx` in `notutf8()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44425
diff
changeset
|
983 addoldbinary(pchange, oldfctx, fctx) |
43258
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
984 else: |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
985 maketext(pchange, basectx, ctx, fname) |
43258
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
986 |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
987 pdiff.addchange(pchange) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
988 |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
989 for _path, copiedchange in copiedchanges.items(): |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
990 pdiff.addchange(copiedchange) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
991 for _path, movedchange in movedchanges.items(): |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
992 pdiff.addchange(movedchange) |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
993 |
d5d1edf66091
phabricator: add addadded function
Ian Moody <moz-ian@perix.co.uk>
parents:
43190
diff
changeset
|
994 |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
995 def creatediff(basectx, ctx): |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
996 """create a Differential Diff""" |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
997 repo = ctx.repo() |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
998 repophid = getrepophid(repo) |
43262
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
999 # Create a "Differential Diff" via "differential.creatediff" API |
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1000 pdiff = phabdiff( |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1001 sourceControlBaseRevision=b'%s' % basectx.p1().hex(), |
43262
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1002 branch=b'%s' % ctx.branch(), |
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1003 ) |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1004 modified, added, removed, _d, _u, _i, _c = basectx.p1().status(ctx) |
43262
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1005 # addadded will remove moved files from removed, so addremoved won't get |
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1006 # them |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1007 addadded(pdiff, basectx, ctx, added, removed) |
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1008 addmodified(pdiff, basectx, ctx, modified) |
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1009 addremoved(pdiff, basectx, ctx, removed) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1010 if repophid: |
43262
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1011 pdiff.repositoryPHID = repophid |
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1012 diff = callconduit( |
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1013 repo.ui, |
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1014 b'differential.creatediff', |
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1015 pycompat.byteskwargs(attr.asdict(pdiff)), |
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1016 ) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1017 if not diff: |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1018 if basectx != ctx: |
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1019 msg = _(b'cannot create diff for %s::%s') % (basectx, ctx) |
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1020 else: |
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1021 msg = _(b'cannot create diff for %s') % ctx |
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1022 raise error.Abort(msg) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1023 return diff |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1024 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1025 |
44643
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1026 def writediffproperties(ctxs, diff): |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1027 """write metadata to diff so patches could be applied losslessly |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1028 |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1029 ``ctxs`` is the list of commits that created the diff, in ascending order. |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1030 The list is generally a single commit, but may be several when using |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1031 ``phabsend --fold``. |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1032 """ |
43262
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1033 # creatediff returns with a diffid but query returns with an id |
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1034 diffid = diff.get(b'diffid', diff.get(b'id')) |
44643
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1035 basectx = ctxs[0] |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1036 tipctx = ctxs[-1] |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1037 |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1038 params = { |
43262
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1039 b'diff_id': diffid, |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1040 b'name': b'hg:meta', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1041 b'data': templatefilters.json( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1042 { |
44643
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1043 b'user': tipctx.user(), |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1044 b'date': b'%d %d' % tipctx.date(), |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1045 b'branch': tipctx.branch(), |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1046 b'node': tipctx.hex(), |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1047 b'parent': basectx.p1().hex(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1048 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1049 ), |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1050 } |
44643
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1051 callconduit(basectx.repo().ui, b'differential.setdiffproperty', params) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1052 |
44643
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1053 commits = {} |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1054 for ctx in ctxs: |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1055 commits[ctx.hex()] = { |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1056 b'author': stringutil.person(ctx.user()), |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1057 b'authorEmail': stringutil.email(ctx.user()), |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1058 b'time': int(ctx.date()[0]), |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1059 b'commit': ctx.hex(), |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1060 b'parents': [ctx.p1().hex()], |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1061 b'branch': ctx.branch(), |
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1062 } |
37800
6cf5f5b4eb57
phabricator: specify some metadata compatibly with arc
Tom Prince <mozilla@hocat.ca>
parents:
37120
diff
changeset
|
1063 params = { |
43262
af067d29b19e
phabricator: switch to the creatediff endpoint
Ian Moody <moz-ian@perix.co.uk>
parents:
43261
diff
changeset
|
1064 b'diff_id': diffid, |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1065 b'name': b'local:commits', |
44643
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1066 b'data': templatefilters.json(commits), |
37800
6cf5f5b4eb57
phabricator: specify some metadata compatibly with arc
Tom Prince <mozilla@hocat.ca>
parents:
37120
diff
changeset
|
1067 } |
44643
0437959de6f5
phabricator: record all local commits used to create a Differential revision
Matt Harbison <matt_harbison@yahoo.com>
parents:
44610
diff
changeset
|
1068 callconduit(basectx.repo().ui, b'differential.setdiffproperty', params) |
37800
6cf5f5b4eb57
phabricator: specify some metadata compatibly with arc
Tom Prince <mozilla@hocat.ca>
parents:
37120
diff
changeset
|
1069 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1070 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1071 def createdifferentialrevision( |
44645
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1072 ctxs, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1073 revid=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1074 parentrevphid=None, |
44645
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1075 oldbasenode=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1076 oldnode=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1077 olddiff=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1078 actions=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1079 comment=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1080 ): |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1081 """create or update a Differential Revision |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1082 |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1083 If revid is None, create a new Differential Revision, otherwise update |
42449
c19d259fd6ad
phabricator: use parents.set to always set dependencies
Ian Moody <moz-ian@perix.co.uk>
parents:
42444
diff
changeset
|
1084 revid. If parentrevphid is not None, set it as a dependency. |
33265
95f658b558a3
phabricator: do not upload new diff if nothing changes
Jun Wu <quark@fb.com>
parents:
33264
diff
changeset
|
1085 |
44645
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1086 If there is a single commit for the new Differential Revision, ``ctxs`` will |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1087 be a list of that single context. Otherwise, it is a list that covers the |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1088 range of changes for the differential, where ``ctxs[0]`` is the first change |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1089 to include and ``ctxs[-1]`` is the last. |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1090 |
33265
95f658b558a3
phabricator: do not upload new diff if nothing changes
Jun Wu <quark@fb.com>
parents:
33264
diff
changeset
|
1091 If oldnode is not None, check if the patch content (without commit message |
44645
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1092 and metadata) has changed before creating another diff. For a Revision with |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1093 a single commit, ``oldbasenode`` and ``oldnode`` have the same value. For a |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1094 Revision covering multiple commits, ``oldbasenode`` corresponds to |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1095 ``ctxs[0]`` the previous time this Revision was posted, and ``oldnode`` |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1096 corresponds to ``ctxs[-1]``. |
33498
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1097 |
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1098 If actions is not None, they will be appended to the transaction. |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1099 """ |
44645
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1100 ctx = ctxs[-1] |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1101 basectx = ctxs[0] |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1102 |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1103 repo = ctx.repo() |
33265
95f658b558a3
phabricator: do not upload new diff if nothing changes
Jun Wu <quark@fb.com>
parents:
33264
diff
changeset
|
1104 if oldnode: |
33976
27ff2a87d8c0
phabsend: detect patch change with larger context
Jun Wu <quark@fb.com>
parents:
33975
diff
changeset
|
1105 diffopts = mdiff.diffopts(git=True, context=32767) |
44645
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1106 unfi = repo.unfiltered() |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1107 oldctx = unfi[oldnode] |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1108 oldbasectx = unfi[oldbasenode] |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1109 neednewdiff = getdiff(basectx, ctx, diffopts) != getdiff( |
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1110 oldbasectx, oldctx, diffopts |
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1111 ) |
33265
95f658b558a3
phabricator: do not upload new diff if nothing changes
Jun Wu <quark@fb.com>
parents:
33264
diff
changeset
|
1112 else: |
95f658b558a3
phabricator: do not upload new diff if nothing changes
Jun Wu <quark@fb.com>
parents:
33264
diff
changeset
|
1113 neednewdiff = True |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1114 |
33265
95f658b558a3
phabricator: do not upload new diff if nothing changes
Jun Wu <quark@fb.com>
parents:
33264
diff
changeset
|
1115 transactions = [] |
95f658b558a3
phabricator: do not upload new diff if nothing changes
Jun Wu <quark@fb.com>
parents:
33264
diff
changeset
|
1116 if neednewdiff: |
44609
53d75fdeaaaa
phabricator: add basectx arguments to file related `phabsend` utilities
Matt Harbison <matt_harbison@yahoo.com>
parents:
44608
diff
changeset
|
1117 diff = creatediff(basectx, ctx) |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1118 transactions.append({b'type': b'update', b'value': diff[b'phid']}) |
42431
29528c4235a1
phabricator: add commenting to phabsend for new/updated Diffs
Ian Moody <moz-ian@perix.co.uk>
parents:
42268
diff
changeset
|
1119 if comment: |
29528c4235a1
phabricator: add commenting to phabsend for new/updated Diffs
Ian Moody <moz-ian@perix.co.uk>
parents:
42268
diff
changeset
|
1120 transactions.append({b'type': b'comment', b'value': comment}) |
33692
f100354cce52
phabricator: update diff property even if we choose not to create a new diff
Jun Wu <quark@fb.com>
parents:
33691
diff
changeset
|
1121 else: |
f100354cce52
phabricator: update diff property even if we choose not to create a new diff
Jun Wu <quark@fb.com>
parents:
33691
diff
changeset
|
1122 # Even if we don't need to upload a new diff because the patch content |
f100354cce52
phabricator: update diff property even if we choose not to create a new diff
Jun Wu <quark@fb.com>
parents:
33691
diff
changeset
|
1123 # does not change. We might still need to update its metadata so |
f100354cce52
phabricator: update diff property even if we choose not to create a new diff
Jun Wu <quark@fb.com>
parents:
33691
diff
changeset
|
1124 # pushers could know the correct node metadata. |
f100354cce52
phabricator: update diff property even if we choose not to create a new diff
Jun Wu <quark@fb.com>
parents:
33691
diff
changeset
|
1125 assert olddiff |
f100354cce52
phabricator: update diff property even if we choose not to create a new diff
Jun Wu <quark@fb.com>
parents:
33691
diff
changeset
|
1126 diff = olddiff |
44645
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1127 writediffproperties(ctxs, diff) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1128 |
42449
c19d259fd6ad
phabricator: use parents.set to always set dependencies
Ian Moody <moz-ian@perix.co.uk>
parents:
42444
diff
changeset
|
1129 # Set the parent Revision every time, so commit re-ordering is picked-up |
c19d259fd6ad
phabricator: use parents.set to always set dependencies
Ian Moody <moz-ian@perix.co.uk>
parents:
42444
diff
changeset
|
1130 if parentrevphid: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1131 transactions.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1132 {b'type': b'parents.set', b'value': [parentrevphid]} |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1133 ) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1134 |
33498
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1135 if actions: |
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1136 transactions += actions |
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1137 |
44644
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1138 # When folding multiple local commits into a single review, arcanist will |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1139 # take the summary line of the first commit as the title, and then |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1140 # concatenate the rest of the remaining messages (including each of their |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1141 # first lines) to the rest of the first commit message (each separated by |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1142 # an empty line), and use that as the summary field. Do the same here. |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1143 # For commits with only a one line message, there is no summary field, as |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1144 # this gets assigned to the title. |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1145 fields = util.sortdict() # sorted for stable wire protocol in tests |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1146 |
44645
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1147 for i, _ctx in enumerate(ctxs): |
44644
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1148 # Parse commit message and update related fields. |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1149 desc = _ctx.description() |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1150 info = callconduit( |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1151 repo.ui, b'differential.parsecommitmessage', {b'corpus': desc} |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1152 ) |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1153 |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1154 for k in [b'title', b'summary', b'testPlan']: |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1155 v = info[b'fields'].get(k) |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1156 if not v: |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1157 continue |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1158 |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1159 if i == 0: |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1160 # Title, summary and test plan (if present) are taken verbatim |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1161 # for the first commit. |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1162 fields[k] = v.rstrip() |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1163 continue |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1164 elif k == b'title': |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1165 # Add subsequent titles (i.e. the first line of the commit |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1166 # message) back to the summary. |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1167 k = b'summary' |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1168 |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1169 # Append any current field to the existing composite field |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1170 fields[k] = b'\n\n'.join(filter(None, [fields.get(k), v.rstrip()])) |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1171 |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1172 for k, v in fields.items(): |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1173 transactions.append({b'type': k, b'value': v}) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1174 |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1175 params = {b'transactions': transactions} |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1176 if revid is not None: |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1177 # Update an existing Differential Revision |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1178 params[b'objectIdentifier'] = revid |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1179 |
42434
f163e2b2594c
phabricator: pass ui instead of repo to callconduit
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42433
diff
changeset
|
1180 revision = callconduit(repo.ui, b'differential.revision.edit', params) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1181 if not revision: |
44645
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1182 if len(ctxs) == 1: |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1183 msg = _(b'cannot create revision for %s') % ctx |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1184 else: |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1185 msg = _(b'cannot create revision for %s::%s') % (basectx, ctx) |
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1186 raise error.Abort(msg) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1187 |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1188 return revision, diff |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1189 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1190 |
44420
ddcb51390891
phabricator: pass ui instead of repo to `userphids()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44419
diff
changeset
|
1191 def userphids(ui, names): |
33498
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1192 """convert user names to PHIDs""" |
41705
570e62f1dcf2
phabricator: make user searches case-insensitive
Julien Cristau <jcristau@mozilla.com>
parents:
41532
diff
changeset
|
1193 names = [name.lower() for name in names] |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1194 query = {b'constraints': {b'usernames': names}} |
44420
ddcb51390891
phabricator: pass ui instead of repo to `userphids()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44419
diff
changeset
|
1195 result = callconduit(ui, b'user.search', query) |
33498
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1196 # username not found is not an error of the API. So check if we have missed |
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1197 # some names here. |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1198 data = result[b'data'] |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44436
diff
changeset
|
1199 resolved = {entry[b'fields'][b'username'].lower() for entry in data} |
33498
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1200 unresolved = set(names) - resolved |
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1201 if unresolved: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1202 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1203 _(b'unknown username: %s') % b' '.join(sorted(unresolved)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1204 ) |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1205 return [entry[b'phid'] for entry in data] |
33498
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1206 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1207 |
44648
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1208 def _print_phabsend_action(ui, ctx, newrevid, action): |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1209 """print the ``action`` that occurred when posting ``ctx`` for review |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1210 |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1211 This is a utility function for the sending phase of ``phabsend``, which |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1212 makes it easier to show a status for all local commits with `--fold``. |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1213 """ |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1214 actiondesc = ui.label( |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1215 { |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1216 b'created': _(b'created'), |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1217 b'skipped': _(b'skipped'), |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1218 b'updated': _(b'updated'), |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1219 }[action], |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1220 b'phabricator.action.%s' % action, |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1221 ) |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1222 drevdesc = ui.label(b'D%d' % newrevid, b'phabricator.drev') |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1223 nodedesc = ui.label(bytes(ctx), b'phabricator.node') |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1224 desc = ui.label(ctx.description().split(b'\n')[0], b'phabricator.desc') |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1225 ui.write(_(b'%s - %s - %s: %s\n') % (drevdesc, actiondesc, nodedesc, desc)) |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1226 |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1227 |
44647
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1228 def _amend_diff_properties(unfi, drevid, newnodes, diff): |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1229 """update the local commit list for the ``diff`` associated with ``drevid`` |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1230 |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1231 This is a utility function for the amend phase of ``phabsend``, which |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1232 converts failures to warning messages. |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1233 """ |
44715
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
1234 _debug( |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
1235 unfi.ui, |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
1236 b"new commits: %s\n" % stringutil.pprint([short(n) for n in newnodes]), |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
1237 ) |
38f7b2f02f6d
phabricator: add debug logging to show previous node values in `phabsend`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44648
diff
changeset
|
1238 |
44647
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1239 try: |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1240 writediffproperties([unfi[newnode] for newnode in newnodes], diff) |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1241 except util.urlerr.urlerror: |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1242 # If it fails just warn and keep going, otherwise the DREV |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1243 # associations will be lost |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1244 unfi.ui.warnnoi18n(b'Failed to update metadata for D%d\n' % drevid) |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1245 |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1246 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1247 @vcrcommand( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1248 b'phabsend', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1249 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1250 (b'r', b'rev', [], _(b'revisions to send'), _(b'REV')), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1251 (b'', b'amend', True, _(b'update commit messages')), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1252 (b'', b'reviewer', [], _(b'specify reviewers')), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1253 (b'', b'blocker', [], _(b'specify blocking reviewers')), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1254 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1255 b'm', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1256 b'comment', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1257 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1258 _(b'add a comment to Revisions with new/updated Diffs'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1259 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1260 (b'', b'confirm', None, _(b'ask for confirmation before sending')), |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1261 (b'', b'fold', False, _(b'combine the revisions into one review')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1262 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1263 _(b'REV [OPTIONS]'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1264 helpcategory=command.CATEGORY_IMPORT_EXPORT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1265 ) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1266 def phabsend(ui, repo, *revs, **opts): |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1267 """upload changesets to Phabricator |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1268 |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1269 If there are multiple revisions specified, they will be send as a stack |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1270 with a linear dependencies relationship using the order specified by the |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1271 revset. |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1272 |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1273 For the first time uploading changesets, local tags will be created to |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1274 maintain the association. After the first time, phabsend will check |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1275 obsstore and tags information so it can figure out whether to update an |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1276 existing Differential Revision, or create a new one. |
33690
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1277 |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1278 If --amend is set, update commit messages so they have the |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1279 ``Differential Revision`` URL, remove related tags. This is similar to what |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1280 arcanist will do, and is more desired in author-push workflows. Otherwise, |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1281 use local tags to record the ``Differential Revision`` association. |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1282 |
33690
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1283 The --confirm option lets you confirm changesets before sending them. You |
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1284 can also add following to your configuration file to make it default |
33974
45a8cd74de4e
phabsend: polish the docstring a bit
Jun Wu <quark@fb.com>
parents:
33834
diff
changeset
|
1285 behaviour:: |
33690
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1286 |
33974
45a8cd74de4e
phabsend: polish the docstring a bit
Jun Wu <quark@fb.com>
parents:
33834
diff
changeset
|
1287 [phabsend] |
45a8cd74de4e
phabsend: polish the docstring a bit
Jun Wu <quark@fb.com>
parents:
33834
diff
changeset
|
1288 confirm = true |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1289 |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1290 By default, a separate review will be created for each commit that is |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1291 selected, and will have the same parent/child relationship in Phabricator. |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1292 If ``--fold`` is set, multiple commits are rolled up into a single review |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1293 as if diffed from the parent of the first revision to the last. The commit |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1294 messages are concatenated in the summary field on Phabricator. |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1295 |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1296 phabsend will check obsstore and the above association to decide whether to |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1297 update an existing Differential Revision, or create a new one. |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1298 """ |
41970
51ba9fbcca52
py3: use pycompat.byteskwargs on opts in phabricator.py
Ian Moody <moz-ian@perix.co.uk>
parents:
41950
diff
changeset
|
1299 opts = pycompat.byteskwargs(opts) |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1300 revs = list(revs) + opts.get(b'rev', []) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1301 revs = scmutil.revrange(repo, revs) |
44076
a7c4bcf7018a
phabricator: post revisions in ascending topological order (issue6241)
Matt Harbison <matt_harbison@yahoo.com>
parents:
43858
diff
changeset
|
1302 revs.sort() # ascending order to preserve topological parent/child in phab |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1303 |
33266
5b2391b46906
phabricator: abort if phabsend gets empty revs
Jun Wu <quark@fb.com>
parents:
33265
diff
changeset
|
1304 if not revs: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1305 raise error.Abort(_(b'phabsend requires at least one changeset')) |
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1306 if opts.get(b'amend'): |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1307 cmdutil.checkunfinished(repo) |
33266
5b2391b46906
phabricator: abort if phabsend gets empty revs
Jun Wu <quark@fb.com>
parents:
33265
diff
changeset
|
1308 |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1309 ctxs = [repo[rev] for rev in revs] |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1310 |
44719
c482e2fe444c
phabricator: prevent posting obsolete commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44718
diff
changeset
|
1311 if any(c for c in ctxs if c.obsolete()): |
c482e2fe444c
phabricator: prevent posting obsolete commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44718
diff
changeset
|
1312 raise error.Abort(_(b"obsolete commits cannot be posted for review")) |
c482e2fe444c
phabricator: prevent posting obsolete commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44718
diff
changeset
|
1313 |
44774
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1314 # Ensure the local commits are an unbroken range. The semantics of the |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1315 # --fold option implies this, and the auto restacking of orphans requires |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1316 # it. Otherwise A+C in A->B->C will cause B to be orphaned, and C' to |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1317 # get A' as a parent. |
45152
b3b0cd8b9366
phabricator: clarify the multiple heads/roots error message for phabsend
Matt Harbison <matt_harbison@yahoo.com>
parents:
45140
diff
changeset
|
1318 def _fail_nonlinear_revs(revs, revtype): |
b3b0cd8b9366
phabricator: clarify the multiple heads/roots error message for phabsend
Matt Harbison <matt_harbison@yahoo.com>
parents:
45140
diff
changeset
|
1319 badnodes = [repo[r].node() for r in revs] |
44774
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1320 raise error.Abort( |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1321 _(b"cannot phabsend multiple %s revisions: %s") |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1322 % (revtype, scmutil.nodesummaries(repo, badnodes)), |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1323 hint=_(b"the revisions must form a linear chain"), |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1324 ) |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1325 |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1326 heads = repo.revs(b'heads(%ld)', revs) |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1327 if len(heads) > 1: |
45152
b3b0cd8b9366
phabricator: clarify the multiple heads/roots error message for phabsend
Matt Harbison <matt_harbison@yahoo.com>
parents:
45140
diff
changeset
|
1328 _fail_nonlinear_revs(heads, b"head") |
44774
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1329 |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1330 roots = repo.revs(b'roots(%ld)', revs) |
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1331 if len(roots) > 1: |
45152
b3b0cd8b9366
phabricator: clarify the multiple heads/roots error message for phabsend
Matt Harbison <matt_harbison@yahoo.com>
parents:
45140
diff
changeset
|
1332 _fail_nonlinear_revs(roots, b"root") |
44774
c1c922391314
phabricator: ensure that `phabsend` is given a contiguous, linear commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44720
diff
changeset
|
1333 |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1334 fold = opts.get(b'fold') |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1335 if fold: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1336 if len(revs) == 1: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1337 # TODO: just switch to --no-fold instead? |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1338 raise error.Abort(_(b"cannot fold a single revision")) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1339 |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1340 # There's no clear way to manage multiple commits with a Dxxx tag, so |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1341 # require the amend option. (We could append "_nnn", but then it |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1342 # becomes jumbled if earlier commits are added to an update.) It should |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1343 # lock the repo and ensure that the range is editable, but that would |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1344 # make the code pretty convoluted. The default behavior of `arc` is to |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1345 # create a new review anyway. |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1346 if not opts.get(b"amend"): |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1347 raise error.Abort(_(b"cannot fold with --no-amend")) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1348 |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1349 # It might be possible to bucketize the revisions by the DREV value, and |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1350 # iterate over those groups when posting, and then again when amending. |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1351 # But for simplicity, require all selected revisions to be for the same |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1352 # DREV (if present). Adding local revisions to an existing DREV is |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1353 # acceptable. |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1354 drevmatchers = [ |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1355 _differentialrevisiondescre.search(ctx.description()) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1356 for ctx in ctxs |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1357 ] |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1358 if len({m.group('url') for m in drevmatchers if m}) > 1: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1359 raise error.Abort( |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1360 _(b"cannot fold revisions with different DREV values") |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1361 ) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1362 |
33978
088598153aa2
phabsend: show associated Differential Revisions with --confirm
Jun Wu <quark@fb.com>
parents:
33977
diff
changeset
|
1363 # {newnode: (oldnode, olddiff, olddrev} |
088598153aa2
phabsend: show associated Differential Revisions with --confirm
Jun Wu <quark@fb.com>
parents:
33977
diff
changeset
|
1364 oldmap = getoldnodedrevmap(repo, [repo[r].node() for r in revs]) |
088598153aa2
phabsend: show associated Differential Revisions with --confirm
Jun Wu <quark@fb.com>
parents:
33977
diff
changeset
|
1365 |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1366 confirm = ui.configbool(b'phabsend', b'confirm') |
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1367 confirm |= bool(opts.get(b'confirm')) |
33690
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1368 if confirm: |
33978
088598153aa2
phabsend: show associated Differential Revisions with --confirm
Jun Wu <quark@fb.com>
parents:
33977
diff
changeset
|
1369 confirmed = _confirmbeforesend(repo, revs, oldmap) |
33690
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1370 if not confirmed: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1371 raise error.Abort(_(b'phabsend cancelled')) |
33690
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1372 |
33498
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1373 actions = [] |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1374 reviewers = opts.get(b'reviewer', []) |
42444
f33d3ee110da
phabricator: add --blocker argument to phabsend to specify blocking reviewers
Ian Moody <moz-ian@perix.co.uk>
parents:
42443
diff
changeset
|
1375 blockers = opts.get(b'blocker', []) |
f33d3ee110da
phabricator: add --blocker argument to phabsend to specify blocking reviewers
Ian Moody <moz-ian@perix.co.uk>
parents:
42443
diff
changeset
|
1376 phids = [] |
33498
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1377 if reviewers: |
44420
ddcb51390891
phabricator: pass ui instead of repo to `userphids()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44419
diff
changeset
|
1378 phids.extend(userphids(repo.ui, reviewers)) |
42444
f33d3ee110da
phabricator: add --blocker argument to phabsend to specify blocking reviewers
Ian Moody <moz-ian@perix.co.uk>
parents:
42443
diff
changeset
|
1379 if blockers: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1380 phids.extend( |
44420
ddcb51390891
phabricator: pass ui instead of repo to `userphids()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44419
diff
changeset
|
1381 map( |
ddcb51390891
phabricator: pass ui instead of repo to `userphids()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44419
diff
changeset
|
1382 lambda phid: b'blocking(%s)' % phid, |
ddcb51390891
phabricator: pass ui instead of repo to `userphids()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44419
diff
changeset
|
1383 userphids(repo.ui, blockers), |
ddcb51390891
phabricator: pass ui instead of repo to `userphids()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44419
diff
changeset
|
1384 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1385 ) |
42444
f33d3ee110da
phabricator: add --blocker argument to phabsend to specify blocking reviewers
Ian Moody <moz-ian@perix.co.uk>
parents:
42443
diff
changeset
|
1386 if phids: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1387 actions.append({b'type': b'reviewers.add', b'value': phids}) |
33498
b7a75b9a3386
phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com>
parents:
33443
diff
changeset
|
1388 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1389 drevids = [] # [int] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1390 diffmap = {} # {newnode: diff} |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1391 |
42449
c19d259fd6ad
phabricator: use parents.set to always set dependencies
Ian Moody <moz-ian@perix.co.uk>
parents:
42444
diff
changeset
|
1392 # Send patches one by one so we know their Differential Revision PHIDs and |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1393 # can provide dependency relationship |
42449
c19d259fd6ad
phabricator: use parents.set to always set dependencies
Ian Moody <moz-ian@perix.co.uk>
parents:
42444
diff
changeset
|
1394 lastrevphid = None |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1395 for ctx in ctxs: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1396 if fold: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1397 ui.debug(b'sending rev %d::%d\n' % (ctx.rev(), ctxs[-1].rev())) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1398 else: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1399 ui.debug(b'sending rev %d\n' % ctx.rev()) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1400 |
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1401 # Get Differential Revision ID |
33691
1664406a44d9
phabricator: use Phabricator's last node information
Jun Wu <quark@fb.com>
parents:
33690
diff
changeset
|
1402 oldnode, olddiff, revid = oldmap.get(ctx.node(), (None, None, None)) |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1403 oldbasenode, oldbasediff, oldbaserevid = oldnode, olddiff, revid |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1404 |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1405 if fold: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1406 oldbasenode, oldbasediff, oldbaserevid = oldmap.get( |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1407 ctxs[-1].node(), (None, None, None) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1408 ) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1409 |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1410 if oldnode != ctx.node() or opts.get(b'amend'): |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1411 # Create or update Differential Revision |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1412 revision, diff = createdifferentialrevision( |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1413 ctxs if fold else [ctx], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1414 revid, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1415 lastrevphid, |
44645
419fec8237b7
phabricator: teach createdifferentialrevision() to allow a folded commit range
Matt Harbison <matt_harbison@yahoo.com>
parents:
44644
diff
changeset
|
1416 oldbasenode, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1417 oldnode, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1418 olddiff, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1419 actions, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1420 opts.get(b'comment'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1421 ) |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1422 |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1423 if fold: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1424 for ctx in ctxs: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1425 diffmap[ctx.node()] = diff |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1426 else: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1427 diffmap[ctx.node()] = diff |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1428 |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1429 newrevid = int(revision[b'object'][b'id']) |
42449
c19d259fd6ad
phabricator: use parents.set to always set dependencies
Ian Moody <moz-ian@perix.co.uk>
parents:
42444
diff
changeset
|
1430 newrevphid = revision[b'object'][b'phid'] |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1431 if revid: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1432 action = b'updated' |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1433 else: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1434 action = b'created' |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1435 |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1436 # Create a local tag to note the association, if commit message |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1437 # does not have it already |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1438 if not fold: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1439 m = _differentialrevisiondescre.search(ctx.description()) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1440 if not m or int(m.group('id')) != newrevid: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1441 tagname = b'D%d' % newrevid |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1442 tags.tag( |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1443 repo, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1444 tagname, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1445 ctx.node(), |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1446 message=None, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1447 user=None, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1448 date=None, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1449 local=True, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1450 ) |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1451 else: |
42449
c19d259fd6ad
phabricator: use parents.set to always set dependencies
Ian Moody <moz-ian@perix.co.uk>
parents:
42444
diff
changeset
|
1452 # Nothing changed. But still set "newrevphid" so the next revision |
c19d259fd6ad
phabricator: use parents.set to always set dependencies
Ian Moody <moz-ian@perix.co.uk>
parents:
42444
diff
changeset
|
1453 # could depend on this one and "newrevid" for the summary line. |
44419
df8053082364
phabricator: pass ui instead of repo to `querydrev()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44418
diff
changeset
|
1454 newrevphid = querydrev(repo.ui, b'%d' % revid)[0][b'phid'] |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1455 newrevid = revid |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1456 action = b'skipped' |
33199
228ad1e58a85
phabricator: add phabsend command to send a stack
Jun Wu <quark@fb.com>
parents:
33198
diff
changeset
|
1457 |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1458 drevids.append(newrevid) |
42449
c19d259fd6ad
phabricator: use parents.set to always set dependencies
Ian Moody <moz-ian@perix.co.uk>
parents:
42444
diff
changeset
|
1459 lastrevphid = newrevphid |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
1460 |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1461 if fold: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1462 for c in ctxs: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1463 if oldmap.get(c.node(), (None, None, None))[2]: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1464 action = b'updated' |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1465 else: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1466 action = b'created' |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1467 _print_phabsend_action(ui, c, newrevid, action) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1468 break |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1469 |
44648
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1470 _print_phabsend_action(ui, ctx, newrevid, action) |
949a87145336
phabricator: extract logic to print the status when posting a commit
Matt Harbison <matt_harbison@yahoo.com>
parents:
44647
diff
changeset
|
1471 |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1472 # Update commit messages and remove tags |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1473 if opts.get(b'amend'): |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1474 unfi = repo.unfiltered() |
42434
f163e2b2594c
phabricator: pass ui instead of repo to callconduit
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42433
diff
changeset
|
1475 drevs = callconduit(ui, b'differential.query', {b'ids': drevids}) |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1476 with repo.wlock(), repo.lock(), repo.transaction(b'phabsend'): |
44720
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1477 # Eagerly evaluate commits to restabilize before creating new |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1478 # commits. The selected revisions are excluded because they are |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1479 # automatically restacked as part of the submission process. |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1480 restack = [ |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1481 c |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1482 for c in repo.set( |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1483 b"(%ld::) - (%ld) - unstable() - obsolete() - public()", |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1484 revs, |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1485 revs, |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1486 ) |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1487 ] |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1488 wnode = unfi[b'.'].node() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1489 mapping = {} # {oldnode: [newnode]} |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1490 newnodes = [] |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1491 |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1492 drevid = drevids[0] |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1493 |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1494 for i, rev in enumerate(revs): |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1495 old = unfi[rev] |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1496 if not fold: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1497 drevid = drevids[i] |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1498 drev = [d for d in drevs if int(d[b'id']) == drevid][0] |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1499 |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1500 newdesc = get_amended_desc(drev, old, fold) |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1501 # Make sure commit message contain "Differential Revision" |
44718
0680b8a1992a
phabricator: avoid creating unstable children within the review stack
Matt Harbison <matt_harbison@yahoo.com>
parents:
44717
diff
changeset
|
1502 if ( |
0680b8a1992a
phabricator: avoid creating unstable children within the review stack
Matt Harbison <matt_harbison@yahoo.com>
parents:
44717
diff
changeset
|
1503 old.description() != newdesc |
0680b8a1992a
phabricator: avoid creating unstable children within the review stack
Matt Harbison <matt_harbison@yahoo.com>
parents:
44717
diff
changeset
|
1504 or old.p1().node() in mapping |
0680b8a1992a
phabricator: avoid creating unstable children within the review stack
Matt Harbison <matt_harbison@yahoo.com>
parents:
44717
diff
changeset
|
1505 or old.p2().node() in mapping |
0680b8a1992a
phabricator: avoid creating unstable children within the review stack
Matt Harbison <matt_harbison@yahoo.com>
parents:
44717
diff
changeset
|
1506 ): |
41163
0101a35deae2
phabricator: warn if unable to amend, instead of aborting after posting
Matt Harbison <matt_harbison@yahoo.com>
parents:
41080
diff
changeset
|
1507 if old.phase() == phases.public: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1508 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1509 _(b"warning: not updating public commit %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1510 % scmutil.formatchangeid(old) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1511 ) |
41163
0101a35deae2
phabricator: warn if unable to amend, instead of aborting after posting
Matt Harbison <matt_harbison@yahoo.com>
parents:
41080
diff
changeset
|
1512 continue |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1513 parents = [ |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1514 mapping.get(old.p1().node(), (old.p1(),))[0], |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1515 mapping.get(old.p2().node(), (old.p2(),))[0], |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1516 ] |
45426
1a5d3e555c70
phabricator: update the hashes in commit messages as they get submitted
Matt Harbison <matt_harbison@yahoo.com>
parents:
45246
diff
changeset
|
1517 newdesc = rewriteutil.update_hash_refs( |
1a5d3e555c70
phabricator: update the hashes in commit messages as they get submitted
Matt Harbison <matt_harbison@yahoo.com>
parents:
45246
diff
changeset
|
1518 repo, newdesc, mapping, |
1a5d3e555c70
phabricator: update the hashes in commit messages as they get submitted
Matt Harbison <matt_harbison@yahoo.com>
parents:
45246
diff
changeset
|
1519 ) |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1520 new = context.metadataonlyctx( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1521 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1522 old, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1523 parents=parents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1524 text=newdesc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1525 user=old.user(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1526 date=old.date(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1527 extra=old.extra(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1528 ) |
38336
bb7e3c6ef592
phabricator: preserve the phase when amending in the Differential fields
Matt Harbison <matt_harbison@yahoo.com>
parents:
38042
diff
changeset
|
1529 |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38392
diff
changeset
|
1530 newnode = new.commit() |
38336
bb7e3c6ef592
phabricator: preserve the phase when amending in the Differential fields
Matt Harbison <matt_harbison@yahoo.com>
parents:
38042
diff
changeset
|
1531 |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1532 mapping[old.node()] = [newnode] |
44647
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1533 |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1534 if fold: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1535 # Defer updating the (single) Diff until all nodes are |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1536 # collected. No tags were created, so none need to be |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1537 # removed. |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1538 newnodes.append(newnode) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1539 continue |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1540 |
44647
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1541 _amend_diff_properties( |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1542 unfi, drevid, [newnode], diffmap[old.node()] |
99fa161a883c
phabricator: extract the logic to amend diff properties to a function
Matt Harbison <matt_harbison@yahoo.com>
parents:
44646
diff
changeset
|
1543 ) |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1544 |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1545 # Remove local tags since it's no longer necessary |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1546 tagname = b'D%d' % drevid |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1547 if tagname in repo.tags(): |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1548 tags.tag( |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1549 repo, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1550 tagname, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1551 nullid, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1552 message=None, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1553 user=None, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1554 date=None, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1555 local=True, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1556 ) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1557 elif fold: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1558 # When folding multiple commits into one review with |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1559 # --fold, track even the commits that weren't amended, so |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1560 # that their association isn't lost if the properties are |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1561 # rewritten below. |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1562 newnodes.append(old.node()) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1563 |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1564 # If the submitted commits are public, no amend takes place so |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1565 # there are no newnodes and therefore no diff update to do. |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1566 if fold and newnodes: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1567 diff = diffmap[old.node()] |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1568 |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1569 # The diff object in diffmap doesn't have the local commits |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1570 # because that could be returned from differential.creatediff, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1571 # not differential.querydiffs. So use the queried diff (if |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1572 # present), or force the amend (a new revision is being posted.) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1573 if not olddiff or set(newnodes) != getlocalcommits(olddiff): |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1574 _debug(ui, b"updating local commit list for D%d\n" % drevid) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1575 _amend_diff_properties(unfi, drevid, newnodes, diff) |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1576 else: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1577 _debug( |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1578 ui, |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1579 b"local commit list for D%d is already up-to-date\n" |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1580 % drevid, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1581 ) |
44717
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1582 elif fold: |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1583 _debug(ui, b"no newnodes to update\n") |
3dc6a70779f2
phabricator: add an option to fold several commits into one review (issue6244)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44715
diff
changeset
|
1584 |
44720
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1585 # Restack any children of first-time submissions that were orphaned |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1586 # in the process. The ctx won't report that it is an orphan until |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1587 # the cleanup takes place below. |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1588 for old in restack: |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1589 parents = [ |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1590 mapping.get(old.p1().node(), (old.p1(),))[0], |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1591 mapping.get(old.p2().node(), (old.p2(),))[0], |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1592 ] |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1593 new = context.metadataonlyctx( |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1594 repo, |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1595 old, |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1596 parents=parents, |
45426
1a5d3e555c70
phabricator: update the hashes in commit messages as they get submitted
Matt Harbison <matt_harbison@yahoo.com>
parents:
45246
diff
changeset
|
1597 text=rewriteutil.update_hash_refs( |
1a5d3e555c70
phabricator: update the hashes in commit messages as they get submitted
Matt Harbison <matt_harbison@yahoo.com>
parents:
45246
diff
changeset
|
1598 repo, old.description(), mapping |
1a5d3e555c70
phabricator: update the hashes in commit messages as they get submitted
Matt Harbison <matt_harbison@yahoo.com>
parents:
45246
diff
changeset
|
1599 ), |
44720
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1600 user=old.user(), |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1601 date=old.date(), |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1602 extra=old.extra(), |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1603 ) |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1604 |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1605 newnode = new.commit() |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1606 |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1607 # Don't obsolete unselected descendants of nodes that have not |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1608 # been changed in this transaction- that results in an error. |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1609 if newnode != old.node(): |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1610 mapping[old.node()] = [newnode] |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1611 _debug( |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1612 ui, |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1613 b"restabilizing %s as %s\n" |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1614 % (short(old.node()), short(newnode)), |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1615 ) |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1616 else: |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1617 _debug( |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1618 ui, |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1619 b"not restabilizing unchanged %s\n" % short(old.node()), |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1620 ) |
601ce5392cb0
phabricator: restack any new orphans created by phabsend (issue6045)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44719
diff
changeset
|
1621 |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38392
diff
changeset
|
1622 scmutil.cleanupnodes(repo, mapping, b'phabsend', fixphase=True) |
33787
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1623 if wnode in mapping: |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1624 unfi.setparents(mapping[wnode][0]) |
fa3aa6c98bb7
phabricator: add --amend option to phabsend
Jun Wu <quark@fb.com>
parents:
33785
diff
changeset
|
1625 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1626 |
33264
266321579c68
phabricator: add node and p1 to hg:meta property
Jun Wu <quark@fb.com>
parents:
33263
diff
changeset
|
1627 # Map from "hg:meta" keys to header understood by "hg import". The order is |
266321579c68
phabricator: add node and p1 to hg:meta property
Jun Wu <quark@fb.com>
parents:
33263
diff
changeset
|
1628 # consistent with "hg export" output. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1629 _metanamemap = util.sortdict( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1630 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1631 (b'user', b'User'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1632 (b'date', b'Date'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1633 (b'branch', b'Branch'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1634 (b'node', b'Node ID'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1635 (b'parent', b'Parent '), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1636 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1637 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1638 |
33264
266321579c68
phabricator: add node and p1 to hg:meta property
Jun Wu <quark@fb.com>
parents:
33263
diff
changeset
|
1639 |
33978
088598153aa2
phabsend: show associated Differential Revisions with --confirm
Jun Wu <quark@fb.com>
parents:
33977
diff
changeset
|
1640 def _confirmbeforesend(repo, revs, oldmap): |
42433
500b64c5d991
phabricator: pass ui into readurltoken instead of passing repo
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42431
diff
changeset
|
1641 url, token = readurltoken(repo.ui) |
33690
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1642 ui = repo.ui |
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1643 for rev in revs: |
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1644 ctx = repo[rev] |
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1645 desc = ctx.description().splitlines()[0] |
33978
088598153aa2
phabsend: show associated Differential Revisions with --confirm
Jun Wu <quark@fb.com>
parents:
33977
diff
changeset
|
1646 oldnode, olddiff, drevid = oldmap.get(ctx.node(), (None, None, None)) |
088598153aa2
phabsend: show associated Differential Revisions with --confirm
Jun Wu <quark@fb.com>
parents:
33977
diff
changeset
|
1647 if drevid: |
43321
a2ff3aff81d2
py3: use %d instead of %s when formatting an int into a bytestring
Ian Moody <moz-ian@perix.co.uk>
parents:
43282
diff
changeset
|
1648 drevdesc = ui.label(b'D%d' % drevid, b'phabricator.drev') |
33978
088598153aa2
phabsend: show associated Differential Revisions with --confirm
Jun Wu <quark@fb.com>
parents:
33977
diff
changeset
|
1649 else: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1650 drevdesc = ui.label(_(b'NEW'), b'phabricator.drev') |
33978
088598153aa2
phabsend: show associated Differential Revisions with --confirm
Jun Wu <quark@fb.com>
parents:
33977
diff
changeset
|
1651 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1652 ui.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1653 _(b'%s - %s: %s\n') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1654 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1655 drevdesc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1656 ui.label(bytes(ctx), b'phabricator.node'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1657 ui.label(desc, b'phabricator.desc'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1658 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1659 ) |
33690
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1660 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1661 if ui.promptchoice( |
44945
7a0a1be721a3
phabricator: make it clear what happen when no response
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
44847
diff
changeset
|
1662 _(b'Send the above changes to %s (Y/n)?$$ &Yes $$ &No') % url |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1663 ): |
33690
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1664 return False |
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1665 |
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1666 return True |
40cfe3197bc1
phabricator: add --confirm option to phabsend command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33601
diff
changeset
|
1667 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1668 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1669 _knownstatusnames = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1670 b'accepted', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1671 b'needsreview', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1672 b'needsrevision', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1673 b'closed', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1674 b'abandoned', |
43857
74ec6ca0eb75
phabricator: add the "Changes Planned" status name
Matt Harbison <matt_harbison@yahoo.com>
parents:
43840
diff
changeset
|
1675 b'changesplanned', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1676 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1677 |
33833
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
1678 |
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
1679 def _getstatusname(drev): |
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
1680 """get normalized status name from a Differential Revision""" |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1681 return drev[b'statusName'].replace(b' ', b'').lower() |
33833
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
1682 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1683 |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1684 # Small language to specify differential revisions. Support symbols: (), :X, |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1685 # +, and -. |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1686 |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1687 _elements = { |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1688 # token-type: binding-strength, primary, prefix, infix, suffix |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1689 b'(': (12, None, (b'group', 1, b')'), None, None), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1690 b':': (8, None, (b'ancestors', 8), None, None), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1691 b'&': (5, None, None, (b'and_', 5), None), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1692 b'+': (4, None, None, (b'add', 4), None), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1693 b'-': (4, None, None, (b'sub', 4), None), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1694 b')': (0, None, None, None, None), |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1695 b'symbol': (0, b'symbol', None, None, None), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1696 b'end': (0, None, None, None, None), |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1697 } |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1698 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1699 |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1700 def _tokenize(text): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1701 view = memoryview(text) # zero-copy slice |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1702 special = b'():+-& ' |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1703 pos = 0 |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1704 length = len(text) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1705 while pos < length: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1706 symbol = b''.join( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1707 itertools.takewhile( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1708 lambda ch: ch not in special, pycompat.iterbytestr(view[pos:]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1709 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1710 ) |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1711 if symbol: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1712 yield (b'symbol', symbol, pos) |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1713 pos += len(symbol) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1714 else: # special char, ignore space |
43282
47946f08e463
py3: don't index into bytes in phabricator's _tokenize()
Ian Moody <moz-ian@perix.co.uk>
parents:
43264
diff
changeset
|
1715 if text[pos : pos + 1] != b' ': |
47946f08e463
py3: don't index into bytes in phabricator's _tokenize()
Ian Moody <moz-ian@perix.co.uk>
parents:
43264
diff
changeset
|
1716 yield (text[pos : pos + 1], None, pos) |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1717 pos += 1 |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1718 yield (b'end', None, pos) |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1719 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1720 |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1721 def _parse(text): |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1722 tree, pos = parser.parser(_elements).parse(_tokenize(text)) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1723 if pos != len(text): |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1724 raise error.ParseError(b'invalid token', pos) |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1725 return tree |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1726 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1727 |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1728 def _parsedrev(symbol): |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1729 """str -> int or None, ex. 'D45' -> 45; '12' -> 12; 'x' -> None""" |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1730 if symbol.startswith(b'D') and symbol[1:].isdigit(): |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1731 return int(symbol[1:]) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1732 if symbol.isdigit(): |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1733 return int(symbol) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1734 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1735 |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1736 def _prefetchdrevs(tree): |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1737 """return ({single-drev-id}, {ancestor-drev-id}) to prefetch""" |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1738 drevs = set() |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1739 ancestordrevs = set() |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1740 op = tree[0] |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1741 if op == b'symbol': |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1742 r = _parsedrev(tree[1]) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1743 if r: |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1744 drevs.add(r) |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1745 elif op == b'ancestors': |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1746 r, a = _prefetchdrevs(tree[1]) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1747 drevs.update(r) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1748 ancestordrevs.update(r) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1749 ancestordrevs.update(a) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1750 else: |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1751 for t in tree[1:]: |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1752 r, a = _prefetchdrevs(t) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1753 drevs.update(r) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1754 ancestordrevs.update(a) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1755 return drevs, ancestordrevs |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1756 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1757 |
44419
df8053082364
phabricator: pass ui instead of repo to `querydrev()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44418
diff
changeset
|
1758 def querydrev(ui, spec): |
33267
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1759 """return a list of "Differential Revision" dicts |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1760 |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1761 spec is a string using a simple query language, see docstring in phabread |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1762 for details. |
33267
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1763 |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1764 A "Differential Revision dict" looks like: |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1765 |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1766 { |
44393
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1767 "activeDiffPHID": "PHID-DIFF-xoqnjkobbm6k4dk6hi72", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1768 "authorPHID": "PHID-USER-tv3ohwc4v4jeu34otlye", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1769 "auxiliary": { |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1770 "phabricator:depends-on": [ |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1771 "PHID-DREV-gbapp366kutjebt7agcd" |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1772 ] |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1773 "phabricator:projects": [], |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1774 }, |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1775 "branch": "default", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1776 "ccs": [], |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1777 "commits": [], |
33267
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1778 "dateCreated": "1499181406", |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1779 "dateModified": "1499182103", |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1780 "diffs": [ |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1781 "3", |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1782 "4", |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1783 ], |
44393
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1784 "hashes": [], |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1785 "id": "2", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1786 "lineCount": "2", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1787 "phid": "PHID-DREV-672qvysjcczopag46qty", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1788 "properties": {}, |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1789 "repositoryPHID": "PHID-REPO-hub2hx62ieuqeheznasv", |
33267
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1790 "reviewers": [], |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1791 "sourcePath": null |
44393
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1792 "status": "0", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1793 "statusName": "Needs Review", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1794 "summary": "", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1795 "testPlan": "", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1796 "title": "example", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1797 "uri": "https://phab.example.com/D2", |
33267
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1798 } |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1799 """ |
44393
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1800 # TODO: replace differential.query and differential.querydiffs with |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1801 # differential.diff.search because the former (and their output) are |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1802 # frozen, and planned to be deprecated and removed. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1803 |
33269
ead6749354e1
phabricator: try to fetch differential revisions in batch
Jun Wu <quark@fb.com>
parents:
33268
diff
changeset
|
1804 def fetch(params): |
ead6749354e1
phabricator: try to fetch differential revisions in batch
Jun Wu <quark@fb.com>
parents:
33268
diff
changeset
|
1805 """params -> single drev or None""" |
41902
59bae59b7498
py3: fix a few "dict keys as str instead of bytes" issues in phabricator.py
Ian Moody <moz-ian@perix.co.uk>
parents:
41901
diff
changeset
|
1806 key = (params.get(b'ids') or params.get(b'phids') or [None])[0] |
33269
ead6749354e1
phabricator: try to fetch differential revisions in batch
Jun Wu <quark@fb.com>
parents:
33268
diff
changeset
|
1807 if key in prefetched: |
ead6749354e1
phabricator: try to fetch differential revisions in batch
Jun Wu <quark@fb.com>
parents:
33268
diff
changeset
|
1808 return prefetched[key] |
44419
df8053082364
phabricator: pass ui instead of repo to `querydrev()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44418
diff
changeset
|
1809 drevs = callconduit(ui, b'differential.query', params) |
33269
ead6749354e1
phabricator: try to fetch differential revisions in batch
Jun Wu <quark@fb.com>
parents:
33268
diff
changeset
|
1810 # Fill prefetched with the result |
ead6749354e1
phabricator: try to fetch differential revisions in batch
Jun Wu <quark@fb.com>
parents:
33268
diff
changeset
|
1811 for drev in drevs: |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1812 prefetched[drev[b'phid']] = drev |
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1813 prefetched[int(drev[b'id'])] = drev |
33269
ead6749354e1
phabricator: try to fetch differential revisions in batch
Jun Wu <quark@fb.com>
parents:
33268
diff
changeset
|
1814 if key not in prefetched: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1815 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1816 _(b'cannot get Differential Revision %r') % params |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1817 ) |
33269
ead6749354e1
phabricator: try to fetch differential revisions in batch
Jun Wu <quark@fb.com>
parents:
33268
diff
changeset
|
1818 return prefetched[key] |
ead6749354e1
phabricator: try to fetch differential revisions in batch
Jun Wu <quark@fb.com>
parents:
33268
diff
changeset
|
1819 |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1820 def getstack(topdrevids): |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1821 """given a top, get a stack from the bottom, [id] -> [id]""" |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1822 visited = set() |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1823 result = [] |
41902
59bae59b7498
py3: fix a few "dict keys as str instead of bytes" issues in phabricator.py
Ian Moody <moz-ian@perix.co.uk>
parents:
41901
diff
changeset
|
1824 queue = [{b'ids': [i]} for i in topdrevids] |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1825 while queue: |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1826 params = queue.pop() |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1827 drev = fetch(params) |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1828 if drev[b'id'] in visited: |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1829 continue |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1830 visited.add(drev[b'id']) |
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1831 result.append(int(drev[b'id'])) |
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1832 auxiliary = drev.get(b'auxiliary', {}) |
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1833 depends = auxiliary.get(b'phabricator:depends-on', []) |
33267
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1834 for phid in depends: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1835 queue.append({b'phids': [phid]}) |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1836 result.reverse() |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1837 return smartset.baseset(result) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1838 |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1839 # Initialize prefetch cache |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1840 prefetched = {} # {id or phid: drev} |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1841 |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1842 tree = _parse(spec) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1843 drevs, ancestordrevs = _prefetchdrevs(tree) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1844 |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1845 # developer config: phabricator.batchsize |
44419
df8053082364
phabricator: pass ui instead of repo to `querydrev()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44418
diff
changeset
|
1846 batchsize = ui.configint(b'phabricator', b'batchsize') |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1847 |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1848 # Prefetch Differential Revisions in batch |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1849 tofetch = set(drevs) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1850 for r in ancestordrevs: |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1851 tofetch.update(range(max(1, r - batchsize), r + 1)) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1852 if drevs: |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1853 fetch({b'ids': list(tofetch)}) |
33833
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
1854 validids = sorted(set(getstack(list(ancestordrevs))) | set(drevs)) |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1855 |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1856 # Walk through the tree, return smartsets |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1857 def walk(tree): |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1858 op = tree[0] |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1859 if op == b'symbol': |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1860 drev = _parsedrev(tree[1]) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1861 if drev: |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1862 return smartset.baseset([drev]) |
33833
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
1863 elif tree[1] in _knownstatusnames: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1864 drevs = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1865 r |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1866 for r in validids |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1867 if _getstatusname(prefetched[r]) == tree[1] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1868 ] |
33833
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
1869 return smartset.baseset(drevs) |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1870 else: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1871 raise error.Abort(_(b'unknown symbol: %s') % tree[1]) |
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1872 elif op in {b'and_', b'add', b'sub'}: |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1873 assert len(tree) == 3 |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1874 return getattr(operator, op)(walk(tree[1]), walk(tree[2])) |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1875 elif op == b'group': |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1876 return walk(tree[1]) |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1877 elif op == b'ancestors': |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1878 return getstack(walk(tree[1])) |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1879 else: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1880 raise error.ProgrammingError(b'illegal tree: %r' % tree) |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1881 |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
1882 return [prefetched[r] for r in walk(tree)] |
33267
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
1883 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1884 |
33268
85391b95961d
phabricator: avoid calling differential.getcommitmessage
Jun Wu <quark@fb.com>
parents:
33267
diff
changeset
|
1885 def getdescfromdrev(drev): |
85391b95961d
phabricator: avoid calling differential.getcommitmessage
Jun Wu <quark@fb.com>
parents:
33267
diff
changeset
|
1886 """get description (commit message) from "Differential Revision" |
85391b95961d
phabricator: avoid calling differential.getcommitmessage
Jun Wu <quark@fb.com>
parents:
33267
diff
changeset
|
1887 |
85391b95961d
phabricator: avoid calling differential.getcommitmessage
Jun Wu <quark@fb.com>
parents:
33267
diff
changeset
|
1888 This is similar to differential.getcommitmessage API. But we only care |
85391b95961d
phabricator: avoid calling differential.getcommitmessage
Jun Wu <quark@fb.com>
parents:
33267
diff
changeset
|
1889 about limited fields: title, summary, test plan, and URL. |
85391b95961d
phabricator: avoid calling differential.getcommitmessage
Jun Wu <quark@fb.com>
parents:
33267
diff
changeset
|
1890 """ |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1891 title = drev[b'title'] |
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1892 summary = drev[b'summary'].rstrip() |
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1893 testplan = drev[b'testPlan'].rstrip() |
33268
85391b95961d
phabricator: avoid calling differential.getcommitmessage
Jun Wu <quark@fb.com>
parents:
33267
diff
changeset
|
1894 if testplan: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1895 testplan = b'Test Plan:\n%s' % testplan |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1896 uri = b'Differential Revision: %s' % drev[b'uri'] |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
1897 return b'\n\n'.join(filter(None, [title, summary, testplan, uri])) |
33268
85391b95961d
phabricator: avoid calling differential.getcommitmessage
Jun Wu <quark@fb.com>
parents:
33267
diff
changeset
|
1898 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1899 |
44644
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1900 def get_amended_desc(drev, ctx, folded): |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1901 """similar to ``getdescfromdrev``, but supports a folded series of commits |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1902 |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1903 This is used when determining if an individual commit needs to have its |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1904 message amended after posting it for review. The determination is made for |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1905 each individual commit, even when they were folded into one review. |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1906 """ |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1907 if not folded: |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1908 return getdescfromdrev(drev) |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1909 |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1910 uri = b'Differential Revision: %s' % drev[b'uri'] |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1911 |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1912 # Since the commit messages were combined when posting multiple commits |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1913 # with --fold, the fields can't be read from Phabricator here, or *all* |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1914 # affected local revisions will end up with the same commit message after |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1915 # the URI is amended in. Append in the DREV line, or update it if it |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1916 # exists. At worst, this means commit message or test plan updates on |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1917 # Phabricator aren't propagated back to the repository, but that seems |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1918 # reasonable for the case where local commits are effectively combined |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1919 # in Phabricator. |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1920 m = _differentialrevisiondescre.search(ctx.description()) |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1921 if not m: |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1922 return b'\n\n'.join([ctx.description(), uri]) |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1923 |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1924 return _differentialrevisiondescre.sub(uri, ctx.description()) |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1925 |
dbe9182c90f5
phabricator: combine commit messages into the review when folding commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
44643
diff
changeset
|
1926 |
44646
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1927 def getlocalcommits(diff): |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1928 """get the set of local commits from a diff object |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1929 |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1930 See ``getdiffmeta()`` for an example diff object. |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1931 """ |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1932 props = diff.get(b'properties') or {} |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1933 commits = props.get(b'local:commits') or {} |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1934 if len(commits) > 1: |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1935 return {bin(c) for c in commits.keys()} |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1936 |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1937 # Storing the diff metadata predates storing `local:commits`, so continue |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1938 # to use that in the --no-fold case. |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1939 return {bin(getdiffmeta(diff).get(b'node', b'')) or None} |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1940 |
5f9c917e3b50
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
Matt Harbison <matt_harbison@yahoo.com>
parents:
44645
diff
changeset
|
1941 |
33441
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1942 def getdiffmeta(diff): |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1943 """get commit metadata (date, node, user, p1) from a diff object |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1944 |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1945 The metadata could be "hg:meta", sent by phabsend, like: |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1946 |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1947 "properties": { |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1948 "hg:meta": { |
44393
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1949 "branch": "default", |
33441
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1950 "date": "1499571514 25200", |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1951 "node": "98c08acae292b2faf60a279b4189beb6cff1414d", |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1952 "user": "Foo Bar <foo@example.com>", |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1953 "parent": "6d0abad76b30e4724a37ab8721d630394070fe16" |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1954 } |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1955 } |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1956 |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1957 Or converted from "local:commits", sent by "arc", like: |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1958 |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1959 "properties": { |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1960 "local:commits": { |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1961 "98c08acae292b2faf60a279b4189beb6cff1414d": { |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1962 "author": "Foo Bar", |
44393
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1963 "authorEmail": "foo@example.com" |
33441
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1964 "branch": "default", |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1965 "commit": "98c08acae292b2faf60a279b4189beb6cff1414d", |
44393
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1966 "local": "1000", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1967 "message": "...", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1968 "parents": ["6d0abad76b30e4724a37ab8721d630394070fe16"], |
33441
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1969 "rev": "98c08acae292b2faf60a279b4189beb6cff1414d", |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1970 "summary": "...", |
44393
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1971 "tag": "", |
adb93aa98c78
phabricator: update the protocol documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
44329
diff
changeset
|
1972 "time": 1499546314, |
33441
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1973 } |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1974 } |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1975 } |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1976 |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1977 Note: metadata extracted from "local:commits" will lose time zone |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1978 information. |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
1979 """ |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1980 props = diff.get(b'properties') or {} |
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
1981 meta = props.get(b'hg:meta') |
42257
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1982 if not meta: |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1983 if props.get(b'local:commits'): |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1984 commit = sorted(props[b'local:commits'].values())[0] |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1985 meta = {} |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1986 if b'author' in commit and b'authorEmail' in commit: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1987 meta[b'user'] = b'%s <%s>' % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1988 commit[b'author'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1989 commit[b'authorEmail'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
1990 ) |
42257
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1991 if b'time' in commit: |
42618
c17e6a3e7356
phabricator: handle local:commits time being string or int
Ian Moody <moz-ian@perix.co.uk>
parents:
42449
diff
changeset
|
1992 meta[b'date'] = b'%d 0' % int(commit[b'time']) |
42257
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1993 if b'branch' in commit: |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1994 meta[b'branch'] = commit[b'branch'] |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1995 node = commit.get(b'commit', commit.get(b'rev')) |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1996 if node: |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1997 meta[b'node'] = node |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1998 if len(commit.get(b'parents', ())) >= 1: |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
1999 meta[b'parent'] = commit[b'parents'][0] |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
2000 else: |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
2001 meta = {} |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
2002 if b'date' not in meta and b'dateCreated' in diff: |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
2003 meta[b'date'] = b'%s 0' % diff[b'dateCreated'] |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
2004 if b'branch' not in meta and diff.get(b'branch'): |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
2005 meta[b'branch'] = diff[b'branch'] |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
2006 if b'parent' not in meta and diff.get(b'sourceControlBaseRevision'): |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
2007 meta[b'parent'] = diff[b'sourceControlBaseRevision'] |
a4f7dceb07bf
phabricator: fallback to reading metadata from diff for phabread
Ian Moody <moz-ian@perix.co.uk>
parents:
42256
diff
changeset
|
2008 return meta |
33441
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
2009 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2010 |
44585
2d63a8910db6
phabricator: remove *-argument from _getdrevs()
Yuya Nishihara <yuya@tcha.org>
parents:
44579
diff
changeset
|
2011 def _getdrevs(ui, stack, specs): |
44578
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2012 """convert user supplied DREVSPECs into "Differential Revision" dicts |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2013 |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2014 See ``hg help phabread`` for how to specify each DREVSPEC. |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2015 """ |
44585
2d63a8910db6
phabricator: remove *-argument from _getdrevs()
Yuya Nishihara <yuya@tcha.org>
parents:
44579
diff
changeset
|
2016 if len(specs) > 0: |
44578
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2017 |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2018 def _formatspec(s): |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2019 if stack: |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2020 s = b':(%s)' % s |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2021 return b'(%s)' % s |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2022 |
44585
2d63a8910db6
phabricator: remove *-argument from _getdrevs()
Yuya Nishihara <yuya@tcha.org>
parents:
44579
diff
changeset
|
2023 spec = b'+'.join(pycompat.maplist(_formatspec, specs)) |
44578
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2024 |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2025 drevs = querydrev(ui, spec) |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2026 if drevs: |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2027 return drevs |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2028 |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2029 raise error.Abort(_(b"empty DREVSPEC set")) |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2030 |
90adda73676a
phabricator: add a helper function to convert DREVSPECs to a DREV dict list
Matt Harbison <matt_harbison@yahoo.com>
parents:
44568
diff
changeset
|
2031 |
44418
41217dfa7a6d
phabricator: pass ui instead of repo to `readpatch()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44393
diff
changeset
|
2032 def readpatch(ui, drevs, write): |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2033 """generate plain-text patch readable by 'hg import' |
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2034 |
44422
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2035 write takes a list of (DREV, bytes), where DREV is the differential number |
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2036 (as bytes, without the "D" prefix) and the bytes are the text of a patch |
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2037 to be imported. drevs is what "querydrev" returns, results of |
33831
75fdaf851e83
phabricator: change "readpatch" to be more flexible
Jun Wu <quark@fb.com>
parents:
33787
diff
changeset
|
2038 "differential.query". |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2039 """ |
33267
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
2040 # Prefetch hg:meta property for all diffs |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44436
diff
changeset
|
2041 diffids = sorted({max(int(v) for v in drev[b'diffs']) for drev in drevs}) |
44418
41217dfa7a6d
phabricator: pass ui instead of repo to `readpatch()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44393
diff
changeset
|
2042 diffs = callconduit(ui, b'differential.querydiffs', {b'ids': diffids}) |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2043 |
44422
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2044 patches = [] |
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2045 |
33267
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
2046 # Generate patch for each drev |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
2047 for drev in drevs: |
44418
41217dfa7a6d
phabricator: pass ui instead of repo to `readpatch()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44393
diff
changeset
|
2048 ui.note(_(b'reading D%s\n') % drev[b'id']) |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2049 |
41897
c340a8ac7ef3
phabricator: convert conduit response JSON unicode to bytes inside callconduit
Ian Moody <moz-ian@perix.co.uk>
parents:
41705
diff
changeset
|
2050 diffid = max(int(v) for v in drev[b'diffs']) |
44418
41217dfa7a6d
phabricator: pass ui instead of repo to `readpatch()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44393
diff
changeset
|
2051 body = callconduit(ui, b'differential.getrawdiff', {b'diffID': diffid}) |
33268
85391b95961d
phabricator: avoid calling differential.getcommitmessage
Jun Wu <quark@fb.com>
parents:
33267
diff
changeset
|
2052 desc = getdescfromdrev(drev) |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
2053 header = b'# HG changeset patch\n' |
33267
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
2054 |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
2055 # Try to preserve metadata from hg:meta property. Write hg patch |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
2056 # headers that can be read by the "import" command. See patchheadermap |
dba9f88659a3
phabricator: rework phabread to reduce memory usage and round-trips
Jun Wu <quark@fb.com>
parents:
33266
diff
changeset
|
2057 # and extract in mercurial/patch.py for supported headers. |
41902
59bae59b7498
py3: fix a few "dict keys as str instead of bytes" issues in phabricator.py
Ian Moody <moz-ian@perix.co.uk>
parents:
41901
diff
changeset
|
2058 meta = getdiffmeta(diffs[b'%d' % diffid]) |
33441
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
2059 for k in _metanamemap.keys(): |
de7c6ec27d99
phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com>
parents:
33271
diff
changeset
|
2060 if k in meta: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
2061 header += b'# %s %s\n' % (_metanamemap[k], meta[k]) |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2062 |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
2063 content = b'%s%s\n%s' % (header, desc, body) |
44422
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2064 patches.append((drev[b'id'], content)) |
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2065 |
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2066 # Write patches to the supplied callback |
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2067 write(patches) |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2068 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2069 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2070 @vcrcommand( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2071 b'phabread', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2072 [(b'', b'stack', False, _(b'read dependencies'))], |
44579
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2073 _(b'DREVSPEC... [OPTIONS]'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2074 helpcategory=command.CATEGORY_IMPORT_EXPORT, |
44423
5e2d74e5f450
phabricator: make `hg phabread` work outside of a repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
44422
diff
changeset
|
2075 optionalrepo=True, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2076 ) |
44579
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2077 def phabread(ui, repo, *specs, **opts): |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2078 """print patches from Phabricator suitable for importing |
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2079 |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
2080 DREVSPEC could be a Differential Revision identity, like ``D123``, or just |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
2081 the number ``123``. It could also have common operators like ``+``, ``-``, |
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
2082 ``&``, ``(``, ``)`` for complex queries. Prefix ``:`` could be used to |
44579
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2083 select a stack. If multiple DREVSPEC values are given, the result is the |
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2084 union of each individually evaluated value. No attempt is currently made |
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2085 to reorder the values to run from parent to child. |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
2086 |
33833
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
2087 ``abandoned``, ``accepted``, ``closed``, ``needsreview``, ``needsrevision`` |
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
2088 could be used to filter patches by status. For performance reason, they |
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
2089 only represent a subset of non-status selections and cannot be used alone. |
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
2090 |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
2091 For example, ``:D6+8-(2+D4)`` selects a stack up to D6, plus D8 and exclude |
33833
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
2092 D2 and D4. ``:D9 & needsreview`` selects "Needs Review" revisions in a |
fb59192b4981
phabricator: add status to revision query language
Jun Wu <quark@fb.com>
parents:
33832
diff
changeset
|
2093 stack up to D9. |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2094 |
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2095 If --stack is given, follow dependencies information and read all patches. |
33832
539541779010
phabricator: add a small language to query Differential Revisions
Jun Wu <quark@fb.com>
parents:
33831
diff
changeset
|
2096 It is equivalent to the ``:`` operator. |
33200
04cf9927f350
phabricator: add phabread command to read patches
Jun Wu <quark@fb.com>
parents:
33199
diff
changeset
|
2097 """ |
41970
51ba9fbcca52
py3: use pycompat.byteskwargs on opts in phabricator.py
Ian Moody <moz-ian@perix.co.uk>
parents:
41950
diff
changeset
|
2098 opts = pycompat.byteskwargs(opts) |
44579
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2099 drevs = _getdrevs(ui, opts.get(b'stack'), specs) |
44422
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2100 |
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2101 def _write(patches): |
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2102 for drev, content in patches: |
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2103 ui.write(content) |
d5d262c7e7a2
phabricator: refactor `phabread` to write all patches at once
Matt Harbison <matt_harbison@yahoo.com>
parents:
44421
diff
changeset
|
2104 |
44423
5e2d74e5f450
phabricator: make `hg phabread` work outside of a repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
44422
diff
changeset
|
2105 readpatch(ui, drevs, _write) |
33834
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2106 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2107 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2108 @vcrcommand( |
44550
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2109 b'phabimport', |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2110 [(b'', b'stack', False, _(b'import dependencies as well'))], |
44579
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2111 _(b'DREVSPEC... [OPTIONS]'), |
44550
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2112 helpcategory=command.CATEGORY_IMPORT_EXPORT, |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2113 ) |
44579
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2114 def phabimport(ui, repo, *specs, **opts): |
44550
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2115 """import patches from Phabricator for the specified Differential Revisions |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2116 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2117 The patches are read and applied starting at the parent of the working |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2118 directory. |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2119 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2120 See ``hg help phabread`` for how to specify DREVSPEC. |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2121 """ |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2122 opts = pycompat.byteskwargs(opts) |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2123 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2124 # --bypass avoids losing exec and symlink bits when importing on Windows, |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2125 # and allows importing with a dirty wdir. It also aborts instead of leaving |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2126 # rejects. |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2127 opts[b'bypass'] = True |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2128 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2129 # Mandatory default values, synced with commands.import |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2130 opts[b'strip'] = 1 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2131 opts[b'prefix'] = b'' |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2132 # Evolve 9.3.0 assumes this key is present in cmdutil.tryimportone() |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2133 opts[b'obsolete'] = False |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2134 |
44551
9bae1d1a0f4c
phabricator: add a config knob to import in the secret phase
Matt Harbison <matt_harbison@yahoo.com>
parents:
44550
diff
changeset
|
2135 if ui.configbool(b'phabimport', b'secret'): |
9bae1d1a0f4c
phabricator: add a config knob to import in the secret phase
Matt Harbison <matt_harbison@yahoo.com>
parents:
44550
diff
changeset
|
2136 opts[b'secret'] = True |
44552
f10055b099b3
phabricator: add a config knob to create obsolete markers when importing
Matt Harbison <matt_harbison@yahoo.com>
parents:
44551
diff
changeset
|
2137 if ui.configbool(b'phabimport', b'obsolete'): |
f10055b099b3
phabricator: add a config knob to create obsolete markers when importing
Matt Harbison <matt_harbison@yahoo.com>
parents:
44551
diff
changeset
|
2138 opts[b'obsolete'] = True # Handled by evolve wrapping tryimportone() |
44551
9bae1d1a0f4c
phabricator: add a config knob to import in the secret phase
Matt Harbison <matt_harbison@yahoo.com>
parents:
44550
diff
changeset
|
2139 |
44550
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2140 def _write(patches): |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2141 parents = repo[None].parents() |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2142 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2143 with repo.wlock(), repo.lock(), repo.transaction(b'phabimport'): |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2144 for drev, contents in patches: |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2145 ui.status(_(b'applying patch from D%s\n') % drev) |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2146 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2147 with patch.extract(ui, pycompat.bytesio(contents)) as patchdata: |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2148 msg, node, rej = cmdutil.tryimportone( |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2149 ui, |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2150 repo, |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2151 patchdata, |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2152 parents, |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2153 opts, |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2154 [], |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2155 None, # Never update wdir to another revision |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2156 ) |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2157 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2158 if not node: |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2159 raise error.Abort(_(b'D%s: no diffs found') % drev) |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2160 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2161 ui.note(msg + b'\n') |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2162 parents = [repo[node]] |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2163 |
44579
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2164 drevs = _getdrevs(ui, opts.get(b'stack'), specs) |
44550
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2165 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2166 readpatch(repo.ui, drevs, _write) |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2167 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2168 |
bbb170f9396d
phabricator: add a `phabimport` command
Matt Harbison <matt_harbison@yahoo.com>
parents:
44452
diff
changeset
|
2169 @vcrcommand( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2170 b'phabupdate', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2171 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2172 (b'', b'accept', False, _(b'accept revisions')), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2173 (b'', b'reject', False, _(b'reject revisions')), |
45136
1ff5070c0ab4
phabupdate: allows revisions to be marked "request-review"
Matt Harbison <matt_harbison@yahoo.com>
parents:
45135
diff
changeset
|
2174 (b'', b'request-review', False, _(b'request review on revisions')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2175 (b'', b'abandon', False, _(b'abandon revisions')), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2176 (b'', b'reclaim', False, _(b'reclaim revisions')), |
45137
3ad0855cc602
phabupdate: allow revisions to be marked "closed"
Matt Harbison <matt_harbison@yahoo.com>
parents:
45136
diff
changeset
|
2177 (b'', b'close', False, _(b'close revisions')), |
45138
2010f3143062
phabupdate: allow revisions to be reopened
Matt Harbison <matt_harbison@yahoo.com>
parents:
45137
diff
changeset
|
2178 (b'', b'reopen', False, _(b'reopen revisions')), |
45135
225588c4c255
phabupdate: allow revisions to be marked with "plan changes"
Matt Harbison <matt_harbison@yahoo.com>
parents:
44945
diff
changeset
|
2179 (b'', b'plan-changes', False, _(b'plan changes for revisions')), |
45140
c59e7bed8924
phabupdate: allow resigning from revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
45139
diff
changeset
|
2180 (b'', b'resign', False, _(b'resign as a reviewer from revisions')), |
45139
383b8c77096d
phabupdate: allow revisions to be commandeered
Matt Harbison <matt_harbison@yahoo.com>
parents:
45138
diff
changeset
|
2181 (b'', b'commandeer', False, _(b'commandeer revisions')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2182 (b'm', b'comment', b'', _(b'comment on the last revision')), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2183 ], |
44579
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2184 _(b'DREVSPEC... [OPTIONS]'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2185 helpcategory=command.CATEGORY_IMPORT_EXPORT, |
44421
b715432fabba
phabricator: make `hg phabupdate` work outside of a repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
44420
diff
changeset
|
2186 optionalrepo=True, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2187 ) |
44579
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2188 def phabupdate(ui, repo, *specs, **opts): |
33834
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2189 """update Differential Revision in batch |
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2190 |
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2191 DREVSPEC selects revisions. See :hg:`help phabread` for its usage. |
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2192 """ |
41970
51ba9fbcca52
py3: use pycompat.byteskwargs on opts in phabricator.py
Ian Moody <moz-ian@perix.co.uk>
parents:
41950
diff
changeset
|
2193 opts = pycompat.byteskwargs(opts) |
45135
225588c4c255
phabupdate: allow revisions to be marked with "plan changes"
Matt Harbison <matt_harbison@yahoo.com>
parents:
44945
diff
changeset
|
2194 transactions = [ |
225588c4c255
phabupdate: allow revisions to be marked with "plan changes"
Matt Harbison <matt_harbison@yahoo.com>
parents:
44945
diff
changeset
|
2195 b'abandon', |
225588c4c255
phabupdate: allow revisions to be marked with "plan changes"
Matt Harbison <matt_harbison@yahoo.com>
parents:
44945
diff
changeset
|
2196 b'accept', |
45137
3ad0855cc602
phabupdate: allow revisions to be marked "closed"
Matt Harbison <matt_harbison@yahoo.com>
parents:
45136
diff
changeset
|
2197 b'close', |
45139
383b8c77096d
phabupdate: allow revisions to be commandeered
Matt Harbison <matt_harbison@yahoo.com>
parents:
45138
diff
changeset
|
2198 b'commandeer', |
45135
225588c4c255
phabupdate: allow revisions to be marked with "plan changes"
Matt Harbison <matt_harbison@yahoo.com>
parents:
44945
diff
changeset
|
2199 b'plan-changes', |
225588c4c255
phabupdate: allow revisions to be marked with "plan changes"
Matt Harbison <matt_harbison@yahoo.com>
parents:
44945
diff
changeset
|
2200 b'reclaim', |
225588c4c255
phabupdate: allow revisions to be marked with "plan changes"
Matt Harbison <matt_harbison@yahoo.com>
parents:
44945
diff
changeset
|
2201 b'reject', |
45138
2010f3143062
phabupdate: allow revisions to be reopened
Matt Harbison <matt_harbison@yahoo.com>
parents:
45137
diff
changeset
|
2202 b'reopen', |
45136
1ff5070c0ab4
phabupdate: allows revisions to be marked "request-review"
Matt Harbison <matt_harbison@yahoo.com>
parents:
45135
diff
changeset
|
2203 b'request-review', |
45140
c59e7bed8924
phabupdate: allow resigning from revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
45139
diff
changeset
|
2204 b'resign', |
45135
225588c4c255
phabupdate: allow revisions to be marked with "plan changes"
Matt Harbison <matt_harbison@yahoo.com>
parents:
44945
diff
changeset
|
2205 ] |
225588c4c255
phabupdate: allow revisions to be marked with "plan changes"
Matt Harbison <matt_harbison@yahoo.com>
parents:
44945
diff
changeset
|
2206 flags = [n for n in transactions if opts.get(n.replace(b'-', b'_'))] |
33834
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2207 if len(flags) > 1: |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
2208 raise error.Abort(_(b'%s cannot be used together') % b', '.join(flags)) |
33834
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2209 |
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2210 actions = [] |
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2211 for f in flags: |
43350
132ddd1cba85
phabricator: use True primitive instead of b'true' for phabupdate actions
Ian Moody <moz-ian@perix.co.uk>
parents:
43321
diff
changeset
|
2212 actions.append({b'type': f, b'value': True}) |
33834
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2213 |
44579
a7f8c657a3f0
phabricator: allow multiple DREVSPEC args to phabread|phabimport|phabupdate
Matt Harbison <matt_harbison@yahoo.com>
parents:
44578
diff
changeset
|
2214 drevs = _getdrevs(ui, opts.get(b'stack'), specs) |
33834
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2215 for i, drev in enumerate(drevs): |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
2216 if i + 1 == len(drevs) and opts.get(b'comment'): |
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
2217 actions.append({b'type': b'comment', b'value': opts[b'comment']}) |
33834
6e666cd59879
phabricator: add phabupdate command to update status in batch
Jun Wu <quark@fb.com>
parents:
33833
diff
changeset
|
2218 if actions: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2219 params = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2220 b'objectIdentifier': drev[b'phid'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2221 b'transactions': actions, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2222 } |
42434
f163e2b2594c
phabricator: pass ui instead of repo to callconduit
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42433
diff
changeset
|
2223 callconduit(ui, b'differential.revision.edit', params) |
35722
f18ba40d792f
phabricator: add a template item for linking to a differential review
Tom Prince <mozilla@hocat.ca>
parents:
35626
diff
changeset
|
2224 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2225 |
42973
24bf7a3d3c30
phabricator: use exthelper to register commands, config, and templates
Matt Harbison <matt_harbison@yahoo.com>
parents:
42951
diff
changeset
|
2226 @eh.templatekeyword(b'phabreview', requires={b'ctx'}) |
36514
7b74afec6772
templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents:
35722
diff
changeset
|
2227 def template_review(context, mapping): |
35722
f18ba40d792f
phabricator: add a template item for linking to a differential review
Tom Prince <mozilla@hocat.ca>
parents:
35626
diff
changeset
|
2228 """:phabreview: Object describing the review for this changeset. |
f18ba40d792f
phabricator: add a template item for linking to a differential review
Tom Prince <mozilla@hocat.ca>
parents:
35626
diff
changeset
|
2229 Has attributes `url` and `id`. |
f18ba40d792f
phabricator: add a template item for linking to a differential review
Tom Prince <mozilla@hocat.ca>
parents:
35626
diff
changeset
|
2230 """ |
38392
81a4be7099fa
py3: byte-stringify literals in contrib/phabricator.py as example
Yuya Nishihara <yuya@tcha.org>
parents:
38336
diff
changeset
|
2231 ctx = context.resource(mapping, b'ctx') |
35722
f18ba40d792f
phabricator: add a template item for linking to a differential review
Tom Prince <mozilla@hocat.ca>
parents:
35626
diff
changeset
|
2232 m = _differentialrevisiondescre.search(ctx.description()) |
f18ba40d792f
phabricator: add a template item for linking to a differential review
Tom Prince <mozilla@hocat.ca>
parents:
35626
diff
changeset
|
2233 if m: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2234 return templateutil.hybriddict( |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43504
diff
changeset
|
2235 {b'url': m.group('url'), b'id': b"D%s" % m.group('id'),} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2236 ) |
41164
43fd1947301d
phabricator: teach {phabreview} to work without --amend
Matt Harbison <matt_harbison@yahoo.com>
parents:
41163
diff
changeset
|
2237 else: |
43fd1947301d
phabricator: teach {phabreview} to work without --amend
Matt Harbison <matt_harbison@yahoo.com>
parents:
41163
diff
changeset
|
2238 tags = ctx.repo().nodetags(ctx.node()) |
43fd1947301d
phabricator: teach {phabreview} to work without --amend
Matt Harbison <matt_harbison@yahoo.com>
parents:
41163
diff
changeset
|
2239 for t in tags: |
43fd1947301d
phabricator: teach {phabreview} to work without --amend
Matt Harbison <matt_harbison@yahoo.com>
parents:
41163
diff
changeset
|
2240 if _differentialrevisiontagre.match(t): |
43fd1947301d
phabricator: teach {phabreview} to work without --amend
Matt Harbison <matt_harbison@yahoo.com>
parents:
41163
diff
changeset
|
2241 url = ctx.repo().ui.config(b'phabricator', b'url') |
43fd1947301d
phabricator: teach {phabreview} to work without --amend
Matt Harbison <matt_harbison@yahoo.com>
parents:
41163
diff
changeset
|
2242 if not url.endswith(b'/'): |
43fd1947301d
phabricator: teach {phabreview} to work without --amend
Matt Harbison <matt_harbison@yahoo.com>
parents:
41163
diff
changeset
|
2243 url += b'/' |
43fd1947301d
phabricator: teach {phabreview} to work without --amend
Matt Harbison <matt_harbison@yahoo.com>
parents:
41163
diff
changeset
|
2244 url += t |
43fd1947301d
phabricator: teach {phabreview} to work without --amend
Matt Harbison <matt_harbison@yahoo.com>
parents:
41163
diff
changeset
|
2245 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43047
diff
changeset
|
2246 return templateutil.hybriddict({b'url': url, b'id': t,}) |
41164
43fd1947301d
phabricator: teach {phabreview} to work without --amend
Matt Harbison <matt_harbison@yahoo.com>
parents:
41163
diff
changeset
|
2247 return None |
43839
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2248 |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2249 |
43840
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2250 @eh.templatekeyword(b'phabstatus', requires={b'ctx', b'repo', b'ui'}) |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2251 def template_status(context, mapping): |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2252 """:phabstatus: String. Status of Phabricator differential. |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2253 """ |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2254 ctx = context.resource(mapping, b'ctx') |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2255 repo = context.resource(mapping, b'repo') |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2256 ui = context.resource(mapping, b'ui') |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2257 |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2258 rev = ctx.rev() |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2259 try: |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2260 drevid = getdrevmap(repo, [rev])[rev] |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2261 except KeyError: |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2262 return None |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2263 drevs = callconduit(ui, b'differential.query', {b'ids': [drevid]}) |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2264 for drev in drevs: |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2265 if int(drev[b'id']) == drevid: |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2266 return templateutil.hybriddict( |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2267 {b'url': drev[b'uri'], b'status': drev[b'statusName'],} |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2268 ) |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2269 return None |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2270 |
79c0121220e3
phabricator: add a "phabstatus" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43839
diff
changeset
|
2271 |
43839
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2272 @show.showview(b'phabstatus', csettopic=b'work') |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2273 def phabstatusshowview(ui, repo, displayer): |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2274 """Phabricator differiential status""" |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2275 revs = repo.revs('sort(_underway(), topo)') |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2276 drevmap = getdrevmap(repo, revs) |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44436
diff
changeset
|
2277 unknownrevs, drevids, revsbydrevid = [], set(), {} |
43839
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2278 for rev, drevid in pycompat.iteritems(drevmap): |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2279 if drevid is not None: |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2280 drevids.add(drevid) |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44436
diff
changeset
|
2281 revsbydrevid.setdefault(drevid, set()).add(rev) |
43839
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2282 else: |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2283 unknownrevs.append(rev) |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2284 |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2285 drevs = callconduit(ui, b'differential.query', {b'ids': list(drevids)}) |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2286 drevsbyrev = {} |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2287 for drev in drevs: |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2288 for rev in revsbydrevid[int(drev[b'id'])]: |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2289 drevsbyrev[rev] = drev |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2290 |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2291 def phabstatus(ctx): |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2292 drev = drevsbyrev[ctx.rev()] |
43858
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
2293 status = ui.label( |
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
2294 b'%(statusName)s' % drev, |
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
2295 b'phabricator.status.%s' % _getstatusname(drev), |
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
2296 ) |
b0867b7751ba
phabricator: color the status in the "phabstatus" view
Matt Harbison <matt_harbison@yahoo.com>
parents:
43857
diff
changeset
|
2297 ui.write(b"\n%s %s\n" % (drev[b'uri'], status)) |
43839
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2298 |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2299 revs -= smartset.baseset(unknownrevs) |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2300 revdag = graphmod.dagwalker(repo, revs) |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2301 |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2302 ui.setconfig(b'experimental', b'graphshorten', True) |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2303 displayer._exthook = phabstatus |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2304 nodelen = show.longestshortest(repo, revs) |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2305 logcmdutil.displaygraph( |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2306 ui, |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2307 repo, |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2308 revdag, |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2309 displayer, |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2310 graphmod.asciiedges, |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2311 props={b'nodelen': nodelen}, |
70060915c3f2
phabricator: add a "phabstatus" show view
Denis Laxalde <denis@laxalde.org>
parents:
43829
diff
changeset
|
2312 ) |