comparison hgext/phabricator.py @ 43262:af067d29b19e

phabricator: switch to the creatediff endpoint This lets the extension submit binary files, as well as set branch info so that it is exposed in the Phabricator interface. Differential Revision: https://phab.mercurial-scm.org/D7053
author Ian Moody <moz-ian@perix.co.uk>
date Sun, 06 Oct 2019 18:23:06 +0100
parents f5aa4a53acd1
children 06a33a501aa2
comparison
equal deleted inserted replaced
43261:f5aa4a53acd1 43262:af067d29b19e
798 798
799 def creatediff(ctx): 799 def creatediff(ctx):
800 """create a Differential Diff""" 800 """create a Differential Diff"""
801 repo = ctx.repo() 801 repo = ctx.repo()
802 repophid = getrepophid(repo) 802 repophid = getrepophid(repo)
803 # Create a "Differential Diff" via "differential.createrawdiff" API 803 # Create a "Differential Diff" via "differential.creatediff" API
804 params = {b'diff': getdiff(ctx, mdiff.diffopts(git=True, context=32767))} 804 pdiff = phabdiff(
805 sourceControlBaseRevision=b'%s' % ctx.p1().hex(),
806 branch=b'%s' % ctx.branch(),
807 )
808 modified, added, removed, _d, _u, _i, _c = ctx.p1().status(ctx)
809 # addadded will remove moved files from removed, so addremoved won't get
810 # them
811 addadded(pdiff, ctx, added, removed)
812 addmodified(pdiff, ctx, modified)
813 addremoved(pdiff, ctx, removed)
805 if repophid: 814 if repophid:
806 params[b'repositoryPHID'] = repophid 815 pdiff.repositoryPHID = repophid
807 diff = callconduit(repo.ui, b'differential.createrawdiff', params) 816 diff = callconduit(
817 repo.ui,
818 b'differential.creatediff',
819 pycompat.byteskwargs(attr.asdict(pdiff)),
820 )
808 if not diff: 821 if not diff:
809 raise error.Abort(_(b'cannot create diff for %s') % ctx) 822 raise error.Abort(_(b'cannot create diff for %s') % ctx)
810 return diff 823 return diff
811 824
812 825
813 def writediffproperties(ctx, diff): 826 def writediffproperties(ctx, diff):
814 """write metadata to diff so patches could be applied losslessly""" 827 """write metadata to diff so patches could be applied losslessly"""
828 # creatediff returns with a diffid but query returns with an id
829 diffid = diff.get(b'diffid', diff.get(b'id'))
815 params = { 830 params = {
816 b'diff_id': diff[b'id'], 831 b'diff_id': diffid,
817 b'name': b'hg:meta', 832 b'name': b'hg:meta',
818 b'data': templatefilters.json( 833 b'data': templatefilters.json(
819 { 834 {
820 b'user': ctx.user(), 835 b'user': ctx.user(),
821 b'date': b'%d %d' % ctx.date(), 836 b'date': b'%d %d' % ctx.date(),
826 ), 841 ),
827 } 842 }
828 callconduit(ctx.repo().ui, b'differential.setdiffproperty', params) 843 callconduit(ctx.repo().ui, b'differential.setdiffproperty', params)
829 844
830 params = { 845 params = {
831 b'diff_id': diff[b'id'], 846 b'diff_id': diffid,
832 b'name': b'local:commits', 847 b'name': b'local:commits',
833 b'data': templatefilters.json( 848 b'data': templatefilters.json(
834 { 849 {
835 ctx.hex(): { 850 ctx.hex(): {
836 b'author': stringutil.person(ctx.user()), 851 b'author': stringutil.person(ctx.user()),