D7050: phabricator: add addadded function
Kwan (Ian Moody)
phabricator at mercurial-scm.org
Wed Oct 16 16:51:18 EDT 2019
Closed by commit rHG1bc599b69354: phabricator: add addadded function (authored by Kwan).
This revision was automatically updated to reflect the committed changes.
This revision was not accepted when it landed; it landed in state "Needs Review".
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D7050?vs=17081&id=17254
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D7050/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D7050
AFFECTED FILES
hgext/phabricator.py
CHANGE DETAILS
diff --git a/hgext/phabricator.py b/hgext/phabricator.py
--- a/hgext/phabricator.py
+++ b/hgext/phabricator.py
@@ -722,6 +722,71 @@
pdiff.addchange(pchange)
+def addadded(pdiff, ctx, added, removed):
+ """add file adds to the phabdiff, both new files and copies/moves"""
+ # Keep track of files that've been recorded as moved/copied, so if there are
+ # additional copies we can mark them (moves get removed from removed)
+ copiedchanges = {}
+ movedchanges = {}
+ for fname in added:
+ fctx = ctx[fname]
+ pchange = phabchange(currentPath=fname)
+
+ filemode = gitmode[ctx[fname].flags()]
+ renamed = fctx.renamed()
+
+ if renamed:
+ originalfname = renamed[0]
+ originalmode = gitmode[ctx.p1()[originalfname].flags()]
+ pchange.oldPath = originalfname
+
+ if originalfname in removed:
+ origpchange = phabchange(
+ currentPath=originalfname,
+ oldPath=originalfname,
+ type=DiffChangeType.MOVE_AWAY,
+ awayPaths=[fname],
+ )
+ movedchanges[originalfname] = origpchange
+ removed.remove(originalfname)
+ pchange.type = DiffChangeType.MOVE_HERE
+ elif originalfname in movedchanges:
+ movedchanges[originalfname].type = DiffChangeType.MULTICOPY
+ movedchanges[originalfname].awayPaths.append(fname)
+ pchange.type = DiffChangeType.COPY_HERE
+ else: # pure copy
+ if originalfname not in copiedchanges:
+ origpchange = phabchange(
+ currentPath=originalfname, type=DiffChangeType.COPY_AWAY
+ )
+ copiedchanges[originalfname] = origpchange
+ else:
+ origpchange = copiedchanges[originalfname]
+ origpchange.awayPaths.append(fname)
+ pchange.type = DiffChangeType.COPY_HERE
+
+ if filemode != originalmode:
+ pchange.addoldmode(originalmode)
+ pchange.addnewmode(filemode)
+ else: # Brand-new file
+ pchange.addnewmode(gitmode[fctx.flags()])
+ pchange.type = DiffChangeType.ADD
+
+ if fctx.isbinary():
+ makebinary(pchange, fctx)
+ if renamed:
+ addoldbinary(pchange, fctx, originalfname)
+ else:
+ maketext(pchange, ctx, fname)
+
+ pdiff.addchange(pchange)
+
+ for _path, copiedchange in copiedchanges.items():
+ pdiff.addchange(copiedchange)
+ for _path, movedchange in movedchanges.items():
+ pdiff.addchange(movedchange)
+
+
def creatediff(ctx):
"""create a Differential Diff"""
repo = ctx.repo()
To: Kwan, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list