1793 # modifications during merges |
1793 # modifications during merges |
1794 for f in modified: |
1794 for f in modified: |
1795 if f not in ctx1: |
1795 if f not in ctx1: |
1796 addedset.add(f) |
1796 addedset.add(f) |
1797 for f in sorted(modified + added + removed): |
1797 for f in sorted(modified + added + removed): |
|
1798 flag1 = None |
|
1799 flag2 = None |
1798 content1 = None |
1800 content1 = None |
1799 content2 = None |
1801 content2 = None |
1800 binarydiff = False |
1802 binarydiff = False |
1801 header = [] |
1803 op = None |
1802 if f not in addedset: |
1804 if f not in addedset: |
1803 content1 = getfilectx(f, ctx1).data() |
1805 content1 = getfilectx(f, ctx1).data() |
1804 if f not in removedset: |
1806 if f not in removedset: |
1805 content2 = getfilectx(f, ctx2).data() |
1807 content2 = getfilectx(f, ctx2).data() |
1806 f1, f2 = f, f |
1808 f1, f2 = f, f |
1807 if opts.git or losedatafn: |
1809 if opts.git or losedatafn: |
1808 if f in addedset: |
1810 if f in addedset: |
1809 mode2 = gitmode[ctx2.flags(f)] |
1811 flag2 = ctx2.flags(f) |
1810 if f in copy: |
1812 if f in copy: |
1811 if opts.git: |
1813 if opts.git: |
1812 f1 = copy[f] |
1814 f1 = copy[f] |
1813 mode1 = gitmode[ctx1.flags(f1)] |
1815 flag1 = ctx1.flags(f1) |
1814 addmodehdr(header, mode1, mode2) |
|
1815 if f1 in removedset and f1 not in gone: |
1816 if f1 in removedset and f1 not in gone: |
1816 op = 'rename' |
1817 op = 'rename' |
1817 gone.add(f1) |
1818 gone.add(f1) |
1818 else: |
1819 else: |
1819 op = 'copy' |
1820 op = 'copy' |
1820 header.append('%s from %s\n' % (op, join(f1))) |
|
1821 header.append('%s to %s\n' % (op, join(f))) |
|
1822 content1 = getfilectx(f1, ctx1).data() |
1821 content1 = getfilectx(f1, ctx1).data() |
1823 else: |
1822 else: |
1824 losedatafn(f) |
1823 losedatafn(f) |
1825 else: |
1824 else: |
1826 if opts.git: |
1825 if not opts.git and flag2: |
1827 header.append('new file mode %s\n' % mode2) |
|
1828 elif ctx2.flags(f): |
|
1829 losedatafn(f) |
1826 losedatafn(f) |
1830 if util.binary(content1) or util.binary(content2): |
1827 if util.binary(content1) or util.binary(content2): |
1831 if opts.git: |
1828 if opts.git: |
1832 binarydiff = True |
1829 binarydiff = True |
1833 else: |
1830 else: |
1840 # have we already reported a copy above? |
1837 # have we already reported a copy above? |
1841 if (f in copyto and copyto[f] in addedset |
1838 if (f in copyto and copyto[f] in addedset |
1842 and copy[copyto[f]] == f): |
1839 and copy[copyto[f]] == f): |
1843 continue |
1840 continue |
1844 else: |
1841 else: |
1845 header.append('deleted file mode %s\n' % |
1842 flag1 = ctx1.flags(f) |
1846 gitmode[ctx1.flags(f)]) |
|
1847 if util.binary(content1): |
1843 if util.binary(content1): |
1848 binarydiff = True |
1844 binarydiff = True |
1849 elif not content1 or util.binary(content1): |
1845 elif not content1 or util.binary(content1): |
1850 # regular diffs cannot represent empty file deletion |
1846 # regular diffs cannot represent empty file deletion |
1851 losedatafn(f) |
1847 losedatafn(f) |
1852 else: |
1848 else: |
1853 flag1 = ctx1.flags(f) |
1849 flag1 = ctx1.flags(f) |
1854 flag2 = ctx2.flags(f) |
1850 flag2 = ctx2.flags(f) |
1855 binary = util.binary(content1) or util.binary(content2) |
1851 binary = util.binary(content1) or util.binary(content2) |
1856 if opts.git: |
1852 if opts.git: |
1857 addmodehdr(header, gitmode[flag1], gitmode[flag2]) |
|
1858 if binary: |
1853 if binary: |
1859 binarydiff = True |
1854 binarydiff = True |
1860 elif binary or flag2 != flag1: |
1855 elif binary or flag2 != flag1: |
1861 losedatafn(f) |
1856 losedatafn(f) |
|
1857 |
|
1858 header = [] |
|
1859 if opts.git: |
|
1860 if content1 is None: # added |
|
1861 header.append('new file mode %s\n' % gitmode[flag2]) |
|
1862 elif content2 is None: # removed |
|
1863 header.append('deleted file mode %s\n' % gitmode[flag1]) |
|
1864 else: # modified/copied/renamed |
|
1865 addmodehdr(header, gitmode[flag1], gitmode[flag2]) |
|
1866 if op is not None: |
|
1867 header.append('%s from %s\n' % (op, join(f1))) |
|
1868 header.append('%s to %s\n' % (op, join(f2))) |
1862 |
1869 |
1863 if opts.git or revs: |
1870 if opts.git or revs: |
1864 header.insert(0, diffline(join(f1), join(f2), revs)) |
1871 header.insert(0, diffline(join(f1), join(f2), revs)) |
1865 if binarydiff and not opts.nobinary: |
1872 if binarydiff and not opts.nobinary: |
1866 text = mdiff.b85diff(content1, content2) |
1873 text = mdiff.b85diff(content1, content2) |