phabricator: update diff property even if we choose not to create a new diff
The diff property contains metadata like "HG Node". Previously we skip
uploading a new diff if we are sure that the old patch and new patch have a
same content. That has issues when a pusher adds an obsmarker using the old
"HG Node" stored in the old diff.
This patch adds logic to update the diff property so "HG Node" gets updated
to prevent that issue.
Differential Revision: https://phab.mercurial-scm.org/D229
--- a/contrib/phabricator.py Mon Jul 17 19:52:50 2017 -0700
+++ b/contrib/phabricator.py Fri Aug 04 12:21:23 2017 -0700
@@ -255,7 +255,7 @@
callconduit(ctx.repo(), 'differential.setdiffproperty', params)
def createdifferentialrevision(ctx, revid=None, parentrevid=None, oldnode=None,
- actions=None):
+ olddiff=None, actions=None):
"""create or update a Differential Revision
If revid is None, create a new Differential Revision, otherwise update
@@ -279,6 +279,13 @@
diff = creatediff(ctx)
writediffproperties(ctx, diff)
transactions.append({'type': 'update', 'value': diff[r'phid']})
+ else:
+ # Even if we don't need to upload a new diff because the patch content
+ # does not change. We might still need to update its metadata so
+ # pushers could know the correct node metadata.
+ assert olddiff
+ diff = olddiff
+ writediffproperties(ctx, diff)
# Use a temporary summary to set dependency. There might be better ways but
# I cannot find them for now. But do not do that if we are updating an
@@ -383,7 +390,7 @@
if oldnode != ctx.node():
# Create or update Differential Revision
revision = createdifferentialrevision(ctx, revid, lastrevid,
- oldnode, actions)
+ oldnode, olddiff, actions)
newrevid = int(revision[r'object'][r'id'])
if revid:
action = _('updated')