# HG changeset patch # User Jun Wu # Date 2017-08-04 19:21:23 # Node ID f100354cce52918420f7116e588cfc61ae8690ca # Parent 1664406a44d953faf809754a367b295c09407027 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 diff --git a/contrib/phabricator.py b/contrib/phabricator.py --- a/contrib/phabricator.py +++ b/contrib/phabricator.py @@ -255,7 +255,7 @@ def writediffproperties(ctx, diff): 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 @@ def createdifferentialrevision(ctx, revi 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 @@ def phabsend(ui, repo, *revs, **opts): 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')