comparison contrib/phabricator.py @ 33268:85391b95961d

phabricator: avoid calling differential.getcommitmessage Previously, we call differential.getcommitmessage API to get commit messages. Now we read that from "Differential Revision" object fetched via "differential.query" API. This removes one API call per patch.
author Jun Wu <quark@fb.com>
date Tue, 04 Jul 2017 16:36:48 -0700
parents dba9f88659a3
children ead6749354e1
comparison
equal deleted inserted replaced
33267:dba9f88659a3 33268:85391b95961d
304 action = _('skipped') 304 action = _('skipped')
305 305
306 ui.write(_('D%s: %s - %s: %s\n') % (newrevid, action, ctx, 306 ui.write(_('D%s: %s - %s: %s\n') % (newrevid, action, ctx,
307 ctx.description().split('\n')[0])) 307 ctx.description().split('\n')[0]))
308 lastrevid = newrevid 308 lastrevid = newrevid
309
310 _summaryre = re.compile('^Summary:\s*', re.M)
311 309
312 # Map from "hg:meta" keys to header understood by "hg import". The order is 310 # Map from "hg:meta" keys to header understood by "hg import". The order is
313 # consistent with "hg export" output. 311 # consistent with "hg export" output.
314 _metanamemap = util.sortdict([(r'user', 'User'), (r'date', 'Date'), 312 _metanamemap = util.sortdict([(r'user', 'User'), (r'date', 'Date'),
315 (r'node', 'Node ID'), (r'parent', 'Parent ')]) 313 (r'node', 'Node ID'), (r'parent', 'Parent ')])
375 for phid in depends: 373 for phid in depends:
376 queue.append({'phids': [phid]}) 374 queue.append({'phids': [phid]})
377 result.reverse() 375 result.reverse()
378 return result 376 return result
379 377
378 def getdescfromdrev(drev):
379 """get description (commit message) from "Differential Revision"
380
381 This is similar to differential.getcommitmessage API. But we only care
382 about limited fields: title, summary, test plan, and URL.
383 """
384 title = drev[r'title']
385 summary = drev[r'summary'].rstrip()
386 testplan = drev[r'testPlan'].rstrip()
387 if testplan:
388 testplan = 'Test Plan:\n%s' % testplan
389 uri = 'Differential Revision: %s' % drev[r'uri']
390 return '\n\n'.join(filter(None, [title, summary, testplan, uri]))
391
380 def readpatch(repo, params, write, stack=False): 392 def readpatch(repo, params, write, stack=False):
381 """generate plain-text patch readable by 'hg import' 393 """generate plain-text patch readable by 'hg import'
382 394
383 write is usually ui.write. params is passed to "differential.query". If 395 write is usually ui.write. params is passed to "differential.query". If
384 stack is True, also write dependent patches. 396 stack is True, also write dependent patches.
394 for drev in drevs: 406 for drev in drevs:
395 repo.ui.note(_('reading D%s\n') % drev[r'id']) 407 repo.ui.note(_('reading D%s\n') % drev[r'id'])
396 408
397 diffid = max(int(v) for v in drev[r'diffs']) 409 diffid = max(int(v) for v in drev[r'diffs'])
398 body = callconduit(repo, 'differential.getrawdiff', {'diffID': diffid}) 410 body = callconduit(repo, 'differential.getrawdiff', {'diffID': diffid})
399 desc = callconduit(repo, 'differential.getcommitmessage', 411 desc = getdescfromdrev(drev)
400 {'revision_id': drev[r'id']})
401 header = '# HG changeset patch\n' 412 header = '# HG changeset patch\n'
402
403 # Remove potential empty "Summary:"
404 desc = _summaryre.sub('', desc)
405 413
406 # Try to preserve metadata from hg:meta property. Write hg patch 414 # Try to preserve metadata from hg:meta property. Write hg patch
407 # headers that can be read by the "import" command. See patchheadermap 415 # headers that can be read by the "import" command. See patchheadermap
408 # and extract in mercurial/patch.py for supported headers. 416 # and extract in mercurial/patch.py for supported headers.
409 props = diffs[str(diffid)][r'properties'] # could be empty list or dict 417 props = diffs[str(diffid)][r'properties'] # could be empty list or dict