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