comparison hgext/mq.py @ 2832:582cbc4392cb

qselect: add --pop, --reapply options
author Vadim Gelfer <vadim.gelfer@gmail.com>
date Thu, 10 Aug 2006 14:58:10 -0700
parents 49988d9f0758
children addd03c7fbfa
comparison
equal deleted inserted replaced
2831:0b9ac7dfcf56 2832:582cbc4392cb
723 # 723 #
724 # 1) a number to indicate an offset in the series file 724 # 1) a number to indicate an offset in the series file
725 # 2) a unique substring of the patch name was given 725 # 2) a unique substring of the patch name was given
726 # 3) patchname[-+]num to indicate an offset in the series file 726 # 3) patchname[-+]num to indicate an offset in the series file
727 def lookup(self, patch, strict=False): 727 def lookup(self, patch, strict=False):
728 patch = patch and str(patch)
729
728 def partial_name(s): 730 def partial_name(s):
729 if s in self.series: 731 if s in self.series:
730 return s 732 return s
731 matches = [x for x in self.series if s in x] 733 matches = [x for x in self.series if s in x]
732 if len(matches) > 1: 734 if len(matches) > 1:
1748 1750
1749 use -n/--none to deactivate guards (no other arguments needed). 1751 use -n/--none to deactivate guards (no other arguments needed).
1750 when no guards active, patches with posative guards are skipped, 1752 when no guards active, patches with posative guards are skipped,
1751 patches with nagative guards are pushed. 1753 patches with nagative guards are pushed.
1752 1754
1755 qselect can change guards of applied patches. it does not pop
1756 guarded patches by default. use --pop to pop back to last applied
1757 patch that is not guarded. use --reapply (implies --pop) to push
1758 back to current patch afterwards, but skip guarded patches.
1759
1753 use -s/--series to print list of all guards in series file (no 1760 use -s/--series to print list of all guards in series file (no
1754 other arguments needed). use -v for more information.''' 1761 other arguments needed). use -v for more information.'''
1755 1762
1756 q = repo.mq 1763 q = repo.mq
1757 guards = q.active() 1764 guards = q.active()
1758 if args or opts['none']: 1765 if args or opts['none']:
1766 old_unapplied = q.unapplied(repo)
1767 old_guarded = [i for i in xrange(len(q.applied)) if
1768 not q.pushable(i)[0]]
1759 q.set_active(args) 1769 q.set_active(args)
1760 q.save_dirty() 1770 q.save_dirty()
1761 if not args: 1771 if not args:
1762 ui.status(_('guards deactivated\n')) 1772 ui.status(_('guards deactivated\n'))
1763 if q.series: 1773 if not opts['pop'] and not opts['reapply']:
1764 ui.status(_('%d of %d unapplied patches active\n') % 1774 unapplied = q.unapplied(repo)
1765 (len(q.unapplied(repo)), len(q.series))) 1775 guarded = [i for i in xrange(len(q.applied))
1776 if not q.pushable(i)[0]]
1777 if len(unapplied) != len(old_unapplied):
1778 ui.status(_('number of unguarded, unapplied patches has '
1779 'changed from %d to %d\n') %
1780 (len(old_unapplied), len(unapplied)))
1781 if len(guarded) != len(old_guarded):
1782 ui.status(_('number of guarded, applied patches has changed '
1783 'from %d to %d\n') %
1784 (len(old_guarded), len(guarded)))
1766 elif opts['series']: 1785 elif opts['series']:
1767 guards = {} 1786 guards = {}
1768 noguards = 0 1787 noguards = 0
1769 for gs in q.series_guards: 1788 for gs in q.series_guards:
1770 if not gs: 1789 if not gs:
1788 ui.note(_('active guards:\n')) 1807 ui.note(_('active guards:\n'))
1789 for g in guards: 1808 for g in guards:
1790 ui.write(g, '\n') 1809 ui.write(g, '\n')
1791 else: 1810 else:
1792 ui.write(_('no active guards\n')) 1811 ui.write(_('no active guards\n'))
1812 reapply = opts['reapply'] and q.applied and q.appliedname(-1)
1813 popped = False
1814 if opts['pop'] or opts['reapply']:
1815 for i in xrange(len(q.applied)):
1816 pushable, reason = q.pushable(i)
1817 if not pushable:
1818 ui.status(_('popping guarded patches\n'))
1819 popped = True
1820 if i == 0:
1821 q.pop(repo, all=True)
1822 else:
1823 q.pop(repo, i-1)
1824 break
1825 if popped:
1826 try:
1827 if reapply:
1828 ui.status(_('reapplying unguarded patches\n'))
1829 q.push(repo, reapply)
1830 finally:
1831 q.save_dirty()
1793 1832
1794 def reposetup(ui, repo): 1833 def reposetup(ui, repo):
1795 class mqrepo(repo.__class__): 1834 class mqrepo(repo.__class__):
1796 def tags(self): 1835 def tags(self):
1797 if self.tagscache: 1836 if self.tagscache:
1905 ('e', 'empty', None, 'clear queue status file'), 1944 ('e', 'empty', None, 'clear queue status file'),
1906 ('f', 'force', None, 'force copy')], 1945 ('f', 'force', None, 'force copy')],
1907 'hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]'), 1946 'hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]'),
1908 "qselect": (select, 1947 "qselect": (select,
1909 [('n', 'none', None, _('disable all guards')), 1948 [('n', 'none', None, _('disable all guards')),
1910 ('s', 'series', None, _('list all guards in series file'))], 1949 ('s', 'series', None, _('list all guards in series file')),
1911 'hg qselect [GUARDS]'), 1950 ('', 'pop', None,
1951 _('pop to before first guarded applied patch')),
1952 ('', 'reapply', None, _('pop, then reapply patches'))],
1953 'hg qselect [OPTION...] [GUARD...]'),
1912 "qseries": 1954 "qseries":
1913 (series, 1955 (series,
1914 [('m', 'missing', None, 'print patches not in series'), 1956 [('m', 'missing', None, 'print patches not in series'),
1915 ('s', 'summary', None, _('print first line of patch header'))], 1957 ('s', 'summary', None, _('print first line of patch header'))],
1916 'hg qseries [-m]'), 1958 'hg qseries [-m]'),