hgext/phabricator.py
changeset 43258 d5d1edf66091
parent 43190 c19b327017b9
child 43259 162b81e65e60
equal deleted inserted replaced
43257:675c776fbcd1 43258:d5d1edf66091
   718             addoldbinary(pchange, fctx, fname)
   718             addoldbinary(pchange, fctx, fname)
   719         else:
   719         else:
   720             maketext(pchange, ctx, fname)
   720             maketext(pchange, ctx, fname)
   721 
   721 
   722         pdiff.addchange(pchange)
   722         pdiff.addchange(pchange)
       
   723 
       
   724 
       
   725 def addadded(pdiff, ctx, added, removed):
       
   726     """add file adds to the phabdiff, both new files and copies/moves"""
       
   727     # Keep track of files that've been recorded as moved/copied, so if there are
       
   728     # additional copies we can mark them (moves get removed from removed)
       
   729     copiedchanges = {}
       
   730     movedchanges = {}
       
   731     for fname in added:
       
   732         fctx = ctx[fname]
       
   733         pchange = phabchange(currentPath=fname)
       
   734 
       
   735         filemode = gitmode[ctx[fname].flags()]
       
   736         renamed = fctx.renamed()
       
   737 
       
   738         if renamed:
       
   739             originalfname = renamed[0]
       
   740             originalmode = gitmode[ctx.p1()[originalfname].flags()]
       
   741             pchange.oldPath = originalfname
       
   742 
       
   743             if originalfname in removed:
       
   744                 origpchange = phabchange(
       
   745                     currentPath=originalfname,
       
   746                     oldPath=originalfname,
       
   747                     type=DiffChangeType.MOVE_AWAY,
       
   748                     awayPaths=[fname],
       
   749                 )
       
   750                 movedchanges[originalfname] = origpchange
       
   751                 removed.remove(originalfname)
       
   752                 pchange.type = DiffChangeType.MOVE_HERE
       
   753             elif originalfname in movedchanges:
       
   754                 movedchanges[originalfname].type = DiffChangeType.MULTICOPY
       
   755                 movedchanges[originalfname].awayPaths.append(fname)
       
   756                 pchange.type = DiffChangeType.COPY_HERE
       
   757             else:  # pure copy
       
   758                 if originalfname not in copiedchanges:
       
   759                     origpchange = phabchange(
       
   760                         currentPath=originalfname, type=DiffChangeType.COPY_AWAY
       
   761                     )
       
   762                     copiedchanges[originalfname] = origpchange
       
   763                 else:
       
   764                     origpchange = copiedchanges[originalfname]
       
   765                 origpchange.awayPaths.append(fname)
       
   766                 pchange.type = DiffChangeType.COPY_HERE
       
   767 
       
   768             if filemode != originalmode:
       
   769                 pchange.addoldmode(originalmode)
       
   770                 pchange.addnewmode(filemode)
       
   771         else:  # Brand-new file
       
   772             pchange.addnewmode(gitmode[fctx.flags()])
       
   773             pchange.type = DiffChangeType.ADD
       
   774 
       
   775         if fctx.isbinary():
       
   776             makebinary(pchange, fctx)
       
   777             if renamed:
       
   778                 addoldbinary(pchange, fctx, originalfname)
       
   779         else:
       
   780             maketext(pchange, ctx, fname)
       
   781 
       
   782         pdiff.addchange(pchange)
       
   783 
       
   784     for _path, copiedchange in copiedchanges.items():
       
   785         pdiff.addchange(copiedchange)
       
   786     for _path, movedchange in movedchanges.items():
       
   787         pdiff.addchange(movedchange)
   723 
   788 
   724 
   789 
   725 def creatediff(ctx):
   790 def creatediff(ctx):
   726     """create a Differential Diff"""
   791     """create a Differential Diff"""
   727     repo = ctx.repo()
   792     repo = ctx.repo()