comparison hgext/record.py @ 13157:82f840109f76

record: teach parsepatch() about non-git style headers These changes are not useful to record itself, since it is hard coded to always generate git style diffs. But it makes parsepatch() more generally useful for parsing normal patch files.
author Steve Borho <steve@borho.org>
date Wed, 08 Dec 2010 22:14:18 -0600
parents a08b49d2f116
children f14cfcc488fb
comparison
equal deleted inserted replaced
13156:d79fdff55627 13157:82f840109f76
40 40
41 while True: 41 while True:
42 line = lr.readline() 42 line = lr.readline()
43 if not line: 43 if not line:
44 break 44 break
45 if line.startswith('diff --git a/'): 45 if line.startswith('diff --git a/') or line.startswith('diff -r '):
46 def notheader(line): 46 def notheader(line):
47 s = line.split(None, 1) 47 s = line.split(None, 1)
48 return not s or s[0] not in ('---', 'diff') 48 return not s or s[0] not in ('---', 'diff')
49 header = scanwhile(line, notheader) 49 header = scanwhile(line, notheader)
50 fromfile = lr.readline() 50 fromfile = lr.readline()
68 class header(object): 68 class header(object):
69 """patch header 69 """patch header
70 70
71 XXX shoudn't we move this to mercurial/patch.py ? 71 XXX shoudn't we move this to mercurial/patch.py ?
72 """ 72 """
73 diff_re = re.compile('diff --git a/(.*) b/(.*)$') 73 diffgit_re = re.compile('diff --git a/(.*) b/(.*)$')
74 diff_re = re.compile('diff -r .* (.*)$')
74 allhunks_re = re.compile('(?:index|new file|deleted file) ') 75 allhunks_re = re.compile('(?:index|new file|deleted file) ')
75 pretty_re = re.compile('(?:new file|deleted file) ') 76 pretty_re = re.compile('(?:new file|deleted file) ')
76 special_re = re.compile('(?:index|new|deleted|copy|rename) ') 77 special_re = re.compile('(?:index|new|deleted|copy|rename) ')
77 78
78 def __init__(self, header): 79 def __init__(self, header):
108 for h in self.header: 109 for h in self.header:
109 if self.allhunks_re.match(h): 110 if self.allhunks_re.match(h):
110 return True 111 return True
111 112
112 def files(self): 113 def files(self):
113 fromfile, tofile = self.diff_re.match(self.header[0]).groups() 114 match = self.diffgit_re.match(self.header[0])
114 if fromfile == tofile: 115 if match:
115 return [fromfile] 116 fromfile, tofile = match.groups()
116 return [fromfile, tofile] 117 if fromfile == tofile:
118 return [fromfile]
119 return [fromfile, tofile]
120 else:
121 return self.diff_re.match(self.header[0]).groups()
117 122
118 def filename(self): 123 def filename(self):
119 return self.files()[-1] 124 return self.files()[-1]
120 125
121 def __repr__(self): 126 def __repr__(self):