Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/patch.py @ 4898:bc905a6c0e76
patch.py: fix some incorrect uses of _() for i18n
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Tue, 17 Jul 2007 09:39:30 -0700 |
parents | 4574925db5c0 |
children | 1b7bbc4349e7 |
comparison
equal
deleted
inserted
replaced
4897:4574925db5c0 | 4898:bc905a6c0e76 |
---|---|
220 if cwd: | 220 if cwd: |
221 curdir = os.getcwd() | 221 curdir = os.getcwd() |
222 os.chdir(cwd) | 222 os.chdir(cwd) |
223 try: | 223 try: |
224 ret = applydiff(ui, fp, files, strip=strip) | 224 ret = applydiff(ui, fp, files, strip=strip) |
225 except PatchError: | 225 except PatchError, err: |
226 ui.debug(err) | |
226 raise util.Abort(_("patch failed to apply")) | 227 raise util.Abort(_("patch failed to apply")) |
227 if cwd: | 228 if cwd: |
228 os.chdir(curdir) | 229 os.chdir(curdir) |
229 if ret < 0: | 230 if ret < 0: |
230 raise util.Abort(_("patch failed to apply")) | 231 raise util.Abort(_("patch failed to apply")) |
267 def printfile(self, warn): | 268 def printfile(self, warn): |
268 if self.fileprinted: | 269 if self.fileprinted: |
269 return | 270 return |
270 if warn or self.ui.verbose: | 271 if warn or self.ui.verbose: |
271 self.fileprinted = True | 272 self.fileprinted = True |
272 s = _("patching file %s\n" % self.fname) | 273 s = _("patching file %s\n") % self.fname |
273 if warn: | 274 if warn: |
274 self.ui.warn(s) | 275 self.ui.warn(s) |
275 else: | 276 else: |
276 self.ui.note(s) | 277 self.ui.note(s) |
277 | 278 |
314 else: | 315 else: |
315 hunkstr = "" | 316 hunkstr = "" |
316 | 317 |
317 fname = self.fname + ".rej" | 318 fname = self.fname + ".rej" |
318 self.ui.warn( | 319 self.ui.warn( |
319 _("%d out of %d hunk%s FAILED -- saving rejects to file %s\n" % | 320 _("%d out of %d hunk%s FAILED -- saving rejects to file %s\n") % |
320 (len(self.rej), self.hunks, hunkstr, fname))) | 321 (len(self.rej), self.hunks, hunkstr, fname)) |
321 try: os.unlink(fname) | 322 try: os.unlink(fname) |
322 except: | 323 except: |
323 pass | 324 pass |
324 fp = file(fname, 'w') | 325 fp = file(fname, 'w') |
325 base = os.path.basename(self.fname) | 326 base = os.path.basename(self.fname) |
350 self.write() | 351 self.write() |
351 self.write_rej() | 352 self.write_rej() |
352 | 353 |
353 def apply(self, h, reverse): | 354 def apply(self, h, reverse): |
354 if not h.complete(): | 355 if not h.complete(): |
355 raise PatchError("bad hunk #%d %s (%d %d %d %d)" % | 356 raise PatchError(_("bad hunk #%d %s (%d %d %d %d)") % |
356 (h.number, h.desc, len(h.a), h.lena, len(h.b), | 357 (h.number, h.desc, len(h.a), h.lena, len(h.b), |
357 h.lenb)) | 358 h.lenb)) |
358 | 359 |
359 self.hunks += 1 | 360 self.hunks += 1 |
360 if reverse: | 361 if reverse: |
361 h.reverse() | 362 h.reverse() |
362 | 363 |
363 if self.exists and h.createfile(): | 364 if self.exists and h.createfile(): |
364 self.ui.warn(_("file %s already exists\n" % self.fname)) | 365 self.ui.warn(_("file %s already exists\n") % self.fname) |
365 self.rej.append(h) | 366 self.rej.append(h) |
366 return -1 | 367 return -1 |
367 | 368 |
368 if isinstance(h, binhunk): | 369 if isinstance(h, binhunk): |
369 if h.rmfile(): | 370 if h.rmfile(): |
421 offset = l - orig_start - fuzzlen | 422 offset = l - orig_start - fuzzlen |
422 if offset == 1: | 423 if offset == 1: |
423 linestr = "line" | 424 linestr = "line" |
424 else: | 425 else: |
425 linestr = "lines" | 426 linestr = "lines" |
426 f(_("Hunk #%d succeeded at %d %s(offset %d %s).\n" % | 427 f(_("Hunk #%d succeeded at %d %s(offset %d %s).\n") % |
427 (h.number, l+1, fuzzstr, offset, linestr))) | 428 (h.number, l+1, fuzzstr, offset, linestr)) |
428 return fuzzlen | 429 return fuzzlen |
429 self.printfile(True) | 430 self.printfile(True) |
430 self.ui.warn(_("Hunk #%d FAILED at %d\n" % (h.number, orig_start))) | 431 self.ui.warn(_("Hunk #%d FAILED at %d\n") % (h.number, orig_start)) |
431 self.rej.append(h) | 432 self.rej.append(h) |
432 return -1 | 433 return -1 |
433 | 434 |
434 class hunk: | 435 class hunk: |
435 def __init__(self, desc, num, lr, context): | 436 def __init__(self, desc, num, lr, context): |
444 self.read_unified_hunk(lr) | 445 self.read_unified_hunk(lr) |
445 | 446 |
446 def read_unified_hunk(self, lr): | 447 def read_unified_hunk(self, lr): |
447 m = unidesc.match(self.desc) | 448 m = unidesc.match(self.desc) |
448 if not m: | 449 if not m: |
449 raise PatchError("bad hunk #%d" % self.number) | 450 raise PatchError(_("bad hunk #%d") % self.number) |
450 self.starta, foo, self.lena, self.startb, foo2, self.lenb = m.groups() | 451 self.starta, foo, self.lena, self.startb, foo2, self.lenb = m.groups() |
451 if self.lena == None: | 452 if self.lena == None: |
452 self.lena = 1 | 453 self.lena = 1 |
453 else: | 454 else: |
454 self.lena = int(self.lena) | 455 self.lena = int(self.lena) |
470 | 471 |
471 def read_context_hunk(self, lr): | 472 def read_context_hunk(self, lr): |
472 self.desc = lr.readline() | 473 self.desc = lr.readline() |
473 m = contextdesc.match(self.desc) | 474 m = contextdesc.match(self.desc) |
474 if not m: | 475 if not m: |
475 raise PatchError("bad hunk #%d" % self.number) | 476 raise PatchError(_("bad hunk #%d") % self.number) |
476 foo, self.starta, foo2, aend, foo3 = m.groups() | 477 foo, self.starta, foo2, aend, foo3 = m.groups() |
477 self.starta = int(self.starta) | 478 self.starta = int(self.starta) |
478 if aend == None: | 479 if aend == None: |
479 aend = self.starta | 480 aend = self.starta |
480 self.lena = int(aend) - self.starta | 481 self.lena = int(aend) - self.starta |
489 if l.startswith('- ') or l.startswith('! '): | 490 if l.startswith('- ') or l.startswith('! '): |
490 u = '-' + s | 491 u = '-' + s |
491 elif l.startswith(' '): | 492 elif l.startswith(' '): |
492 u = ' ' + s | 493 u = ' ' + s |
493 else: | 494 else: |
494 raise PatchError("bad hunk #%d old text line %d" % (self.number, x)) | 495 raise PatchError(_("bad hunk #%d old text line %d") % |
496 (self.number, x)) | |
495 self.a.append(u) | 497 self.a.append(u) |
496 self.hunk.append(u) | 498 self.hunk.append(u) |
497 | 499 |
498 l = lr.readline() | 500 l = lr.readline() |
499 if l.startswith('\ '): | 501 if l.startswith('\ '): |
501 self.a[-1] = s | 503 self.a[-1] = s |
502 self.hunk[-1] = s | 504 self.hunk[-1] = s |
503 l = lr.readline() | 505 l = lr.readline() |
504 m = contextdesc.match(l) | 506 m = contextdesc.match(l) |
505 if not m: | 507 if not m: |
506 raise PatchError("bad hunk #%d" % self.number) | 508 raise PatchError(_("bad hunk #%d") % self.number) |
507 foo, self.startb, foo2, bend, foo3 = m.groups() | 509 foo, self.startb, foo2, bend, foo3 = m.groups() |
508 self.startb = int(self.startb) | 510 self.startb = int(self.startb) |
509 if bend == None: | 511 if bend == None: |
510 bend = self.startb | 512 bend = self.startb |
511 self.lenb = int(bend) - self.startb | 513 self.lenb = int(bend) - self.startb |
530 elif len(self.b) == 0: | 532 elif len(self.b) == 0: |
531 # this can happen when the hunk does not add any lines | 533 # this can happen when the hunk does not add any lines |
532 lr.push(l) | 534 lr.push(l) |
533 break | 535 break |
534 else: | 536 else: |
535 raise PatchError("bad hunk #%d old text line %d" % (self.number, x)) | 537 raise PatchError(_("bad hunk #%d old text line %d") % |
538 (self.number, x)) | |
536 self.b.append(s) | 539 self.b.append(s) |
537 while True: | 540 while True: |
538 if hunki >= len(self.hunk): | 541 if hunki >= len(self.hunk): |
539 h = "" | 542 h = "" |
540 else: | 543 else: |
674 self.hunk.append(line) | 677 self.hunk.append(line) |
675 while line and not line.startswith('literal '): | 678 while line and not line.startswith('literal '): |
676 line = fp.readline() | 679 line = fp.readline() |
677 self.hunk.append(line) | 680 self.hunk.append(line) |
678 if not line: | 681 if not line: |
679 raise PatchError('could not extract binary patch') | 682 raise PatchError(_('could not extract binary patch')) |
680 size = int(line[8:].rstrip()) | 683 size = int(line[8:].rstrip()) |
681 dec = [] | 684 dec = [] |
682 line = fp.readline() | 685 line = fp.readline() |
683 self.hunk.append(line) | 686 self.hunk.append(line) |
684 while len(line) > 1: | 687 while len(line) > 1: |
690 dec.append(base85.b85decode(line[1:-1])[:l]) | 693 dec.append(base85.b85decode(line[1:-1])[:l]) |
691 line = fp.readline() | 694 line = fp.readline() |
692 self.hunk.append(line) | 695 self.hunk.append(line) |
693 text = zlib.decompress(''.join(dec)) | 696 text = zlib.decompress(''.join(dec)) |
694 if len(text) != size: | 697 if len(text) != size: |
695 raise PatchError('binary patch is %d bytes, not %d' % | 698 raise PatchError(_('binary patch is %d bytes, not %d') % |
696 len(text), size) | 699 len(text), size) |
697 self.text = text | 700 self.text = text |
698 | 701 |
699 def parsefilename(str): | 702 def parsefilename(str): |
700 # --- filename \t|space stuff | 703 # --- filename \t|space stuff |
713 if count == 0: | 716 if count == 0: |
714 return path.rstrip() | 717 return path.rstrip() |
715 while count > 0: | 718 while count > 0: |
716 i = path.find(os.sep, i) | 719 i = path.find(os.sep, i) |
717 if i == -1: | 720 if i == -1: |
718 raise PatchError("Unable to strip away %d dirs from %s" % | 721 raise PatchError(_("unable to strip away %d dirs from %s") % |
719 (count, path)) | 722 (count, path)) |
720 i += 1 | 723 i += 1 |
721 # consume '//' in the path | 724 # consume '//' in the path |
722 while i < pathlen - 1 and path[i] == os.sep: | 725 while i < pathlen - 1 and path[i] == os.sep: |
723 i += 1 | 726 i += 1 |
735 goodb = os.path.exists(bfile) and not nullb | 738 goodb = os.path.exists(bfile) and not nullb |
736 createfunc = hunk.createfile | 739 createfunc = hunk.createfile |
737 if reverse: | 740 if reverse: |
738 createfunc = hunk.rmfile | 741 createfunc = hunk.rmfile |
739 if not goodb and not gooda and not createfunc(): | 742 if not goodb and not gooda and not createfunc(): |
740 raise PatchError(_("Unable to find %s or %s for patching\n" % | 743 raise PatchError(_("unable to find %s or %s for patching") % |
741 (afile, bfile))) | 744 (afile, bfile)) |
742 if gooda and goodb: | 745 if gooda and goodb: |
743 fname = bfile | 746 fname = bfile |
744 if afile in bfile: | 747 if afile in bfile: |
745 fname = afile | 748 fname = afile |
746 elif gooda: | 749 elif gooda: |
833 ((context or context == None) and x.startswith('***************')))): | 836 ((context or context == None) and x.startswith('***************')))): |
834 try: | 837 try: |
835 if context == None and x.startswith('***************'): | 838 if context == None and x.startswith('***************'): |
836 context = True | 839 context = True |
837 current_hunk = hunk(x, hunknum + 1, lr, context) | 840 current_hunk = hunk(x, hunknum + 1, lr, context) |
838 except PatchError: | 841 except PatchError, err: |
842 ui.debug(err) | |
839 current_hunk = None | 843 current_hunk = None |
840 continue | 844 continue |
841 hunknum += 1 | 845 hunknum += 1 |
842 if not current_file: | 846 if not current_file: |
843 if sourcefile: | 847 if sourcefile: |
915 ret = current_file.apply(current_hunk, reverse) | 919 ret = current_file.apply(current_hunk, reverse) |
916 if ret > 0: | 920 if ret > 0: |
917 err = 1 | 921 err = 1 |
918 else: | 922 else: |
919 fname = current_file and current_file.fname or None | 923 fname = current_file and current_file.fname or None |
920 raise PatchError("malformed patch %s %s" % (fname, | 924 raise PatchError(_("malformed patch %s %s") % (fname, |
921 current_hunk.desc)) | 925 current_hunk.desc)) |
922 if current_file: | 926 if current_file: |
923 current_file.close() | 927 current_file.close() |
924 if rejmerge: | 928 if rejmerge: |
925 rejmerge(current_file) | 929 rejmerge(current_file) |
927 if updatedir and git: | 931 if updatedir and git: |
928 updatedir(gitpatches) | 932 updatedir(gitpatches) |
929 if rejects: | 933 if rejects: |
930 return -1 | 934 return -1 |
931 if hunknum == 0 and dopatch and not gitworkdone: | 935 if hunknum == 0 and dopatch and not gitworkdone: |
932 raise PatchError("No valid hunks found") | 936 raise PatchError(_("no valid hunks found")) |
933 return err | 937 return err |
934 | 938 |
935 def diffopts(ui, opts={}, untrusted=False): | 939 def diffopts(ui, opts={}, untrusted=False): |
936 def get(key, name=None): | 940 def get(key, name=None): |
937 return (opts.get(key) or | 941 return (opts.get(key) or |