Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/patch.py @ 5853:deb0d3518674
Merge with crew-stable
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Sat, 12 Jan 2008 20:49:07 +0100 |
parents | 0145f9afb0e7 03ce5a919ae3 |
children | d39af2eabb8c |
comparison
equal
deleted
inserted
replaced
5850:a76395713691 | 5853:deb0d3518674 |
---|---|
503 self.ui.warn(_("Hunk #%d FAILED at %d\n") % (h.number, orig_start)) | 503 self.ui.warn(_("Hunk #%d FAILED at %d\n") % (h.number, orig_start)) |
504 self.rej.append(h) | 504 self.rej.append(h) |
505 return -1 | 505 return -1 |
506 | 506 |
507 class hunk: | 507 class hunk: |
508 def __init__(self, desc, num, lr, context): | 508 def __init__(self, desc, num, lr, context, gitpatch=None): |
509 self.number = num | 509 self.number = num |
510 self.desc = desc | 510 self.desc = desc |
511 self.hunk = [ desc ] | 511 self.hunk = [ desc ] |
512 self.a = [] | 512 self.a = [] |
513 self.b = [] | 513 self.b = [] |
514 if context: | 514 if context: |
515 self.read_context_hunk(lr) | 515 self.read_context_hunk(lr) |
516 else: | 516 else: |
517 self.read_unified_hunk(lr) | 517 self.read_unified_hunk(lr) |
518 self.gitpatch = gitpatch | |
518 | 519 |
519 def read_unified_hunk(self, lr): | 520 def read_unified_hunk(self, lr): |
520 m = unidesc.match(self.desc) | 521 m = unidesc.match(self.desc) |
521 if not m: | 522 if not m: |
522 raise PatchError(_("bad hunk #%d") % self.number) | 523 raise PatchError(_("bad hunk #%d") % self.number) |
667 | 668 |
668 def complete(self): | 669 def complete(self): |
669 return len(self.a) == self.lena and len(self.b) == self.lenb | 670 return len(self.a) == self.lena and len(self.b) == self.lenb |
670 | 671 |
671 def createfile(self): | 672 def createfile(self): |
672 return self.starta == 0 and self.lena == 0 | 673 create = self.gitpatch is None or self.gitpatch.op == 'ADD' |
674 return self.starta == 0 and self.lena == 0 and create | |
673 | 675 |
674 def rmfile(self): | 676 def rmfile(self): |
675 return self.startb == 0 and self.lenb == 0 | 677 remove = self.gitpatch is None or self.gitpatch.op == 'DELETE' |
678 return self.startb == 0 and self.lenb == 0 and remove | |
676 | 679 |
677 def fuzzit(self, l, fuzz, toponly): | 680 def fuzzit(self, l, fuzz, toponly): |
678 # this removes context lines from the top and bottom of list 'l'. It | 681 # this removes context lines from the top and bottom of list 'l'. It |
679 # checks the hunk to make sure only context lines are removed, and then | 682 # checks the hunk to make sure only context lines are removed, and then |
680 # returns a new shortened list of lines. | 683 # returns a new shortened list of lines. |
771 len(text), size) | 774 len(text), size) |
772 self.text = text | 775 self.text = text |
773 | 776 |
774 def parsefilename(str): | 777 def parsefilename(str): |
775 # --- filename \t|space stuff | 778 # --- filename \t|space stuff |
776 s = str[4:] | 779 s = str[4:].rstrip('\r\n') |
777 i = s.find('\t') | 780 i = s.find('\t') |
778 if i < 0: | 781 if i < 0: |
779 i = s.find(' ') | 782 i = s.find(' ') |
780 if i < 0: | 783 if i < 0: |
781 return s | 784 return s |
903 if ((sourcefile or state == BFILE) and ((not context and x[0] == '@') or | 906 if ((sourcefile or state == BFILE) and ((not context and x[0] == '@') or |
904 ((context or context == None) and x.startswith('***************')))): | 907 ((context or context == None) and x.startswith('***************')))): |
905 try: | 908 try: |
906 if context == None and x.startswith('***************'): | 909 if context == None and x.startswith('***************'): |
907 context = True | 910 context = True |
908 current_hunk = hunk(x, hunknum + 1, lr, context) | 911 gpatch = changed.get(bfile[2:], (None, None))[1] |
912 current_hunk = hunk(x, hunknum + 1, lr, context, gpatch) | |
909 except PatchError, err: | 913 except PatchError, err: |
910 ui.debug(err) | 914 ui.debug(err) |
911 current_hunk = None | 915 current_hunk = None |
912 continue | 916 continue |
913 hunknum += 1 | 917 hunknum += 1 |