##// END OF EJS Templates
mq: unify code for qdel -r and qfin
Dirkjan Ochtman -
r8833:14639c05 default
parent child Browse files
Show More
@@ -616,37 +616,8 b' class queue(object):'
616 break
616 break
617 return (err, n)
617 return (err, n)
618
618
619 def _clean_series(self, patches):
619 def _cleanup(self, patches, numrevs, keep=False):
620 for i in sorted([self.find_series(p) for p in patches], reverse=True):
620 if not keep:
621 del self.full_series[i]
622 self.parse_series()
623 self.series_dirty = 1
624
625 def finish(self, repo, revs):
626 firstrev = repo[self.applied[0].rev].rev()
627 appliedbase = 0
628 patches = []
629 for rev in sorted(revs):
630
631 if rev < firstrev:
632 raise util.Abort(_('revision %d is not managed') % rev)
633 base = bin(self.applied[appliedbase].rev)
634
635 ctx = repo[rev]
636 if ctx.node() != base:
637 msg = _('cannot delete revision %d above applied patches')
638 raise util.Abort(msg % rev)
639
640 patch = self.applied[appliedbase].name
641 for fmt in ('[mq]: %s', 'imported patch %s'):
642 if ctx.description() == fmt % patch:
643 msg = _('patch %s finalized without changeset message\n')
644 repo.ui.status(msg % patch)
645 break
646
647 patches.append(self.applied[appliedbase].name)
648 appliedbase += 1
649
650 r = self.qrepo()
621 r = self.qrepo()
651 if r:
622 if r:
652 r.remove(patches, True)
623 r.remove(patches, True)
@@ -654,9 +625,42 b' class queue(object):'
654 for p in patches:
625 for p in patches:
655 os.unlink(self.join(p))
626 os.unlink(self.join(p))
656
627
657 del self.applied[:appliedbase]
628 if numrevs:
629 del self.applied[:numrevs]
658 self.applied_dirty = 1
630 self.applied_dirty = 1
659 self._clean_series(patches)
631
632 for i in sorted([self.find_series(p) for p in patches], reverse=True):
633 del self.full_series[i]
634 self.parse_series()
635 self.series_dirty = 1
636
637 def _revpatches(self, repo, revs):
638 firstrev = repo[self.applied[0].rev].rev()
639 patches = []
640 for i, rev in enumerate(revs):
641
642 if rev < firstrev:
643 raise util.Abort(_('revision %d is not managed') % rev)
644
645 ctx = repo[rev]
646 base = bin(self.applied[i].rev)
647 if ctx.node() != base:
648 msg = _('cannot delete revision %d above applied patches')
649 raise util.Abort(msg % rev)
650
651 patch = self.applied[i].name
652 for fmt in ('[mq]: %s', 'imported patch %s'):
653 if ctx.description() == fmt % patch:
654 msg = _('patch %s finalized without changeset message\n')
655 repo.ui.status(msg % patch)
656 break
657
658 patches.append(patch)
659 return patches
660
661 def finish(self, repo, revs):
662 patches = self._revpatches(repo, sorted(revs))
663 self._cleanup(patches, len(patches))
660
664
661 def delete(self, repo, patches, opts):
665 def delete(self, repo, patches, opts):
662 if not patches and not opts.get('rev'):
666 if not patches and not opts.get('rev'):
@@ -673,37 +677,18 b' class queue(object):'
673 raise util.Abort(_("patch %s not in series file") % patch)
677 raise util.Abort(_("patch %s not in series file") % patch)
674 realpatches.append(patch)
678 realpatches.append(patch)
675
679
676 appliedbase = 0
680 numrevs = 0
677 if opts.get('rev'):
681 if opts.get('rev'):
678 if not self.applied:
682 if not self.applied:
679 raise util.Abort(_('no patches applied'))
683 raise util.Abort(_('no patches applied'))
680 revs = cmdutil.revrange(repo, opts['rev'])
684 revs = cmdutil.revrange(repo, opts['rev'])
681 if len(revs) > 1 and revs[0] > revs[1]:
685 if len(revs) > 1 and revs[0] > revs[1]:
682 revs.reverse()
686 revs.reverse()
683 for rev in revs:
687 revpatches = self._revpatches(repo, revs)
684 if appliedbase >= len(self.applied):
688 realpatches += revpatches
685 raise util.Abort(_("revision %d is not managed") % rev)
689 numrevs = len(revpatches)
686
687 base = bin(self.applied[appliedbase].rev)
688 node = repo.changelog.node(rev)
689 if node != base:
690 raise util.Abort(_("cannot delete revision %d above "
691 "applied patches") % rev)
692 realpatches.append(self.applied[appliedbase].name)
693 appliedbase += 1
694
690
695 if not opts.get('keep'):
691 self._cleanup(realpatches, numrevs, opts.get('keep'))
696 r = self.qrepo()
697 if r:
698 r.remove(realpatches, True)
699 else:
700 for p in realpatches:
701 os.unlink(self.join(p))
702
703 if appliedbase:
704 del self.applied[:appliedbase]
705 self.applied_dirty = 1
706 self._clean_series(realpatches)
707
692
708 def check_toppatch(self, repo):
693 def check_toppatch(self, repo):
709 if len(self.applied) > 0:
694 if len(self.applied) > 0:
@@ -13,9 +13,12 b' a'
13 b
13 b
14 series
14 series
15 status
15 status
16 patch a finalized without changeset message
16 1 [mq]: a
17 1 [mq]: a
17 0 base
18 0 base
18 abort: cannot delete revision 3 above applied patches
19 abort: cannot delete revision 3 above applied patches
20 patch d finalized without changeset message
21 patch e finalized without changeset message
19 f
22 f
20 4 [mq]: f
23 4 [mq]: f
21 3 [mq]: e
24 3 [mq]: e
General Comments 0
You need to be logged in to leave comments. Login now