Mercurial > hg > mercurial-crew-with-dirclash
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) |