Mercurial > public > mercurial-scm > hg
comparison mercurial/patch.py @ 24101:1ea90d140ee3
trydiff: make filenames None when they don't exist
f1 and f2 are currently set always set to some filename, even for
added or deleted files. Let's instead set them to None to indicate
that one side of the diff doesn't exist. This lets us use the filename
variables instead of the content variables and simplify a bit since
the empty string is not a valid filename. More importantly, it paves
the way for further simplifications.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 22 Jan 2015 22:42:35 -0800 |
parents | d1fcff9400c9 |
children | 00280a2b8b9a |
comparison
equal
deleted
inserted
replaced
24100:7f23e67e9c38 | 24101:1ea90d140ee3 |
---|---|
1783 if f not in removedset: | 1783 if f not in removedset: |
1784 content2 = getfilectx(f, ctx2).data() | 1784 content2 = getfilectx(f, ctx2).data() |
1785 f1, f2 = f, f | 1785 f1, f2 = f, f |
1786 if opts.git or losedatafn: | 1786 if opts.git or losedatafn: |
1787 if f in addedset: | 1787 if f in addedset: |
1788 f1 = None | |
1788 flag2 = ctx2.flags(f) | 1789 flag2 = ctx2.flags(f) |
1789 if f in copy: | 1790 if f in copy: |
1790 if opts.git: | 1791 if opts.git: |
1791 f1 = copy[f] | 1792 f1 = copy[f] |
1792 flag1 = ctx1.flags(f1) | 1793 flag1 = ctx1.flags(f1) |
1795 gone.add(f1) | 1796 gone.add(f1) |
1796 else: | 1797 else: |
1797 copyop = 'copy' | 1798 copyop = 'copy' |
1798 content1 = getfilectx(f1, ctx1).data() | 1799 content1 = getfilectx(f1, ctx1).data() |
1799 elif f in removedset: | 1800 elif f in removedset: |
1801 f2 = None | |
1800 if opts.git: | 1802 if opts.git: |
1801 # have we already reported a copy above? | 1803 # have we already reported a copy above? |
1802 if (f in copyto and copyto[f] in addedset | 1804 if (f in copyto and copyto[f] in addedset |
1803 and copy[copyto[f]] == f): | 1805 and copy[copyto[f]] == f): |
1804 continue | 1806 continue |
1813 if losedatafn and not opts.git: | 1815 if losedatafn and not opts.git: |
1814 if (binary or | 1816 if (binary or |
1815 # copy/rename | 1817 # copy/rename |
1816 f in copy or | 1818 f in copy or |
1817 # empty file creation | 1819 # empty file creation |
1818 (content1 is None and not content2) or | 1820 (not f1 and not content2) or |
1819 # empty file deletion | 1821 # empty file deletion |
1820 (not content1 and content2 is None) or | 1822 (not content1 and not f2) or |
1821 # create with flags | 1823 # create with flags |
1822 (content1 is None and flag2) or | 1824 (not f1 and flag2) or |
1823 # change flags | 1825 # change flags |
1824 (content1 is not None and content2 is not None and | 1826 (f1 and f2 and flag1 != flag2)): |
1825 flag1 != flag2)): | |
1826 losedatafn(f) | 1827 losedatafn(f) |
1827 | 1828 |
1828 path1 = posixpath.join(prefix, f1) | 1829 path1 = posixpath.join(prefix, f1 or f2) |
1829 path2 = posixpath.join(prefix, f2) | 1830 path2 = posixpath.join(prefix, f2 or f1) |
1830 header = [] | 1831 header = [] |
1831 if opts.git: | 1832 if opts.git: |
1832 header.append('diff --git %s%s %s%s' % | 1833 header.append('diff --git %s%s %s%s' % |
1833 (aprefix, path1, bprefix, path2)) | 1834 (aprefix, path1, bprefix, path2)) |
1834 if content1 is None: # added | 1835 if not f1: # added |
1835 header.append('new file mode %s' % gitmode[flag2]) | 1836 header.append('new file mode %s' % gitmode[flag2]) |
1836 elif content2 is None: # removed | 1837 elif not f2: # removed |
1837 header.append('deleted file mode %s' % gitmode[flag1]) | 1838 header.append('deleted file mode %s' % gitmode[flag1]) |
1838 else: # modified/copied/renamed | 1839 else: # modified/copied/renamed |
1839 mode1, mode2 = gitmode[flag1], gitmode[flag2] | 1840 mode1, mode2 = gitmode[flag1], gitmode[flag2] |
1840 if mode1 != mode2: | 1841 if mode1 != mode2: |
1841 header.append('old mode %s' % mode1) | 1842 header.append('old mode %s' % mode1) |