|
58 | 58 | cvs_header_rcs = re.compile('^RCS file: (.+)(?:,\w{1}$|$)')
|
59 | 59 | cvs_header_timestamp = re.compile('(.+)\t([\d.]+)')
|
60 | 60 | cvs_header_timestamp_colon = re.compile(':([\d.]+)\t(.+)')
|
61 |
| -old_cvs_diffcmd_header = re.compile('^diff.* (.+):?(.*) (.+):?(.*)$') |
| 61 | +old_cvs_diffcmd_header = re.compile('^diff.* (.+):(.*) (.+):(.*)$') |
62 | 62 |
|
63 | 63 |
|
64 | 64 | def parse_patch(text):
|
@@ -106,6 +106,7 @@ def parse_scm_header(text):
|
106 | 106 |
|
107 | 107 | check = [
|
108 | 108 | (git_header_index, parse_git_header),
|
| 109 | + (old_cvs_diffcmd_header, parse_cvs_header), |
109 | 110 | (cvs_header_rcs, parse_cvs_header),
|
110 | 111 | (svn_header_index, parse_svn_header),
|
111 | 112 | ]
|
@@ -298,49 +299,79 @@ def parse_cvs_header(text):
|
298 | 299 | lines = text
|
299 | 300 |
|
300 | 301 | headers = findall_regex(lines, cvs_header_rcs)
|
301 |
| - headers2 = findall_regex(lines, old_cvs_diffcmd_header) |
302 |
| - if len(headers) == 0 and len(headers2) == 0: |
303 |
| - return None |
| 302 | + headers_old = findall_regex(lines, old_cvs_diffcmd_header) |
304 | 303 |
|
305 |
| - while len(lines) > 0: |
306 |
| - i = cvs_header_index.match(lines[0]) |
307 |
| - d = old_cvs_diffcmd_header.match(lines[0]) |
308 |
| - del lines[0] |
309 |
| - if i: |
310 |
| - diff_header = parse_diff_header(lines) |
311 |
| - if diff_header: |
312 |
| - over = diff_header.old_version |
313 |
| - if over: |
314 |
| - oend = cvs_header_timestamp.match(over) |
315 |
| - oend_c = cvs_header_timestamp_colon.match(over) |
316 |
| - if oend: |
317 |
| - over = oend.group(2) |
318 |
| - elif oend_c: |
319 |
| - over = oend_c.group(1) |
| 304 | + if headers: |
| 305 | + # parse rcs style headers |
| 306 | + while len(lines) > 0: |
| 307 | + i = cvs_header_index.match(lines[0]) |
| 308 | + del lines[0] |
| 309 | + if i: |
| 310 | + diff_header = parse_diff_header(lines) |
| 311 | + if diff_header: |
| 312 | + over = diff_header.old_version |
| 313 | + if over: |
| 314 | + oend = cvs_header_timestamp.match(over) |
| 315 | + oend_c = cvs_header_timestamp_colon.match(over) |
| 316 | + if oend: |
| 317 | + over = oend.group(2) |
| 318 | + elif oend_c: |
| 319 | + over = oend_c.group(1) |
| 320 | + |
| 321 | + nver = diff_header.new_version |
| 322 | + if nver: |
| 323 | + nend = cvs_header_timestamp.match(nver) |
| 324 | + nend_c = cvs_header_timestamp_colon.match(nver) |
| 325 | + if nend: |
| 326 | + nver = nend.group(2) |
| 327 | + elif nend_c: |
| 328 | + nver = nend_c.group(1) |
320 | 329 |
|
321 |
| - nver = diff_header.new_version |
322 |
| - if nver: |
323 |
| - nend = cvs_header_timestamp.match(nver) |
324 |
| - nend_c = cvs_header_timestamp_colon.match(nver) |
325 |
| - if nend: |
326 |
| - nver = nend.group(2) |
327 |
| - elif nend_c: |
328 |
| - nver = nend_c.group(1) |
| 330 | + return header( |
| 331 | + index_path = i.group(1), |
| 332 | + old_path = diff_header.old_path, |
| 333 | + old_version = over, |
| 334 | + new_path = diff_header.new_path, |
| 335 | + new_version = nver, |
| 336 | + ) |
| 337 | + return header( |
| 338 | + index_path = i.group(1), |
| 339 | + old_path = i.group(1), |
| 340 | + old_version = None, |
| 341 | + new_path = i.group(1), |
| 342 | + new_version = None, |
| 343 | + ) |
| 344 | + elif headers_old: |
| 345 | + # parse old style headers |
| 346 | + while len(lines) > 0: |
| 347 | + i = cvs_header_index.match(lines[0]) |
| 348 | + del lines[0] |
| 349 | + if i: |
| 350 | + d = old_cvs_diffcmd_header.match(lines[0]) |
| 351 | + if d: |
| 352 | + _ = parse_diff_header(lines) # will get rid of the useless stuff for us |
| 353 | + over = d.group(2) |
| 354 | + if not over: |
| 355 | + over = None |
| 356 | + |
| 357 | + nver = d.group(4) |
| 358 | + if not nver: |
| 359 | + nver = None |
| 360 | + return header( |
| 361 | + index_path = i.group(1), |
| 362 | + old_path = d.group(1), |
| 363 | + old_version = over, |
| 364 | + new_path = d.group(3), |
| 365 | + new_version = nver, |
| 366 | + ) |
329 | 367 |
|
330 | 368 | return header(
|
331 | 369 | index_path = i.group(1),
|
332 |
| - old_path = diff_header.old_path, |
333 |
| - old_version = over, |
334 |
| - new_path = diff_header.new_path, |
335 |
| - new_version = nver, |
| 370 | + old_path = i.group(1), |
| 371 | + old_version = None, |
| 372 | + new_path = i.group(1), |
| 373 | + new_version = None, |
336 | 374 | )
|
337 |
| - return header( |
338 |
| - index_path = i.group(1), |
339 |
| - old_path = i.group(1), |
340 |
| - old_version = None, |
341 |
| - new_path = i.group(1), |
342 |
| - new_version = None, |
343 |
| - ) |
344 | 375 |
|
345 | 376 | return None
|
346 | 377 |
|
|
0 commit comments