changeset 24341 | 616c01b69898 |
parent 24306 | 6ddc86eedc3b |
child 24346 | 31edcea517c1 |
24340:567ae5365754 | 24341:616c01b69898 |
---|---|
13 import email.Generator |
13 import email.Generator |
14 import email.Parser |
14 import email.Parser |
15 |
15 |
16 from i18n import _ |
16 from i18n import _ |
17 from node import hex, short |
17 from node import hex, short |
18 import cStringIO |
|
18 import base85, mdiff, scmutil, util, diffhelpers, copies, encoding, error |
19 import base85, mdiff, scmutil, util, diffhelpers, copies, encoding, error |
19 |
20 |
20 gitre = re.compile('diff --git a/(.*) b/(.*)') |
21 gitre = re.compile('diff --git a/(.*) b/(.*)') |
21 tabsplitter = re.compile(r'(\t+|[^\t]+)') |
22 tabsplitter = re.compile(r'(\t+|[^\t]+)') |
22 |
23 |
1350 i = s.find(' ') |
1351 i = s.find(' ') |
1351 if i < 0: |
1352 if i < 0: |
1352 return s |
1353 return s |
1353 return s[:i] |
1354 return s[:i] |
1354 |
1355 |
1355 def parsepatch(fp): |
1356 def parsepatch(originalchunks): |
1356 """patch -> [] of headers -> [] of hunks """ |
1357 """patch -> [] of headers -> [] of hunks """ |
1357 class parser(object): |
1358 class parser(object): |
1358 """patch parsing state machine""" |
1359 """patch parsing state machine""" |
1359 def __init__(self): |
1360 def __init__(self): |
1360 self.fromline = 0 |
1361 self.fromline = 0 |
1419 'hunk': addhunk}, |
1420 'hunk': addhunk}, |
1420 'other': {'other': addother}, |
1421 'other': {'other': addother}, |
1421 } |
1422 } |
1422 |
1423 |
1423 p = parser() |
1424 p = parser() |
1425 fp = cStringIO.StringIO() |
|
1426 fp.write(''.join(originalchunks)) |
|
1427 fp.seek(0) |
|
1424 |
1428 |
1425 state = 'context' |
1429 state = 'context' |
1426 for newstate, data in scanpatch(fp): |
1430 for newstate, data in scanpatch(fp): |
1427 try: |
1431 try: |
1428 p.transitions[state][newstate](p, data) |
1432 p.transitions[state][newstate](p, data) |
1429 except KeyError: |
1433 except KeyError: |
1430 raise PatchError('unhandled transition: %s -> %s' % |
1434 raise PatchError('unhandled transition: %s -> %s' % |
1431 (state, newstate)) |
1435 (state, newstate)) |
1432 state = newstate |
1436 state = newstate |
1437 del fp |
|
1433 return p.finished() |
1438 return p.finished() |
1434 |
1439 |
1435 def pathtransform(path, strip, prefix): |
1440 def pathtransform(path, strip, prefix): |
1436 '''turn a path from a patch into a path suitable for the repository |
1441 '''turn a path from a patch into a path suitable for the repository |
1437 |
1442 |