diff -r 8e6f4939a69a -r ed61189763ef contrib/phabricator.py --- a/contrib/phabricator.py Wed Jul 05 11:10:11 2017 -0500 +++ b/contrib/phabricator.py Tue Jul 04 16:16:37 2017 -0700 @@ -135,7 +135,9 @@ repo.ui.setconfig('phabricator', 'repophid', repophid) return repophid -_differentialrevisionre = re.compile('\AD([1-9][0-9]*)\Z') +_differentialrevisiontagre = re.compile('\AD([1-9][0-9]*)\Z') +_differentialrevisiondescre = re.compile( + '^Differential Revision:.*D([1-9][0-9]*)$', re.M) def getmapping(ctx): """return (node, associated Differential Revision ID) or (None, None) @@ -143,15 +145,26 @@ Examines all precursors and their tags. Tags with format like "D1234" are considered a match and the node with that tag, and the number after "D" (ex. 1234) will be returned. + + If tags are not found, examine commit message. The "Differential Revision:" + line could associate this changeset to a Differential Revision. """ unfi = ctx.repo().unfiltered() nodemap = unfi.changelog.nodemap + + # Check tags like "D123" for n in obsolete.allprecursors(unfi.obsstore, [ctx.node()]): if n in nodemap: for tag in unfi.nodetags(n): - m = _differentialrevisionre.match(tag) + m = _differentialrevisiontagre.match(tag) if m: return n, int(m.group(1)) + + # Check commit message + m = _differentialrevisiondescre.search(ctx.description()) + if m: + return None, int(m.group(1)) + return None, None def getdiff(ctx, diffopts):