794 """detect non-UTF-8 text files since Phabricator requires them to be marked |
794 """detect non-UTF-8 text files since Phabricator requires them to be marked |
795 as binary |
795 as binary |
796 """ |
796 """ |
797 try: |
797 try: |
798 fctx.data().decode('utf-8') |
798 fctx.data().decode('utf-8') |
799 if fctx.parents(): |
|
800 fctx.p1().data().decode('utf-8') |
|
801 return False |
799 return False |
802 except UnicodeDecodeError: |
800 except UnicodeDecodeError: |
803 fctx.repo().ui.write( |
801 fctx.repo().ui.write( |
804 _(b'file %s detected as non-UTF-8, marked as binary\n') |
802 _(b'file %s detected as non-UTF-8, marked as binary\n') |
805 % fctx.path() |
803 % fctx.path() |
823 |
821 |
824 def addmodified(pdiff, ctx, modified): |
822 def addmodified(pdiff, ctx, modified): |
825 """add modified files to the phabdiff""" |
823 """add modified files to the phabdiff""" |
826 for fname in modified: |
824 for fname in modified: |
827 fctx = ctx[fname] |
825 fctx = ctx[fname] |
|
826 oldfctx = fctx.p1() |
828 pchange = phabchange(currentPath=fname, oldPath=fname) |
827 pchange = phabchange(currentPath=fname, oldPath=fname) |
829 filemode = gitmode[ctx[fname].flags()] |
828 filemode = gitmode[ctx[fname].flags()] |
830 originalmode = gitmode[ctx.p1()[fname].flags()] |
829 originalmode = gitmode[ctx.p1()[fname].flags()] |
831 if filemode != originalmode: |
830 if filemode != originalmode: |
832 pchange.addoldmode(originalmode) |
831 pchange.addoldmode(originalmode) |
833 pchange.addnewmode(filemode) |
832 pchange.addnewmode(filemode) |
834 |
833 |
835 if fctx.isbinary() or notutf8(fctx): |
834 if fctx.isbinary() or notutf8(fctx) or notutf8(oldfctx): |
836 makebinary(pchange, fctx) |
835 makebinary(pchange, fctx) |
837 addoldbinary(pchange, fctx.p1(), fctx) |
836 addoldbinary(pchange, fctx.p1(), fctx) |
838 else: |
837 else: |
839 maketext(pchange, ctx, fname) |
838 maketext(pchange, ctx, fname) |
840 |
839 |
847 # additional copies we can mark them (moves get removed from removed) |
846 # additional copies we can mark them (moves get removed from removed) |
848 copiedchanges = {} |
847 copiedchanges = {} |
849 movedchanges = {} |
848 movedchanges = {} |
850 for fname in added: |
849 for fname in added: |
851 fctx = ctx[fname] |
850 fctx = ctx[fname] |
|
851 oldfctx = None |
852 pchange = phabchange(currentPath=fname) |
852 pchange = phabchange(currentPath=fname) |
853 |
853 |
854 filemode = gitmode[ctx[fname].flags()] |
854 filemode = gitmode[ctx[fname].flags()] |
855 renamed = fctx.renamed() |
855 renamed = fctx.renamed() |
856 |
856 |
857 if renamed: |
857 if renamed: |
858 originalfname = renamed[0] |
858 originalfname = renamed[0] |
859 originalmode = gitmode[ctx.p1()[originalfname].flags()] |
859 oldfctx = ctx.p1()[originalfname] |
|
860 originalmode = gitmode[oldfctx.flags()] |
860 pchange.oldPath = originalfname |
861 pchange.oldPath = originalfname |
861 |
862 |
862 if originalfname in removed: |
863 if originalfname in removed: |
863 origpchange = phabchange( |
864 origpchange = phabchange( |
864 currentPath=originalfname, |
865 currentPath=originalfname, |
889 pchange.addnewmode(filemode) |
890 pchange.addnewmode(filemode) |
890 else: # Brand-new file |
891 else: # Brand-new file |
891 pchange.addnewmode(gitmode[fctx.flags()]) |
892 pchange.addnewmode(gitmode[fctx.flags()]) |
892 pchange.type = DiffChangeType.ADD |
893 pchange.type = DiffChangeType.ADD |
893 |
894 |
894 if fctx.isbinary() or notutf8(fctx): |
895 if fctx.isbinary() or notutf8(fctx) or (oldfctx and notutf8(oldfctx)): |
895 makebinary(pchange, fctx) |
896 makebinary(pchange, fctx) |
896 if renamed: |
897 if renamed: |
897 addoldbinary(pchange, fctx.p1(), fctx) |
898 addoldbinary(pchange, oldfctx, fctx) |
898 else: |
899 else: |
899 maketext(pchange, ctx, fname) |
900 maketext(pchange, ctx, fname) |
900 |
901 |
901 pdiff.addchange(pchange) |
902 pdiff.addchange(pchange) |
902 |
903 |