comparison hgext/mq.py @ 4202:b7e66db28571

Remove undo log after mq operations that rollback would break
author Brendan Cully <brendan@kublai.com>
date Tue, 13 Mar 2007 21:50:42 -0700
parents 65aabd9f16f0
children dbc3846c09a1
comparison
equal deleted inserted replaced
4201:65aabd9f16f0 4202:b7e66db28571
304 if format and format.startswith("tag") and subject: 304 if format and format.startswith("tag") and subject:
305 message.insert(0, "") 305 message.insert(0, "")
306 message.insert(0, subject) 306 message.insert(0, subject)
307 return (message, comments, user, date, diffstart > 1) 307 return (message, comments, user, date, diffstart > 1)
308 308
309 def removeundo(self, repo):
310 undo = repo.sjoin('undo')
311 if not os.path.exists(undo):
312 return
313 try:
314 os.unlink(undo)
315 except OSError, inst:
316 self.ui.warn('error removing undo: %s\n' % str(inst))
317
309 def printdiff(self, repo, node1, node2=None, files=None, 318 def printdiff(self, repo, node1, node2=None, files=None,
310 fp=None, changes=None, opts={}): 319 fp=None, changes=None, opts={}):
311 fns, matchfn, anypats = cmdutil.matchpats(repo, files, opts) 320 fns, matchfn, anypats = cmdutil.matchpats(repo, files, opts)
312 321
313 patch.diff(repo, node1, node2, fns, match=matchfn, 322 patch.diff(repo, node1, node2, fns, match=matchfn,
347 if comments: 356 if comments:
348 comments = "\n".join(comments) + '\n\n' 357 comments = "\n".join(comments) + '\n\n'
349 patchf.write(comments) 358 patchf.write(comments)
350 self.printdiff(repo, head, n, fp=patchf) 359 self.printdiff(repo, head, n, fp=patchf)
351 patchf.close() 360 patchf.close()
361 self.removeundo(repo)
352 return (0, n) 362 return (0, n)
353 363
354 def qparents(self, repo, rev=None): 364 def qparents(self, repo, rev=None):
355 if rev is None: 365 if rev is None:
356 (p1, p2) = repo.dirstate.parents() 366 (p1, p2) = repo.dirstate.parents()
379 # the first patch in the queue is never a merge patch 389 # the first patch in the queue is never a merge patch
380 # 390 #
381 pname = ".hg.patches.merge.marker" 391 pname = ".hg.patches.merge.marker"
382 n = repo.commit(None, '[mq]: merge marker', user=None, force=1, 392 n = repo.commit(None, '[mq]: merge marker', user=None, force=1,
383 wlock=wlock) 393 wlock=wlock)
394 self.removeundo(repo)
384 self.applied.append(statusentry(revlog.hex(n), pname)) 395 self.applied.append(statusentry(revlog.hex(n), pname))
385 self.applied_dirty = 1 396 self.applied_dirty = 1
386 397
387 head = self.qparents(repo) 398 head = self.qparents(repo)
388 399
486 if fuzz and strict: 497 if fuzz and strict:
487 self.ui.warn("fuzz found when applying patch, stopping\n") 498 self.ui.warn("fuzz found when applying patch, stopping\n")
488 err = 1 499 err = 1
489 break 500 break
490 tr.close() 501 tr.close()
502 self.removeundo(repo)
491 return (err, n) 503 return (err, n)
492 504
493 def delete(self, repo, patches, opts): 505 def delete(self, repo, patches, opts):
494 realpatches = [] 506 realpatches = []
495 for patch in patches: 507 for patch in patches:
584 wlock = None 596 wlock = None
585 r = self.qrepo() 597 r = self.qrepo()
586 if r: r.add([patch]) 598 if r: r.add([patch])
587 if commitfiles: 599 if commitfiles:
588 self.refresh(repo, short=True) 600 self.refresh(repo, short=True)
601 self.removeundo(repo)
589 602
590 def strip(self, repo, rev, update=True, backup="all", wlock=None): 603 def strip(self, repo, rev, update=True, backup="all", wlock=None):
591 def limitheads(chlog, stop): 604 def limitheads(chlog, stop):
592 """return the list of all nodes that have no children""" 605 """return the list of all nodes that have no children"""
593 p = {} 606 p = {}
707 stripall(revnum) 720 stripall(revnum)
708 721
709 change = chlog.read(rev) 722 change = chlog.read(rev)
710 chlog.strip(revnum, revnum) 723 chlog.strip(revnum, revnum)
711 repo.manifest.strip(repo.manifest.rev(change[0]), revnum) 724 repo.manifest.strip(repo.manifest.rev(change[0]), revnum)
725 self.removeundo(repo)
712 if saveheads: 726 if saveheads:
713 self.ui.status("adding branch\n") 727 self.ui.status("adding branch\n")
714 commands.unbundle(self.ui, repo, "file:%s" % chgrpfile, 728 commands.unbundle(self.ui, repo, "file:%s" % chgrpfile,
715 update=False) 729 update=False)
716 if backup != "strip": 730 if backup != "strip":
1084 self.strip(repo, top, update=False, backup='strip', wlock=wlock) 1098 self.strip(repo, top, update=False, backup='strip', wlock=wlock)
1085 n = repo.commit(filelist, message, changes[1], match=matchfn, 1099 n = repo.commit(filelist, message, changes[1], match=matchfn,
1086 force=1, wlock=wlock) 1100 force=1, wlock=wlock)
1087 self.applied[-1] = statusentry(revlog.hex(n), patchfn) 1101 self.applied[-1] = statusentry(revlog.hex(n), patchfn)
1088 self.applied_dirty = 1 1102 self.applied_dirty = 1
1103 self.removeundo(repo)
1089 else: 1104 else:
1090 self.printdiff(repo, patchparent, fp=patchf) 1105 self.printdiff(repo, patchparent, fp=patchf)
1091 patchf.close() 1106 patchf.close()
1092 added = repo.status()[1] 1107 added = repo.status()[1]
1093 for a in added: 1108 for a in added:
1266 if not n: 1281 if not n:
1267 self.ui.warn("repo commit failed\n") 1282 self.ui.warn("repo commit failed\n")
1268 return 1 1283 return 1
1269 self.applied.append(statusentry(revlog.hex(n),'.hg.patches.save.line')) 1284 self.applied.append(statusentry(revlog.hex(n),'.hg.patches.save.line'))
1270 self.applied_dirty = 1 1285 self.applied_dirty = 1
1286 self.removeundo(undo)
1271 1287
1272 def full_series_end(self): 1288 def full_series_end(self):
1273 if len(self.applied) > 0: 1289 if len(self.applied) > 0:
1274 p = self.applied[-1].name 1290 p = self.applied[-1].name
1275 end = self.find_series(p) 1291 end = self.find_series(p)