mercurial/patch.py
changeset 23998 b65637247c69
parent 23997 8b88870cbd1e
child 23999 e02888efc5aa
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)