5
5
6
6
from .snippets import split_by_regex , findall_regex
7
7
8
- header = namedtuple ('header' ,
9
- 'index_path old_path old_version new_path new_version' )
8
+ header = namedtuple (
9
+ 'header' ,
10
+ 'index_path old_path old_version new_path new_version' ,
11
+ )
10
12
11
13
diffobj = namedtuple ('diff' , 'header changes text' )
12
14
@@ -71,17 +73,17 @@ def parse_patch(text):
71
73
lines = text
72
74
73
75
# maybe use this to nuke all of those line endings?
74
- #lines = [x.splitlines()[0] for x in lines]
76
+ # lines = [x.splitlines()[0] for x in lines]
75
77
lines = [x if len (x ) == 0 else x .splitlines ()[0 ] for x in lines ]
76
78
77
79
check = [
78
- unified_header_index ,
79
- diffcmd_header ,
80
- cvs_header_rcs ,
81
- git_header_index ,
82
- context_header_old_line ,
83
- unified_header_old_line ,
84
- ]
80
+ unified_header_index ,
81
+ diffcmd_header ,
82
+ cvs_header_rcs ,
83
+ git_header_index ,
84
+ context_header_old_line ,
85
+ unified_header_old_line ,
86
+ ]
85
87
86
88
for c in check :
87
89
diffs = split_by_regex (lines , c )
@@ -95,12 +97,14 @@ def parse_patch(text):
95
97
if h or d :
96
98
yield diffobj (header = h , changes = d , text = difftext )
97
99
100
+
98
101
def parse_header (text ):
99
102
h = parse_scm_header (text )
100
103
if h is None :
101
104
h = parse_diff_header (text )
102
105
return h
103
106
107
+
104
108
def parse_scm_header (text ):
105
109
try :
106
110
lines = text .splitlines ()
@@ -130,41 +134,42 @@ def parse_scm_header(text):
130
134
new_path = new_path [2 :]
131
135
132
136
return header (
133
- index_path = res .index_path ,
134
- old_path = old_path ,
135
- old_version = res .old_version ,
136
- new_path = new_path ,
137
- new_version = res .new_version
138
- )
137
+ index_path = res .index_path ,
138
+ old_path = old_path ,
139
+ old_version = res .old_version ,
140
+ new_path = new_path ,
141
+ new_version = res .new_version
142
+ )
139
143
else :
140
144
res = parser (lines )
141
145
142
146
return res
143
147
144
148
return None
145
149
150
+
146
151
def parse_diff_header (text ):
147
152
try :
148
153
lines = text .splitlines ()
149
154
except AttributeError :
150
155
lines = text
151
156
152
157
check = [
153
- (unified_header_new_line , parse_unified_header ),
154
- (context_header_old_line , parse_context_header ),
155
- (diffcmd_header , parse_diffcmd_header ),
156
- # TODO:
157
- # git_header can handle version-less unified headers, but
158
- # will trim a/ and b/ in the paths if they exist...
159
- (git_header_new_line , parse_git_header ),
160
- ]
158
+ (unified_header_new_line , parse_unified_header ),
159
+ (context_header_old_line , parse_context_header ),
160
+ (diffcmd_header , parse_diffcmd_header ),
161
+ # TODO:
162
+ # git_header can handle version-less unified headers, but
163
+ # will trim a/ and b/ in the paths if they exist...
164
+ (git_header_new_line , parse_git_header ),
165
+ ]
161
166
162
167
for regex , parser in check :
163
168
diffs = findall_regex (lines , regex )
164
169
if len (diffs ) > 0 :
165
170
return parser (lines )
166
171
167
- return None # no header?
172
+ return None # no header?
168
173
169
174
170
175
def parse_diff (text ):
@@ -174,18 +179,19 @@ def parse_diff(text):
174
179
lines = text
175
180
176
181
check = [
177
- (unified_hunk_start , parse_unified_diff ),
178
- (context_hunk_start , parse_context_diff ),
179
- (default_hunk_start , parse_default_diff ),
180
- (ed_hunk_start , parse_ed_diff ),
181
- (rcs_ed_hunk_start , parse_rcs_ed_diff ),
182
- ]
182
+ (unified_hunk_start , parse_unified_diff ),
183
+ (context_hunk_start , parse_context_diff ),
184
+ (default_hunk_start , parse_default_diff ),
185
+ (ed_hunk_start , parse_ed_diff ),
186
+ (rcs_ed_hunk_start , parse_rcs_ed_diff ),
187
+ ]
183
188
184
189
for hunk , parser in check :
185
190
diffs = findall_regex (lines , hunk )
186
191
if len (diffs ) > 0 :
187
192
return parser (lines )
188
193
194
+
189
195
def parse_git_header (text ):
190
196
try :
191
197
lines = text .splitlines ()
@@ -223,14 +229,16 @@ def parse_git_header(text):
223
229
if new_path .startswith ('b/' ):
224
230
new_path = new_path [2 :]
225
231
return header (
226
- index_path = None ,
227
- old_path = old_path ,
228
- old_version = over ,
229
- new_path = new_path ,
230
- new_version = nver )
232
+ index_path = None ,
233
+ old_path = old_path ,
234
+ old_version = over ,
235
+ new_path = new_path ,
236
+ new_version = nver
237
+ )
231
238
232
239
return None
233
240
241
+
234
242
def parse_svn_header (text ):
235
243
try :
236
244
lines = text .splitlines ()
@@ -250,11 +258,11 @@ def parse_svn_header(text):
250
258
diff_header = parse_diff_header (lines )
251
259
if not diff_header :
252
260
return header (
253
- index_path = i .group (1 ),
254
- old_path = i .group (1 ),
255
- old_version = None ,
256
- new_path = i .group (1 ),
257
- new_version = None ,
261
+ index_path = i .group (1 ),
262
+ old_path = i .group (1 ),
263
+ old_version = None ,
264
+ new_path = i .group (1 ),
265
+ new_version = None ,
258
266
)
259
267
260
268
opath = diff_header .old_path
@@ -292,16 +300,16 @@ def parse_svn_header(text):
292
300
nver = None
293
301
294
302
return header (
295
- index_path = i .group (1 ),
296
- old_path = opath ,
297
- old_version = over ,
298
- new_path = npath ,
299
- new_version = nver ,
303
+ index_path = i .group (1 ),
304
+ old_path = opath ,
305
+ old_version = over ,
306
+ new_path = npath ,
307
+ new_version = nver ,
300
308
)
301
309
302
-
303
310
return None
304
311
312
+
305
313
def parse_cvs_header (text ):
306
314
try :
307
315
lines = text .splitlines ()
@@ -340,18 +348,18 @@ def parse_cvs_header(text):
340
348
nver = nend_c .group (1 )
341
349
342
350
return header (
343
- index_path = i .group (1 ),
344
- old_path = diff_header .old_path ,
345
- old_version = over ,
346
- new_path = diff_header .new_path ,
347
- new_version = nver ,
351
+ index_path = i .group (1 ),
352
+ old_path = diff_header .old_path ,
353
+ old_version = over ,
354
+ new_path = diff_header .new_path ,
355
+ new_version = nver ,
348
356
)
349
357
return header (
350
- index_path = i .group (1 ),
351
- old_path = i .group (1 ),
352
- old_version = None ,
353
- new_path = i .group (1 ),
354
- new_version = None ,
358
+ index_path = i .group (1 ),
359
+ old_path = i .group (1 ),
360
+ old_version = None ,
361
+ new_path = i .group (1 ),
362
+ new_version = None ,
355
363
)
356
364
elif headers_old :
357
365
# parse old style headers
@@ -364,27 +372,28 @@ def parse_cvs_header(text):
364
372
d = old_cvs_diffcmd_header .match (lines [0 ])
365
373
if not d :
366
374
return header (
367
- index_path = i .group (1 ),
368
- old_path = i .group (1 ),
369
- old_version = None ,
370
- new_path = i .group (1 ),
371
- new_version = None ,
375
+ index_path = i .group (1 ),
376
+ old_path = i .group (1 ),
377
+ old_version = None ,
378
+ new_path = i .group (1 ),
379
+ new_version = None ,
372
380
)
373
381
374
382
# will get rid of the useless stuff for us
375
- _ = parse_diff_header (lines )
383
+ parse_diff_header (lines )
376
384
over = d .group (2 ) if d .group (2 ) else None
377
385
nver = d .group (4 ) if d .group (4 ) else None
378
386
return header (
379
- index_path = i .group (1 ),
380
- old_path = d .group (1 ),
381
- old_version = over ,
382
- new_path = d .group (3 ),
383
- new_version = nver ,
387
+ index_path = i .group (1 ),
388
+ old_path = d .group (1 ),
389
+ old_version = over ,
390
+ new_path = d .group (3 ),
391
+ new_version = nver ,
384
392
)
385
393
386
394
return None
387
395
396
+
388
397
def parse_diffcmd_header (text ):
389
398
try :
390
399
lines = text .splitlines ()
@@ -400,15 +409,15 @@ def parse_diffcmd_header(text):
400
409
del lines [0 ]
401
410
if d :
402
411
return header (
403
- index_path = None ,
404
- old_path = d .group (1 ),
405
- old_version = None ,
406
- new_path = d .group (2 ),
407
- new_version = None ,
408
- )
409
-
412
+ index_path = None ,
413
+ old_path = d .group (1 ),
414
+ old_version = None ,
415
+ new_path = d .group (2 ),
416
+ new_version = None ,
417
+ )
410
418
return None
411
419
420
+
412
421
def parse_unified_header (text ):
413
422
try :
414
423
lines = text .splitlines ()
0 commit comments