106 templatekeyword = eh.templatekeyword |
106 templatekeyword = eh.templatekeyword |
107 uisetup = eh.finaluisetup |
107 uisetup = eh.finaluisetup |
108 |
108 |
109 # developer config: phabricator.batchsize |
109 # developer config: phabricator.batchsize |
110 eh.configitem( |
110 eh.configitem( |
111 b'phabricator', b'batchsize', default=12, |
111 b'phabricator', |
|
112 b'batchsize', |
|
113 default=12, |
112 ) |
114 ) |
113 eh.configitem( |
115 eh.configitem( |
114 b'phabricator', b'callsign', default=None, |
116 b'phabricator', |
|
117 b'callsign', |
|
118 default=None, |
115 ) |
119 ) |
116 eh.configitem( |
120 eh.configitem( |
117 b'phabricator', b'curlcmd', default=None, |
121 b'phabricator', |
|
122 b'curlcmd', |
|
123 default=None, |
118 ) |
124 ) |
119 # developer config: phabricator.debug |
125 # developer config: phabricator.debug |
120 eh.configitem( |
126 eh.configitem( |
121 b'phabricator', b'debug', default=False, |
127 b'phabricator', |
|
128 b'debug', |
|
129 default=False, |
122 ) |
130 ) |
123 # developer config: phabricator.repophid |
131 # developer config: phabricator.repophid |
124 eh.configitem( |
132 eh.configitem( |
125 b'phabricator', b'repophid', default=None, |
133 b'phabricator', |
|
134 b'repophid', |
|
135 default=None, |
126 ) |
136 ) |
127 eh.configitem( |
137 eh.configitem( |
128 b'phabricator', b'url', default=None, |
138 b'phabricator', |
|
139 b'url', |
|
140 default=None, |
129 ) |
141 ) |
130 eh.configitem( |
142 eh.configitem( |
131 b'phabsend', b'confirm', default=False, |
143 b'phabsend', |
|
144 b'confirm', |
|
145 default=False, |
132 ) |
146 ) |
133 eh.configitem( |
147 eh.configitem( |
134 b'phabimport', b'secret', default=False, |
148 b'phabimport', |
|
149 b'secret', |
|
150 default=False, |
135 ) |
151 ) |
136 eh.configitem( |
152 eh.configitem( |
137 b'phabimport', b'obsolete', default=False, |
153 b'phabimport', |
|
154 b'obsolete', |
|
155 default=False, |
138 ) |
156 ) |
139 |
157 |
140 colortable = { |
158 colortable = { |
141 b'phabricator.action.created': b'green', |
159 b'phabricator.action.created': b'green', |
142 b'phabricator.action.skipped': b'magenta', |
160 b'phabricator.action.skipped': b'magenta', |
164 ] |
182 ] |
165 |
183 |
166 |
184 |
167 @eh.wrapfunction(localrepo, "loadhgrc") |
185 @eh.wrapfunction(localrepo, "loadhgrc") |
168 def _loadhgrc(orig, ui, wdirvfs, hgvfs, requirements, *args, **opts): |
186 def _loadhgrc(orig, ui, wdirvfs, hgvfs, requirements, *args, **opts): |
169 """Load ``.arcconfig`` content into a ui instance on repository open. |
187 """Load ``.arcconfig`` content into a ui instance on repository open.""" |
170 """ |
|
171 result = False |
188 result = False |
172 arcconfig = {} |
189 arcconfig = {} |
173 |
190 |
174 try: |
191 try: |
175 # json.loads only accepts bytes from 3.6+ |
192 # json.loads only accepts bytes from 3.6+ |
631 BINARY = 3 |
648 BINARY = 3 |
632 |
649 |
633 |
650 |
634 @attr.s |
651 @attr.s |
635 class phabhunk(dict): |
652 class phabhunk(dict): |
636 """Represents a Differential hunk, which is owned by a Differential change |
653 """Represents a Differential hunk, which is owned by a Differential change""" |
637 """ |
|
638 |
654 |
639 oldOffset = attr.ib(default=0) # camelcase-required |
655 oldOffset = attr.ib(default=0) # camelcase-required |
640 oldLength = attr.ib(default=0) # camelcase-required |
656 oldLength = attr.ib(default=0) # camelcase-required |
641 newOffset = attr.ib(default=0) # camelcase-required |
657 newOffset = attr.ib(default=0) # camelcase-required |
642 newLength = attr.ib(default=0) # camelcase-required |
658 newLength = attr.ib(default=0) # camelcase-required |
1510 parents = [ |
1526 parents = [ |
1511 mapping.get(old.p1().node(), (old.p1(),))[0], |
1527 mapping.get(old.p1().node(), (old.p1(),))[0], |
1512 mapping.get(old.p2().node(), (old.p2(),))[0], |
1528 mapping.get(old.p2().node(), (old.p2(),))[0], |
1513 ] |
1529 ] |
1514 newdesc = rewriteutil.update_hash_refs( |
1530 newdesc = rewriteutil.update_hash_refs( |
1515 repo, newdesc, mapping, |
1531 repo, |
|
1532 newdesc, |
|
1533 mapping, |
1516 ) |
1534 ) |
1517 new = context.metadataonlyctx( |
1535 new = context.metadataonlyctx( |
1518 repo, |
1536 repo, |
1519 old, |
1537 old, |
1520 parents=parents, |
1538 parents=parents, |
2225 """ |
2243 """ |
2226 ctx = context.resource(mapping, b'ctx') |
2244 ctx = context.resource(mapping, b'ctx') |
2227 m = _differentialrevisiondescre.search(ctx.description()) |
2245 m = _differentialrevisiondescre.search(ctx.description()) |
2228 if m: |
2246 if m: |
2229 return templateutil.hybriddict( |
2247 return templateutil.hybriddict( |
2230 {b'url': m.group('url'), b'id': b"D%s" % m.group('id'),} |
2248 { |
|
2249 b'url': m.group('url'), |
|
2250 b'id': b"D%s" % m.group('id'), |
|
2251 } |
2231 ) |
2252 ) |
2232 else: |
2253 else: |
2233 tags = ctx.repo().nodetags(ctx.node()) |
2254 tags = ctx.repo().nodetags(ctx.node()) |
2234 for t in tags: |
2255 for t in tags: |
2235 if _differentialrevisiontagre.match(t): |
2256 if _differentialrevisiontagre.match(t): |
2236 url = ctx.repo().ui.config(b'phabricator', b'url') |
2257 url = ctx.repo().ui.config(b'phabricator', b'url') |
2237 if not url.endswith(b'/'): |
2258 if not url.endswith(b'/'): |
2238 url += b'/' |
2259 url += b'/' |
2239 url += t |
2260 url += t |
2240 |
2261 |
2241 return templateutil.hybriddict({b'url': url, b'id': t,}) |
2262 return templateutil.hybriddict( |
|
2263 { |
|
2264 b'url': url, |
|
2265 b'id': t, |
|
2266 } |
|
2267 ) |
2242 return None |
2268 return None |
2243 |
2269 |
2244 |
2270 |
2245 @eh.templatekeyword(b'phabstatus', requires={b'ctx', b'repo', b'ui'}) |
2271 @eh.templatekeyword(b'phabstatus', requires={b'ctx', b'repo', b'ui'}) |
2246 def template_status(context, mapping): |
2272 def template_status(context, mapping): |
2247 """:phabstatus: String. Status of Phabricator differential. |
2273 """:phabstatus: String. Status of Phabricator differential.""" |
2248 """ |
|
2249 ctx = context.resource(mapping, b'ctx') |
2274 ctx = context.resource(mapping, b'ctx') |
2250 repo = context.resource(mapping, b'repo') |
2275 repo = context.resource(mapping, b'repo') |
2251 ui = context.resource(mapping, b'ui') |
2276 ui = context.resource(mapping, b'ui') |
2252 |
2277 |
2253 rev = ctx.rev() |
2278 rev = ctx.rev() |
2257 return None |
2282 return None |
2258 drevs = callconduit(ui, b'differential.query', {b'ids': [drevid]}) |
2283 drevs = callconduit(ui, b'differential.query', {b'ids': [drevid]}) |
2259 for drev in drevs: |
2284 for drev in drevs: |
2260 if int(drev[b'id']) == drevid: |
2285 if int(drev[b'id']) == drevid: |
2261 return templateutil.hybriddict( |
2286 return templateutil.hybriddict( |
2262 {b'url': drev[b'uri'], b'status': drev[b'statusName'],} |
2287 { |
|
2288 b'url': drev[b'uri'], |
|
2289 b'status': drev[b'statusName'], |
|
2290 } |
2263 ) |
2291 ) |
2264 return None |
2292 return None |
2265 |
2293 |
2266 |
2294 |
2267 @show.showview(b'phabstatus', csettopic=b'work') |
2295 @show.showview(b'phabstatus', csettopic=b'work') |