Patchwork [06,of,10] phabricator: avoid calling differential.getcommitmessage

login
register
mail settings
Submitter Jun Wu
Date July 5, 2017, 1:58 a.m.
Message ID <992fc5ed028d5312eb96.1499219911@x1c>
Download mbox | patch
Permalink /patch/22002/
State Accepted
Headers show

Comments

Jun Wu - July 5, 2017, 1:58 a.m.
# HG changeset patch
# User Jun Wu <quark@fb.com>
# Date 1499211408 25200
#      Tue Jul 04 16:36:48 2017 -0700
# Node ID 992fc5ed028d5312eb96acd360b6cc6611cc76bd
# Parent  71433de5157b49dfbb58ebe638a5c5ae780763dc
# Available At https://bitbucket.org/quark-zju/hg-draft
#              hg pull https://bitbucket.org/quark-zju/hg-draft -r 992fc5ed028d
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.

Patch

diff --git a/contrib/phabricator.py b/contrib/phabricator.py
--- a/contrib/phabricator.py
+++ b/contrib/phabricator.py
@@ -308,6 +308,4 @@  def phabsend(ui, repo, *revs, **opts):
         lastrevid = newrevid
 
-_summaryre = re.compile('^Summary:\s*', re.M)
-
 # Map from "hg:meta" keys to header understood by "hg import". The order is
 # consistent with "hg export" output.
@@ -378,4 +376,18 @@  def querydrev(repo, params, stack=False)
     return result
 
+def getdescfromdrev(drev):
+    """get description (commit message) from "Differential Revision"
+
+    This is similar to differential.getcommitmessage API. But we only care
+    about limited fields: title, summary, test plan, and URL.
+    """
+    title = drev[r'title']
+    summary = drev[r'summary'].rstrip()
+    testplan = drev[r'testPlan'].rstrip()
+    if testplan:
+        testplan = 'Test Plan:\n%s' % testplan
+    uri = 'Differential Revision: %s' % drev[r'uri']
+    return '\n\n'.join(filter(None, [title, summary, testplan, uri]))
+
 def readpatch(repo, params, write, stack=False):
     """generate plain-text patch readable by 'hg import'
@@ -397,11 +409,7 @@  def readpatch(repo, params, write, stack
         diffid = max(int(v) for v in drev[r'diffs'])
         body = callconduit(repo, 'differential.getrawdiff', {'diffID': diffid})
-        desc = callconduit(repo, 'differential.getcommitmessage',
-                           {'revision_id': drev[r'id']})
+        desc = getdescfromdrev(drev)
         header = '# HG changeset patch\n'
 
-        # Remove potential empty "Summary:"
-        desc = _summaryre.sub('', desc)
-
         # Try to preserve metadata from hg:meta property. Write hg patch
         # headers that can be read by the "import" command. See patchheadermap