comparison hgext/mq.py @ 4430:94cb7561337d

Fix test-patchbomb for crew
author Brendan Cully <brendan@kublai.com>
date Tue, 08 May 2007 13:08:20 -0700
parents 28b7d949ef6a 0532491f7476
children 905397be7688
comparison
equal deleted inserted replaced
4417:0912d8df5e19 4430:94cb7561337d
433 return (False, files, False) 433 return (False, files, False)
434 434
435 return (True, files, fuzz) 435 return (True, files, fuzz)
436 436
437 def apply(self, repo, series, list=False, update_status=True, 437 def apply(self, repo, series, list=False, update_status=True,
438 strict=False, patchdir=None, merge=None, wlock=None): 438 strict=False, patchdir=None, merge=None, wlock=None,
439 all_files={}):
440 tr = repo.transaction()
441 try:
442 ret = self._apply(tr, repo, series, list, update_status,
443 strict, patchdir, merge, wlock,
444 all_files=all_files)
445 tr.close()
446 self.save_dirty()
447 return ret
448 except:
449 try:
450 tr.abort()
451 finally:
452 repo.reload()
453 repo.wreload()
454 raise
455
456 def _apply(self, tr, repo, series, list=False, update_status=True,
457 strict=False, patchdir=None, merge=None, wlock=None,
458 all_files={}):
439 # TODO unify with commands.py 459 # TODO unify with commands.py
440 if not patchdir: 460 if not patchdir:
441 patchdir = self.path 461 patchdir = self.path
442 err = 0 462 err = 0
443 if not wlock: 463 if not wlock:
444 wlock = repo.wlock() 464 wlock = repo.wlock()
445 lock = repo.lock() 465 lock = repo.lock()
446 tr = repo.transaction()
447 n = None 466 n = None
448 for patchname in series: 467 for patchname in series:
449 pushable, reason = self.pushable(patchname) 468 pushable, reason = self.pushable(patchname)
450 if not pushable: 469 if not pushable:
451 self.explain_pushable(patchname, all_patches=True) 470 self.explain_pushable(patchname, all_patches=True)
466 if list: 485 if list:
467 message.append("\nimported patch %s" % patchname) 486 message.append("\nimported patch %s" % patchname)
468 message = '\n'.join(message) 487 message = '\n'.join(message)
469 488
470 (patcherr, files, fuzz) = self.patch(repo, pf) 489 (patcherr, files, fuzz) = self.patch(repo, pf)
490 all_files.update(files)
471 patcherr = not patcherr 491 patcherr = not patcherr
472 492
473 if merge and files: 493 if merge and files:
474 # Mark as removed/merged and update dirstate parent info 494 # Mark as removed/merged and update dirstate parent info
475 removed = [] 495 removed = []
504 524
505 if fuzz and strict: 525 if fuzz and strict:
506 self.ui.warn("fuzz found when applying patch, stopping\n") 526 self.ui.warn("fuzz found when applying patch, stopping\n")
507 err = 1 527 err = 1
508 break 528 break
509 tr.close()
510 self.removeundo(repo) 529 self.removeundo(repo)
511 return (err, n) 530 return (err, n)
512 531
513 def delete(self, repo, patches, opts): 532 def delete(self, repo, patches, opts):
514 realpatches = [] 533 realpatches = []
858 patch = self.series[start] 877 patch = self.series[start]
859 end = start + 1 878 end = start + 1
860 else: 879 else:
861 end = self.series.index(patch, start) + 1 880 end = self.series.index(patch, start) + 1
862 s = self.series[start:end] 881 s = self.series[start:end]
863 if mergeq: 882 all_files = {}
864 ret = self.mergepatch(repo, mergeq, s, wlock) 883 try:
865 else: 884 if mergeq:
866 ret = self.apply(repo, s, list, wlock=wlock) 885 ret = self.mergepatch(repo, mergeq, s, wlock)
886 else:
887 ret = self.apply(repo, s, list, wlock=wlock,
888 all_files=all_files)
889 except:
890 self.ui.warn(_('cleaning up working directory...'))
891 node = repo.dirstate.parents()[0]
892 hg.revert(repo, node, None, wlock)
893 unknown = repo.status(wlock=wlock)[4]
894 # only remove unknown files that we know we touched or
895 # created while patching
896 for f in unknown:
897 if f in all_files:
898 util.unlink(repo.wjoin(f))
899 self.ui.warn(_('done\n'))
900 raise
867 top = self.applied[-1].name 901 top = self.applied[-1].name
868 if ret[0]: 902 if ret[0]:
869 self.ui.write("Errors during apply, please fix and refresh %s\n" % 903 self.ui.write("Errors during apply, please fix and refresh %s\n" %
870 top) 904 top)
871 else: 905 else:
1835 return 1 1869 return 1
1836 mergeq = queue(ui, repo.join(""), newpath) 1870 mergeq = queue(ui, repo.join(""), newpath)
1837 ui.warn("merging with queue at: %s\n" % mergeq.path) 1871 ui.warn("merging with queue at: %s\n" % mergeq.path)
1838 ret = q.push(repo, patch, force=opts['force'], list=opts['list'], 1872 ret = q.push(repo, patch, force=opts['force'], list=opts['list'],
1839 mergeq=mergeq) 1873 mergeq=mergeq)
1840 q.save_dirty()
1841 return ret 1874 return ret
1842 1875
1843 def pop(ui, repo, patch=None, **opts): 1876 def pop(ui, repo, patch=None, **opts):
1844 """pop the current patch off the stack""" 1877 """pop the current patch off the stack"""
1845 localupdate = True 1878 localupdate = True