1792 copyto = dict([(v, k) for k, v in copy.items()]) |
1792 copyto = dict([(v, k) for k, v in copy.items()]) |
1793 |
1793 |
1794 if opts.git: |
1794 if opts.git: |
1795 revs = None |
1795 revs = None |
1796 |
1796 |
|
1797 modifiedset, addedset, removedset = set(modified), set(added), set(removed) |
1797 for f in sorted(modified + added + removed): |
1798 for f in sorted(modified + added + removed): |
1798 to = None |
1799 to = None |
1799 tn = None |
1800 tn = None |
1800 dodiff = True |
1801 dodiff = True |
1801 header = [] |
1802 header = [] |
1802 if f in man1: |
1803 if f in man1: |
1803 to = getfilectx(f, ctx1).data() |
1804 to = getfilectx(f, ctx1).data() |
1804 if f not in removed: |
1805 if f not in removedset: |
1805 tn = getfilectx(f, ctx2).data() |
1806 tn = getfilectx(f, ctx2).data() |
1806 a, b = f, f |
1807 a, b = f, f |
1807 if opts.git or losedatafn: |
1808 if opts.git or losedatafn: |
1808 if f in added or (f in modified and to is None): |
1809 if f in addedset or (f in modifiedset and to is None): |
1809 mode = gitmode[ctx2.flags(f)] |
1810 mode = gitmode[ctx2.flags(f)] |
1810 if f in copy or f in copyto: |
1811 if f in copy or f in copyto: |
1811 if opts.git: |
1812 if opts.git: |
1812 if f in copy: |
1813 if f in copy: |
1813 a = copy[f] |
1814 a = copy[f] |
1814 else: |
1815 else: |
1815 a = copyto[f] |
1816 a = copyto[f] |
1816 omode = gitmode[man1.flags(a)] |
1817 omode = gitmode[man1.flags(a)] |
1817 addmodehdr(header, omode, mode) |
1818 addmodehdr(header, omode, mode) |
1818 if a in removed and a not in gone: |
1819 if a in removedset and a not in gone: |
1819 op = 'rename' |
1820 op = 'rename' |
1820 gone.add(a) |
1821 gone.add(a) |
1821 else: |
1822 else: |
1822 op = 'copy' |
1823 op = 'copy' |
1823 header.append('%s from %s\n' % (op, join(a))) |
1824 header.append('%s from %s\n' % (op, join(a))) |
1839 else: |
1840 else: |
1840 losedatafn(f) |
1841 losedatafn(f) |
1841 if not opts.git and not tn: |
1842 if not opts.git and not tn: |
1842 # regular diffs cannot represent new empty file |
1843 # regular diffs cannot represent new empty file |
1843 losedatafn(f) |
1844 losedatafn(f) |
1844 elif f in removed or (f in modified and tn is None): |
1845 elif f in removedset or (f in modifiedset and tn is None): |
1845 if opts.git: |
1846 if opts.git: |
1846 # have we already reported a copy above? |
1847 # have we already reported a copy above? |
1847 if ((f in copy and copy[f] in added |
1848 if ((f in copy and copy[f] in addedset |
1848 and copyto[copy[f]] == f) or |
1849 and copyto[copy[f]] == f) or |
1849 (f in copyto and copyto[f] in added |
1850 (f in copyto and copyto[f] in addedset |
1850 and copy[copyto[f]] == f)): |
1851 and copy[copyto[f]] == f)): |
1851 dodiff = False |
1852 dodiff = False |
1852 else: |
1853 else: |
1853 header.append('deleted file mode %s\n' % |
1854 header.append('deleted file mode %s\n' % |
1854 gitmode[man1.flags(f)]) |
1855 gitmode[man1.flags(f)]) |