Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/patch.py @ 23998:b65637247c69
trydiff: collect header-writing in one place
This is the first step towards simplifying the big loop in
trydiff(). This will make both the header code and the non-header code
clearer, and it prepares for further simplification of the many nested
if-statements in the body of the loop.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 22 Jan 2015 17:00:54 -0800 |
parents | 8b88870cbd1e |
children | e02888efc5aa |
comparison
equal
deleted
inserted
replaced
23997:8b88870cbd1e | 23998:b65637247c69 |
---|---|
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) |