comparison mercurial/patch.py @ 24261:20aac24e2114

record: move header class from record to patch Part of a series of patches to move record from hgext to core
author Laurent Charignon <lcharignon@fb.com>
date Mon, 09 Mar 2015 13:04:50 -0700
parents 76225ab5a5da
children a45d1c51109e
comparison
equal deleted inserted replaced
24260:76225ab5a5da 24261:20aac24e2114
801 def close(self): 801 def close(self):
802 if self.dirty: 802 if self.dirty:
803 self.writelines(self.fname, self.lines, self.mode) 803 self.writelines(self.fname, self.lines, self.mode)
804 self.write_rej() 804 self.write_rej()
805 return len(self.rej) 805 return len(self.rej)
806
807 class header(object):
808 """patch header
809 """
810 diffgit_re = re.compile('diff --git a/(.*) b/(.*)$')
811 diff_re = re.compile('diff -r .* (.*)$')
812 allhunks_re = re.compile('(?:index|deleted file) ')
813 pretty_re = re.compile('(?:new file|deleted file) ')
814 special_re = re.compile('(?:index|new|deleted|copy|rename) ')
815
816 def __init__(self, header):
817 self.header = header
818 self.hunks = []
819
820 def binary(self):
821 return util.any(h.startswith('index ') for h in self.header)
822
823 def pretty(self, fp):
824 for h in self.header:
825 if h.startswith('index '):
826 fp.write(_('this modifies a binary file (all or nothing)\n'))
827 break
828 if self.pretty_re.match(h):
829 fp.write(h)
830 if self.binary():
831 fp.write(_('this is a binary file\n'))
832 break
833 if h.startswith('---'):
834 fp.write(_('%d hunks, %d lines changed\n') %
835 (len(self.hunks),
836 sum([max(h.added, h.removed) for h in self.hunks])))
837 break
838 fp.write(h)
839
840 def write(self, fp):
841 fp.write(''.join(self.header))
842
843 def allhunks(self):
844 return util.any(self.allhunks_re.match(h) for h in self.header)
845
846 def files(self):
847 match = self.diffgit_re.match(self.header[0])
848 if match:
849 fromfile, tofile = match.groups()
850 if fromfile == tofile:
851 return [fromfile]
852 return [fromfile, tofile]
853 else:
854 return self.diff_re.match(self.header[0]).groups()
855
856 def filename(self):
857 return self.files()[-1]
858
859 def __repr__(self):
860 return '<header %s>' % (' '.join(map(repr, self.files())))
861
862 def special(self):
863 return util.any(self.special_re.match(h) for h in self.header)
806 864
807 class hunk(object): 865 class hunk(object):
808 def __init__(self, desc, num, lr, context): 866 def __init__(self, desc, num, lr, context):
809 self.number = num 867 self.number = num
810 self.desc = desc 868 self.desc = desc