1382 if i < 0: |
1382 if i < 0: |
1383 i = s.find(' ') |
1383 i = s.find(' ') |
1384 if i < 0: |
1384 if i < 0: |
1385 return s |
1385 return s |
1386 return s[:i] |
1386 return s[:i] |
|
1387 |
|
1388 def reversehunks(hunks): |
|
1389 '''reverse the signs in the hunks given as argument |
|
1390 |
|
1391 This function operates on hunks coming out of patch.filterpatch, that is |
|
1392 a list of the form: [header1, hunk1, hunk2, header2...]. Example usage: |
|
1393 |
|
1394 >>> rawpatch = """diff --git a/folder1/g b/folder1/g |
|
1395 ... --- a/folder1/g |
|
1396 ... +++ b/folder1/g |
|
1397 ... @@ -1,7 +1,7 @@ |
|
1398 ... +firstline |
|
1399 ... c |
|
1400 ... 1 |
|
1401 ... 2 |
|
1402 ... + 3 |
|
1403 ... -4 |
|
1404 ... 5 |
|
1405 ... d |
|
1406 ... +lastline""" |
|
1407 >>> hunks = parsepatch(rawpatch) |
|
1408 >>> hunkscomingfromfilterpatch = [] |
|
1409 >>> for h in hunks: |
|
1410 ... hunkscomingfromfilterpatch.append(h) |
|
1411 ... hunkscomingfromfilterpatch.extend(h.hunks) |
|
1412 |
|
1413 >>> reversedhunks = reversehunks(hunkscomingfromfilterpatch) |
|
1414 >>> fp = cStringIO.StringIO() |
|
1415 >>> for c in reversedhunks: |
|
1416 ... c.write(fp) |
|
1417 >>> fp.seek(0) |
|
1418 >>> reversedpatch = fp.read() |
|
1419 >>> print reversedpatch |
|
1420 diff --git a/folder1/g b/folder1/g |
|
1421 --- a/folder1/g |
|
1422 +++ b/folder1/g |
|
1423 @@ -1,4 +1,3 @@ |
|
1424 -firstline |
|
1425 c |
|
1426 1 |
|
1427 2 |
|
1428 @@ -1,6 +2,6 @@ |
|
1429 c |
|
1430 1 |
|
1431 2 |
|
1432 - 3 |
|
1433 +4 |
|
1434 5 |
|
1435 d |
|
1436 @@ -5,3 +6,2 @@ |
|
1437 5 |
|
1438 d |
|
1439 -lastline |
|
1440 |
|
1441 ''' |
|
1442 |
|
1443 import crecord as crecordmod |
|
1444 newhunks = [] |
|
1445 for c in hunks: |
|
1446 if isinstance(c, crecordmod.uihunk): |
|
1447 # curses hunks encapsulate the record hunk in _hunk |
|
1448 c = c._hunk |
|
1449 if isinstance(c, recordhunk): |
|
1450 for j, line in enumerate(c.hunk): |
|
1451 if line.startswith("-"): |
|
1452 c.hunk[j] = "+" + c.hunk[j][1:] |
|
1453 elif line.startswith("+"): |
|
1454 c.hunk[j] = "-" + c.hunk[j][1:] |
|
1455 c.added, c.removed = c.removed, c.added |
|
1456 newhunks.append(c) |
|
1457 return newhunks |
1387 |
1458 |
1388 def parsepatch(originalchunks): |
1459 def parsepatch(originalchunks): |
1389 """patch -> [] of headers -> [] of hunks """ |
1460 """patch -> [] of headers -> [] of hunks """ |
1390 class parser(object): |
1461 class parser(object): |
1391 """patch parsing state machine""" |
1462 """patch parsing state machine""" |