annotate hgext/mq.py @ 3612:d1b16a746db6

Add allowed bundle types as argument to hgweb unbundle capability. Arguments to capabilities were added before the 0.9.1 release, so there are no compatibility issues. Mercurial 0.9 didn't support http push. Using HG10GZ, HG10BZ and HG10UN has the advantage that new bundle types can be added later and the client doesn't have to try sending them first and reacting on errors sent by the server.
author Thomas Arendsen Hein <thomas@intevation.de>
date Thu, 02 Nov 2006 14:39:08 +0100
parents 437489d8dfbf
children 05d877dfd33d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1 # queue.py - patch queues for mercurial
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2 #
2858
345bac2bc4ec update copyrights.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2855
diff changeset
3 # Copyright 2005, 2006 Chris Mason <mason@suse.com>
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
4 #
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
5 # This software may be used and distributed according to the terms
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
6 # of the GNU General Public License, incorporated herein by reference.
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
7
2554
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
8 '''patch management and development
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
9
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
10 This extension lets you work with a stack of patches in a Mercurial
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
11 repository. It manages two stacks of patches - all known patches, and
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
12 applied patches (subset of known patches).
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
13
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
14 Known patches are represented as patch files in the .hg/patches
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
15 directory. Applied patches are both patch files and changesets.
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
16
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
17 Common tasks (use "hg help command" for more details):
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
18
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
19 prepare repository to work with patches qinit
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
20 create new patch qnew
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
21 import existing patch qimport
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
22
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
23 print patch series qseries
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
24 print applied patches qapplied
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
25 print name of top applied patch qtop
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
26
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
27 add known patch to applied stack qpush
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
28 remove patch from applied stack qpop
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
29 refresh contents of top applied patch qrefresh
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
30 '''
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
31
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
32 from mercurial.demandload import *
2866
b5f56d6c62c4 mq: demandload more
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2858
diff changeset
33 from mercurial.i18n import gettext as _
2967
a9d7a43fb3f0 mq: fix bad interaction between demandload and update of commands.norepo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2941
diff changeset
34 from mercurial import commands
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
35 demandload(globals(), "os sys re struct traceback errno bz2")
2967
a9d7a43fb3f0 mq: fix bad interaction between demandload and update of commands.norepo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2941
diff changeset
36 demandload(globals(), "mercurial:cmdutil,hg,patch,revlog,ui,util")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
37
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
38 commands.norepo += " qclone qversion"
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
39
2807
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2805
diff changeset
40 class statusentry:
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
41 def __init__(self, rev, name=None):
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
42 if not name:
3088
7fa3d38a99b6 mq: handle patch names containing ":"
Brendan Cully <brendan@kublai.com>
parents: 3085
diff changeset
43 fields = rev.split(':', 1)
2805
52516e48e3f3 Update qsave to use StatusEntry; don't throw exception on bad status lines.
Brendan Cully <brendan@kublai.com>
parents: 2804
diff changeset
44 if len(fields) == 2:
52516e48e3f3 Update qsave to use StatusEntry; don't throw exception on bad status lines.
Brendan Cully <brendan@kublai.com>
parents: 2804
diff changeset
45 self.rev, self.name = fields
52516e48e3f3 Update qsave to use StatusEntry; don't throw exception on bad status lines.
Brendan Cully <brendan@kublai.com>
parents: 2804
diff changeset
46 else:
52516e48e3f3 Update qsave to use StatusEntry; don't throw exception on bad status lines.
Brendan Cully <brendan@kublai.com>
parents: 2804
diff changeset
47 self.rev, self.name = None, None
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
48 else:
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
49 self.rev, self.name = rev, name
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
50
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
51 def __str__(self):
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
52 return self.rev + ':' + self.name
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
53
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
54 class queue:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
55 def __init__(self, ui, path, patchdir=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
56 self.basepath = path
2808
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
57 self.path = patchdir or os.path.join(path, "patches")
1852
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
58 self.opener = util.opener(self.path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
59 self.ui = ui
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
60 self.applied = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
61 self.full_series = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
62 self.applied_dirty = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
63 self.series_dirty = 0
1852
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
64 self.series_path = "series"
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
65 self.status_path = "status"
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
66 self.guards_path = "guards"
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
67 self.active_guards = None
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
68 self.guards_dirty = False
2873
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2872
diff changeset
69 self._diffopts = None
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
70
2808
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
71 if os.path.exists(self.join(self.series_path)):
1852
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
72 self.full_series = self.opener(self.series_path).read().splitlines()
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
73 self.parse_series()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
74
2808
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
75 if os.path.exists(self.join(self.status_path)):
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
76 lines = self.opener(self.status_path).read().splitlines()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
77 self.applied = [statusentry(l) for l in lines]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
78
2873
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2872
diff changeset
79 def diffopts(self):
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2872
diff changeset
80 if self._diffopts is None:
2908
3848488244fc Move ui.diffopts to patch.diffopts where it belongs
Matt Mackall <mpm@selenic.com>
parents: 2882
diff changeset
81 self._diffopts = patch.diffopts(self.ui)
2873
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2872
diff changeset
82 return self._diffopts
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2872
diff changeset
83
2808
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
84 def join(self, *p):
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
85 return os.path.join(self.path, *p)
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
86
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
87 def find_series(self, patch):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
88 pre = re.compile("(\s*)([^#]+)")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
89 index = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
90 for l in self.full_series:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
91 m = pre.match(l)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
92 if m:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
93 s = m.group(2)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
94 s = s.rstrip()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
95 if s == patch:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
96 return index
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
97 index += 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
98 return None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
99
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
100 guard_re = re.compile(r'\s?#([-+][^-+# \t\r\n\f][^# \t\r\n\f]*)')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
101
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
102 def parse_series(self):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
103 self.series = []
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
104 self.series_guards = []
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
105 for l in self.full_series:
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
106 h = l.find('#')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
107 if h == -1:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
108 patch = l
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
109 comment = ''
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
110 elif h == 0:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
111 continue
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
112 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
113 patch = l[:h]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
114 comment = l[h:]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
115 patch = patch.strip()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
116 if patch:
3177
87b7ae306d54 mq: bail out if a patch appears more than once in the series file.
Brendan Cully <brendan@kublai.com>
parents: 3176
diff changeset
117 if patch in self.series:
87b7ae306d54 mq: bail out if a patch appears more than once in the series file.
Brendan Cully <brendan@kublai.com>
parents: 3176
diff changeset
118 raise util.Abort(_('%s appears more than once in %s') %
87b7ae306d54 mq: bail out if a patch appears more than once in the series file.
Brendan Cully <brendan@kublai.com>
parents: 3176
diff changeset
119 (patch, self.join(self.series_path)))
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
120 self.series.append(patch)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
121 self.series_guards.append(self.guard_re.findall(comment))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
122
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
123 def check_guard(self, guard):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
124 bad_chars = '# \t\r\n\f'
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
125 first = guard[0]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
126 for c in '-+':
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
127 if first == c:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
128 return (_('guard %r starts with invalid character: %r') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
129 (guard, c))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
130 for c in bad_chars:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
131 if c in guard:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
132 return _('invalid character in guard %r: %r') % (guard, c)
3215
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3179
diff changeset
133
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
134 def set_active(self, guards):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
135 for guard in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
136 bad = self.check_guard(guard)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
137 if bad:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
138 raise util.Abort(bad)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
139 guards = dict.fromkeys(guards).keys()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
140 guards.sort()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
141 self.ui.debug('active guards: %s\n' % ' '.join(guards))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
142 self.active_guards = guards
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
143 self.guards_dirty = True
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
144
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
145 def active(self):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
146 if self.active_guards is None:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
147 self.active_guards = []
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
148 try:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
149 guards = self.opener(self.guards_path).read().split()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
150 except IOError, err:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
151 if err.errno != errno.ENOENT: raise
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
152 guards = []
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
153 for i, guard in enumerate(guards):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
154 bad = self.check_guard(guard)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
155 if bad:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
156 self.ui.warn('%s:%d: %s\n' %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
157 (self.join(self.guards_path), i + 1, bad))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
158 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
159 self.active_guards.append(guard)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
160 return self.active_guards
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
161
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
162 def set_guards(self, idx, guards):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
163 for g in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
164 if len(g) < 2:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
165 raise util.Abort(_('guard %r too short') % g)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
166 if g[0] not in '-+':
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
167 raise util.Abort(_('guard %r starts with invalid char') % g)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
168 bad = self.check_guard(g[1:])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
169 if bad:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
170 raise util.Abort(bad)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
171 drop = self.guard_re.sub('', self.full_series[idx])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
172 self.full_series[idx] = drop + ''.join([' #' + g for g in guards])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
173 self.parse_series()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
174 self.series_dirty = True
3215
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3179
diff changeset
175
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
176 def pushable(self, idx):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
177 if isinstance(idx, str):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
178 idx = self.series.index(idx)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
179 patchguards = self.series_guards[idx]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
180 if not patchguards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
181 return True, None
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
182 default = False
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
183 guards = self.active()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
184 exactneg = [g for g in patchguards if g[0] == '-' and g[1:] in guards]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
185 if exactneg:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
186 return False, exactneg[0]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
187 pos = [g for g in patchguards if g[0] == '+']
2838
851b07ec450c mq: apply patch is any posative guard matches
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2836
diff changeset
188 exactpos = [g for g in pos if g[1:] in guards]
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
189 if pos:
2838
851b07ec450c mq: apply patch is any posative guard matches
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2836
diff changeset
190 if exactpos:
851b07ec450c mq: apply patch is any posative guard matches
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2836
diff changeset
191 return True, exactpos[0]
851b07ec450c mq: apply patch is any posative guard matches
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2836
diff changeset
192 return False, pos
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
193 return True, ''
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
194
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
195 def explain_pushable(self, idx, all_patches=False):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
196 write = all_patches and self.ui.write or self.ui.warn
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
197 if all_patches or self.ui.verbose:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
198 if isinstance(idx, str):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
199 idx = self.series.index(idx)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
200 pushable, why = self.pushable(idx)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
201 if all_patches and pushable:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
202 if why is None:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
203 write(_('allowing %s - no guards in effect\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
204 self.series[idx])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
205 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
206 if not why:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
207 write(_('allowing %s - no matching negative guards\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
208 self.series[idx])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
209 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
210 write(_('allowing %s - guarded by %r\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
211 (self.series[idx], why))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
212 if not pushable:
2818
05316bb57d01 mq: make guards more strict, add tests
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2817
diff changeset
213 if why:
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
214 write(_('skipping %s - guarded by %r\n') %
2818
05316bb57d01 mq: make guards more strict, add tests
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2817
diff changeset
215 (self.series[idx], ' '.join(why)))
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
216 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
217 write(_('skipping %s - no matching guards\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
218 self.series[idx])
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
219
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
220 def save_dirty(self):
2772
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
221 def write_list(items, path):
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
222 fp = self.opener(path, 'w')
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
223 for i in items:
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
224 print >> fp, i
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
225 fp.close()
2776
ae726521717c merge with brendan.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2775 2774
diff changeset
226 if self.applied_dirty: write_list(map(str, self.applied), self.status_path)
2772
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
227 if self.series_dirty: write_list(self.full_series, self.series_path)
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
228 if self.guards_dirty: write_list(self.active_guards, self.guards_path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
229
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
230 def readheaders(self, patch):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
231 def eatdiff(lines):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
232 while lines:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
233 l = lines[-1]
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
234 if (l.startswith("diff -") or
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
235 l.startswith("Index:") or
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
236 l.startswith("===========")):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
237 del lines[-1]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
238 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
239 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
240 def eatempty(lines):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
241 while lines:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
242 l = lines[-1]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
243 if re.match('\s*$', l):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
244 del lines[-1]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
245 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
246 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
247
2808
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
248 pf = self.join(patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
249 message = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
250 comments = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
251 user = None
2299
dacf718e1d48 Add timestamp field to export format. Make import and mq use it.
Danek Duvall <danek.duvall@sun.com>
parents: 2270
diff changeset
252 date = None
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
253 format = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
254 subject = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
255 diffstart = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
256
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
257 for line in file(pf):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
258 line = line.rstrip()
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
259 if line.startswith('diff --git'):
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
260 diffstart = 2
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
261 break
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
262 if diffstart:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
263 if line.startswith('+++ '):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
264 diffstart = 2
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
265 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
266 if line.startswith("--- "):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
267 diffstart = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
268 continue
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
269 elif format == "hgpatch":
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
270 # parse values when importing the result of an hg export
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
271 if line.startswith("# User "):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
272 user = line[7:]
2300
52b9b6751b2c Use "# Date" instead of "# Timestamp" for dated export/import of patches.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2299
diff changeset
273 elif line.startswith("# Date "):
52b9b6751b2c Use "# Date" instead of "# Timestamp" for dated export/import of patches.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2299
diff changeset
274 date = line[7:]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
275 elif not line.startswith("# ") and line:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
276 message.append(line)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
277 format = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
278 elif line == '# HG changeset patch':
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
279 format = "hgpatch"
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
280 elif (format != "tagdone" and (line.startswith("Subject: ") or
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
281 line.startswith("subject: "))):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
282 subject = line[9:]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
283 format = "tag"
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
284 elif (format != "tagdone" and (line.startswith("From: ") or
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
285 line.startswith("from: "))):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
286 user = line[6:]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
287 format = "tag"
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
288 elif format == "tag" and line == "":
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
289 # when looking for tags (subject: from: etc) they
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
290 # end once you find a blank line in the source
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
291 format = "tagdone"
2301
7c2623aedeb4 Strip empty lines and trailing spaces around commit messages.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2300
diff changeset
292 elif message or line:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
293 message.append(line)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
294 comments.append(line)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
295
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
296 eatdiff(message)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
297 eatdiff(comments)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
298 eatempty(message)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
299 eatempty(comments)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
300
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
301 # make sure message isn't empty
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
302 if format and format.startswith("tag") and subject:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
303 message.insert(0, "")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
304 message.insert(0, subject)
2299
dacf718e1d48 Add timestamp field to export format. Make import and mq use it.
Danek Duvall <danek.duvall@sun.com>
parents: 2270
diff changeset
305 return (message, comments, user, date, diffstart > 1)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
306
2873
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2872
diff changeset
307 def printdiff(self, repo, node1, node2=None, files=None,
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
308 fp=None, changes=None, opts={}):
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
309 fns, matchfn, anypats = cmdutil.matchpats(repo, files, opts)
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
310
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
311 patch.diff(repo, node1, node2, fns, match=matchfn,
2873
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2872
diff changeset
312 fp=fp, changes=changes, opts=self.diffopts())
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2872
diff changeset
313
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
314 def mergeone(self, repo, mergeq, head, patch, rev, wlock):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
315 # first try just applying the patch
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
316 (err, n) = self.apply(repo, [ patch ], update_status=False,
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
317 strict=True, merge=rev, wlock=wlock)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
318
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
319 if err == 0:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
320 return (err, n)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
321
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
322 if n is None:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
323 raise util.Abort(_("apply failed for patch %s") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
324
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
325 self.ui.warn("patch didn't work out, merging %s\n" % patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
326
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
327 # apply failed, strip away that rev and merge.
2822
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2804
diff changeset
328 hg.clean(repo, head, wlock=wlock)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
329 self.strip(repo, n, update=False, backup='strip', wlock=wlock)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
330
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
331 c = repo.changelog.read(rev)
2822
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2804
diff changeset
332 ret = hg.merge(repo, rev, wlock=wlock)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
333 if ret:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
334 raise util.Abort(_("update returned %d") % ret)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
335 n = repo.commit(None, c[4], c[1], force=1, wlock=wlock)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
336 if n == None:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
337 raise util.Abort(_("repo commit failed"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
338 try:
2299
dacf718e1d48 Add timestamp field to export format. Make import and mq use it.
Danek Duvall <danek.duvall@sun.com>
parents: 2270
diff changeset
339 message, comments, user, date, patchfound = mergeq.readheaders(patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
340 except:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
341 raise util.Abort(_("unable to read %s") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
342
1852
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
343 patchf = self.opener(patch, "w")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
344 if comments:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
345 comments = "\n".join(comments) + '\n\n'
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
346 patchf.write(comments)
2873
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2872
diff changeset
347 self.printdiff(repo, head, n, fp=patchf)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
348 patchf.close()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
349 return (0, n)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
350
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
351 def qparents(self, repo, rev=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
352 if rev is None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
353 (p1, p2) = repo.dirstate.parents()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
354 if p2 == revlog.nullid:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
355 return p1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
356 if len(self.applied) == 0:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
357 return None
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
358 return revlog.bin(self.applied[-1].rev)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
359 pp = repo.changelog.parents(rev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
360 if pp[1] != revlog.nullid:
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
361 arevs = [ x.rev for x in self.applied ]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
362 p0 = revlog.hex(pp[0])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
363 p1 = revlog.hex(pp[1])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
364 if p0 in arevs:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
365 return pp[0]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
366 if p1 in arevs:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
367 return pp[1]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
368 return pp[0]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
369
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
370 def mergepatch(self, repo, mergeq, series, wlock):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
371 if len(self.applied) == 0:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
372 # each of the patches merged in will have two parents. This
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
373 # can confuse the qrefresh, qdiff, and strip code because it
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
374 # needs to know which parent is actually in the patch queue.
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
375 # so, we insert a merge marker with only one parent. This way
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
376 # the first patch in the queue is never a merge patch
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
377 #
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
378 pname = ".hg.patches.merge.marker"
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
379 n = repo.commit(None, '[mq]: merge marker', user=None, force=1,
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
380 wlock=wlock)
2807
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2805
diff changeset
381 self.applied.append(statusentry(revlog.hex(n), pname))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
382 self.applied_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
383
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
384 head = self.qparents(repo)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
385
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
386 for patch in series:
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
387 patch = mergeq.lookup(patch, strict=True)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
388 if not patch:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
389 self.ui.warn("patch %s does not exist\n" % patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
390 return (1, None)
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
391 pushable, reason = self.pushable(patch)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
392 if not pushable:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
393 self.explain_pushable(patch, all_patches=True)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
394 continue
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
395 info = mergeq.isapplied(patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
396 if not info:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
397 self.ui.warn("patch %s is not applied\n" % patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
398 return (1, None)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
399 rev = revlog.bin(info[1])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
400 (err, head) = self.mergeone(repo, mergeq, head, patch, rev, wlock)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
401 if head:
2807
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2805
diff changeset
402 self.applied.append(statusentry(revlog.hex(head), patch))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
403 self.applied_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
404 if err:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
405 return (err, head)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
406 return (0, head)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
407
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
408 def patch(self, repo, patchfile):
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
409 '''Apply patchfile to the working directory.
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
410 patchfile: file name of patch'''
3460
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3373
diff changeset
411 files = {}
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
412 try:
3460
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3373
diff changeset
413 fuzz = patch.patch(patchfile, self.ui, strip=1, cwd=repo.root,
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3373
diff changeset
414 files=files)
2907
b70740aefa4d Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents: 2890
diff changeset
415 except Exception, inst:
b70740aefa4d Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents: 2890
diff changeset
416 self.ui.note(str(inst) + '\n')
b70740aefa4d Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents: 2890
diff changeset
417 if not self.ui.verbose:
b70740aefa4d Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents: 2890
diff changeset
418 self.ui.warn("patch failed, unable to continue (try -v)\n")
3460
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3373
diff changeset
419 return (False, files, False)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
420
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
421 return (True, files, fuzz)
2791
4c39568007f9 mq: codingstyle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2790
diff changeset
422
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
423 def apply(self, repo, series, list=False, update_status=True,
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
424 strict=False, patchdir=None, merge=None, wlock=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
425 # TODO unify with commands.py
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
426 if not patchdir:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
427 patchdir = self.path
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
428 err = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
429 if not wlock:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
430 wlock = repo.wlock()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
431 lock = repo.lock()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
432 tr = repo.transaction()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
433 n = None
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
434 for patchname in series:
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
435 pushable, reason = self.pushable(patchname)
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
436 if not pushable:
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
437 self.explain_pushable(patchname, all_patches=True)
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
438 continue
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
439 self.ui.warn("applying %s\n" % patchname)
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
440 pf = os.path.join(patchdir, patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
441
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
442 try:
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
443 message, comments, user, date, patchfound = self.readheaders(patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
444 except:
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
445 self.ui.warn("Unable to read %s\n" % patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
446 err = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
447 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
448
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
449 if not message:
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
450 message = "imported patch %s\n" % patchname
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
451 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
452 if list:
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
453 message.append("\nimported patch %s" % patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
454 message = '\n'.join(message)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
455
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
456 (patcherr, files, fuzz) = self.patch(repo, pf)
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
457 patcherr = not patcherr
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
458
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
459 if merge and files:
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
460 # Mark as merged and update dirstate parent info
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
461 repo.dirstate.update(repo.dirstate.filterfiles(files.keys()), 'm')
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
462 p1, p2 = repo.dirstate.parents()
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
463 repo.dirstate.setparents(p1, merge)
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
464 files = patch.updatedir(self.ui, repo, files, wlock=wlock)
2299
dacf718e1d48 Add timestamp field to export format. Make import and mq use it.
Danek Duvall <danek.duvall@sun.com>
parents: 2270
diff changeset
465 n = repo.commit(files, message, user, date, force=1, lock=lock,
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
466 wlock=wlock)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
467
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
468 if n == None:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
469 raise util.Abort(_("repo commit failed"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
470
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
471 if update_status:
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
472 self.applied.append(statusentry(revlog.hex(n), patchname))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
473
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
474 if patcherr:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
475 if not patchfound:
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
476 self.ui.warn("patch %s is empty\n" % patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
477 err = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
478 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
479 self.ui.warn("patch failed, rejects left in working dir\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
480 err = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
481 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
482
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
483 if fuzz and strict:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
484 self.ui.warn("fuzz found when applying patch, stopping\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
485 err = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
486 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
487 tr.close()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
488 return (err, n)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
489
3085
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
490 def delete(self, repo, patches, opts):
2890
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
491 realpatches = []
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
492 for patch in patches:
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
493 patch = self.lookup(patch, strict=True)
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
494 info = self.isapplied(patch)
3371
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
495 if info:
2890
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
496 raise util.Abort(_("cannot delete applied patch %s") % patch)
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
497 if patch not in self.series:
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
498 raise util.Abort(_("patch %s not in series file") % patch)
3371
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
499 realpatches.append(patch)
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
500
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
501 appliedbase = 0
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
502 if opts.get('rev'):
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
503 if not self.applied:
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
504 raise util.Abort(_('no patches applied'))
3557
68341c06bc61 Make revrange return a list of ints so that callers don't have to convert
Matt Mackall <mpm@selenic.com>
parents: 3486
diff changeset
505 revs = cmdutil.revrange(ui, repo, opts['rev'])
3371
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
506 if len(revs) > 1 and revs[0] > revs[1]:
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
507 revs.reverse()
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
508 for rev in revs:
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
509 if appliedbase >= len(self.applied):
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
510 raise util.Abort(_("revision %d is not managed") % rev)
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
511
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
512 base = revlog.bin(self.applied[appliedbase].rev)
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
513 node = repo.changelog.node(rev)
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
514 if node != base:
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
515 raise util.Abort(_("cannot delete revision %d above "
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
516 "applied patches") % rev)
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
517 realpatches.append(self.applied[appliedbase].name)
3085
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
518 appliedbase += 1
2890
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
519
3085
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
520 if not opts.get('keep'):
2752
5dfeda163bb7 Add -f option to qdelete, to remove patch file.
Brendan Cully <brendan@kublai.com>
parents: 2751
diff changeset
521 r = self.qrepo()
5dfeda163bb7 Add -f option to qdelete, to remove patch file.
Brendan Cully <brendan@kublai.com>
parents: 2751
diff changeset
522 if r:
2890
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
523 r.remove(realpatches, True)
2752
5dfeda163bb7 Add -f option to qdelete, to remove patch file.
Brendan Cully <brendan@kublai.com>
parents: 2751
diff changeset
524 else:
3373
58202386deb7 mq: make qdelete without -k or a subrepository delete all patches
Brendan Cully <brendan@kublai.com>
parents: 3371
diff changeset
525 for p in realpatches:
58202386deb7 mq: make qdelete without -k or a subrepository delete all patches
Brendan Cully <brendan@kublai.com>
parents: 3371
diff changeset
526 os.unlink(self.join(p))
2890
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
527
3371
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
528 if appliedbase:
3085
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
529 del self.applied[:appliedbase]
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
530 self.applied_dirty = 1
2890
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
531 indices = [self.find_series(p) for p in realpatches]
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
532 indices.sort()
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
533 for i in indices[-1::-1]:
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
534 del self.full_series[i]
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
535 self.parse_series()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
536 self.series_dirty = 1
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
537
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
538 def check_toppatch(self, repo):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
539 if len(self.applied) > 0:
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
540 top = revlog.bin(self.applied[-1].rev)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
541 pp = repo.dirstate.parents()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
542 if top not in pp:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
543 raise util.Abort(_("queue top not at same revision as working directory"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
544 return top
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
545 return None
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
546 def check_localchanges(self, repo, force=False, refresh=True):
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
547 m, a, r, d = repo.status()[:4]
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
548 if m or a or r or d:
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
549 if not force:
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
550 if refresh:
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
551 raise util.Abort(_("local changes found, refresh first"))
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
552 else:
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
553 raise util.Abort(_("local changes found"))
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
554 return m, a, r, d
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
555 def new(self, repo, patch, msg=None, force=None):
2808
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
556 if os.path.exists(self.join(patch)):
2710
ca97be5babf8 mq: do not allow to qnew a patch twice
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2699
diff changeset
557 raise util.Abort(_('patch "%s" already exists') % patch)
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
558 m, a, r, d = self.check_localchanges(repo, force)
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
559 commitfiles = m + a + r
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
560 self.check_toppatch(repo)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
561 wlock = repo.wlock()
2698
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
562 insert = self.full_series_end()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
563 if msg:
2511
041d8f0a8437 mq: hg qnew -f should refresh the new patch
Chris Mason <mason@suse.com>
parents: 2488
diff changeset
564 n = repo.commit(commitfiles, "[mq]: %s" % msg, force=True,
041d8f0a8437 mq: hg qnew -f should refresh the new patch
Chris Mason <mason@suse.com>
parents: 2488
diff changeset
565 wlock=wlock)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
566 else:
2511
041d8f0a8437 mq: hg qnew -f should refresh the new patch
Chris Mason <mason@suse.com>
parents: 2488
diff changeset
567 n = repo.commit(commitfiles,
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
568 "New patch: %s" % patch, force=True, wlock=wlock)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
569 if n == None:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
570 raise util.Abort(_("repo commit failed"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
571 self.full_series[insert:insert] = [patch]
2807
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2805
diff changeset
572 self.applied.append(statusentry(revlog.hex(n), patch))
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
573 self.parse_series()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
574 self.series_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
575 self.applied_dirty = 1
1852
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
576 p = self.opener(patch, "w")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
577 if msg:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
578 msg = msg + "\n"
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
579 p.write(msg)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
580 p.close()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
581 wlock = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
582 r = self.qrepo()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
583 if r: r.add([patch])
2511
041d8f0a8437 mq: hg qnew -f should refresh the new patch
Chris Mason <mason@suse.com>
parents: 2488
diff changeset
584 if commitfiles:
2855
a3c73c9679d2 Fix "hg qnew -f foo" without -m
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2854
diff changeset
585 self.refresh(repo, short=True)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
586
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
587 def strip(self, repo, rev, update=True, backup="all", wlock=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
588 def limitheads(chlog, stop):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
589 """return the list of all nodes that have no children"""
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
590 p = {}
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
591 h = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
592 stoprev = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
593 if stop in chlog.nodemap:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
594 stoprev = chlog.rev(stop)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
595
3468
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3460
diff changeset
596 for r in xrange(chlog.count() - 1, -1, -1):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
597 n = chlog.node(r)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
598 if n not in p:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
599 h.append(n)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
600 if n == stop:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
601 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
602 if r < stoprev:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
603 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
604 for pn in chlog.parents(n):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
605 p[pn] = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
606 return h
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
607
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
608 def bundle(cg):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
609 backupdir = repo.join("strip-backup")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
610 if not os.path.isdir(backupdir):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
611 os.mkdir(backupdir)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
612 name = os.path.join(backupdir, "%s" % revlog.short(rev))
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
613 name = savename(name)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
614 self.ui.warn("saving bundle to %s\n" % name)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
615 # TODO, exclusive open
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
616 f = open(name, "wb")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
617 try:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
618 f.write("HG10")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
619 z = bz2.BZ2Compressor(9)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
620 while 1:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
621 chunk = cg.read(4096)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
622 if not chunk:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
623 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
624 f.write(z.compress(chunk))
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
625 f.write(z.flush())
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
626 except:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
627 os.unlink(name)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
628 raise
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
629 f.close()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
630 return name
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
631
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
632 def stripall(rev, revnum):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
633 cl = repo.changelog
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
634 c = cl.read(rev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
635 mm = repo.manifest.read(c[0])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
636 seen = {}
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
637
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
638 for x in xrange(revnum, cl.count()):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
639 c = cl.read(cl.node(x))
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
640 for f in c[3]:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
641 if f in seen:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
642 continue
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
643 seen[f] = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
644 if f in mm:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
645 filerev = mm[f]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
646 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
647 filerev = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
648 seen[f] = filerev
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
649 # we go in two steps here so the strip loop happens in a
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
650 # sensible order. When stripping many files, this helps keep
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
651 # our disk access patterns under control.
2789
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
652 seen_list = seen.keys()
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
653 seen_list.sort()
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
654 for f in seen_list:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
655 ff = repo.file(f)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
656 filerev = seen[f]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
657 if filerev != 0:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
658 if filerev in ff.nodemap:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
659 filerev = ff.rev(filerev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
660 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
661 filerev = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
662 ff.strip(filerev, revnum)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
663
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
664 if not wlock:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
665 wlock = repo.wlock()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
666 lock = repo.lock()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
667 chlog = repo.changelog
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
668 # TODO delete the undo files, and handle undo of merge sets
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
669 pp = chlog.parents(rev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
670 revnum = chlog.rev(rev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
671
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
672 if update:
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
673 self.check_localchanges(repo, refresh=False)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
674 urev = self.qparents(repo, rev)
2822
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2804
diff changeset
675 hg.clean(repo, urev, wlock=wlock)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
676 repo.dirstate.write()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
677
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
678 # save is a list of all the branches we are truncating away
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
679 # that we actually want to keep. changegroup will be used
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
680 # to preserve them and add them back after the truncate
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
681 saveheads = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
682 savebases = {}
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
683
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
684 heads = limitheads(chlog, rev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
685 seen = {}
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
686
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
687 # search through all the heads, finding those where the revision
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
688 # we want to strip away is an ancestor. Also look for merges
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
689 # that might be turned into new heads by the strip.
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
690 while heads:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
691 h = heads.pop()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
692 n = h
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
693 while True:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
694 seen[n] = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
695 pp = chlog.parents(n)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
696 if pp[1] != revlog.nullid and chlog.rev(pp[1]) > revnum:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
697 if pp[1] not in seen:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
698 heads.append(pp[1])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
699 if pp[0] == revlog.nullid:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
700 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
701 if chlog.rev(pp[0]) < revnum:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
702 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
703 n = pp[0]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
704 if n == rev:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
705 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
706 r = chlog.reachable(h, rev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
707 if rev not in r:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
708 saveheads.append(h)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
709 for x in r:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
710 if chlog.rev(x) > revnum:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
711 savebases[x] = 1
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
712
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
713 # create a changegroup for all the branches we need to keep
2792
a3c6e7888abf mq: unused variables, improper usage of 'is [not]', undefined variable
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2791
diff changeset
714 if backup == "all":
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
715 backupch = repo.changegroupsubset([rev], chlog.heads(), 'strip')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
716 bundle(backupch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
717 if saveheads:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
718 backupch = repo.changegroupsubset(savebases.keys(), saveheads, 'strip')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
719 chgrpfile = bundle(backupch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
720
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
721 stripall(rev, revnum)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
722
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
723 change = chlog.read(rev)
3072
e20e7e2623b0 strip: strip changelog before manifest
Brendan Cully <brendan@kublai.com>
parents: 3024
diff changeset
724 chlog.strip(revnum, revnum)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
725 repo.manifest.strip(repo.manifest.rev(change[0]), revnum)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
726 if saveheads:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
727 self.ui.status("adding branch\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
728 commands.unbundle(self.ui, repo, chgrpfile, update=False)
2792
a3c6e7888abf mq: unused variables, improper usage of 'is [not]', undefined variable
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2791
diff changeset
729 if backup != "strip":
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
730 os.unlink(chgrpfile)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
731
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
732 def isapplied(self, patch):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
733 """returns (index, rev, patch)"""
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
734 for i in xrange(len(self.applied)):
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
735 a = self.applied[i]
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
736 if a.name == patch:
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
737 return (i, a.rev, a.name)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
738 return None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
739
3215
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3179
diff changeset
740 # if the exact patch name does not exist, we try a few
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
741 # variations. If strict is passed, we try only #1
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
742 #
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
743 # 1) a number to indicate an offset in the series file
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
744 # 2) a unique substring of the patch name was given
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
745 # 3) patchname[-+]num to indicate an offset in the series file
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
746 def lookup(self, patch, strict=False):
2832
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
747 patch = patch and str(patch)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
748
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
749 def partial_name(s):
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
750 if s in self.series:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
751 return s
2765
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
752 matches = [x for x in self.series if s in x]
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
753 if len(matches) > 1:
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
754 self.ui.warn(_('patch name "%s" is ambiguous:\n') % s)
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
755 for m in matches:
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
756 self.ui.warn(' %s\n' % m)
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
757 return None
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
758 if matches:
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
759 return matches[0]
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
760 if len(self.series) > 0 and len(self.applied) > 0:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
761 if s == 'qtip':
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
762 return self.series[self.series_end()-1]
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
763 if s == 'qbase':
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
764 return self.series[0]
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
765 return None
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
766 if patch == None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
767 return None
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
768
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
769 # we don't want to return a partial match until we make
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
770 # sure the file name passed in does not exist (checked below)
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
771 res = partial_name(patch)
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
772 if res and res == patch:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
773 return res
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
774
2808
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
775 if not os.path.isfile(self.join(patch)):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
776 try:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
777 sno = int(patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
778 except(ValueError, OverflowError):
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
779 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
780 else:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
781 if sno < len(self.series):
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
782 return self.series[sno]
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
783 if not strict:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
784 # return any partial match made above
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
785 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
786 return res
3079
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3073
diff changeset
787 minus = patch.rfind('-')
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3073
diff changeset
788 if minus >= 0:
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3073
diff changeset
789 res = partial_name(patch[:minus])
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
790 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
791 i = self.series.index(res)
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
792 try:
3079
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3073
diff changeset
793 off = int(patch[minus+1:] or 1)
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
794 except(ValueError, OverflowError):
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
795 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
796 else:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
797 if i - off >= 0:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
798 return self.series[i - off]
3079
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3073
diff changeset
799 plus = patch.rfind('+')
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3073
diff changeset
800 if plus >= 0:
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3073
diff changeset
801 res = partial_name(patch[:plus])
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
802 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
803 i = self.series.index(res)
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
804 try:
3079
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3073
diff changeset
805 off = int(patch[plus+1:] or 1)
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
806 except(ValueError, OverflowError):
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
807 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
808 else:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
809 if i + off < len(self.series):
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
810 return self.series[i + off]
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
811 raise util.Abort(_("patch %s not in series") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
812
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
813 def push(self, repo, patch=None, force=False, list=False,
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
814 mergeq=None, wlock=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
815 if not wlock:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
816 wlock = repo.wlock()
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
817 patch = self.lookup(patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
818 if patch and self.isapplied(patch):
3179
245bb70d7dfb mq: raise util.Abort instead of using sys.exit(1)
Brendan Cully <brendan@kublai.com>
parents: 3178
diff changeset
819 raise util.Abort(_("patch %s is already applied") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
820 if self.series_end() == len(self.series):
3179
245bb70d7dfb mq: raise util.Abort instead of using sys.exit(1)
Brendan Cully <brendan@kublai.com>
parents: 3178
diff changeset
821 raise util.Abort(_("patch series fully applied"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
822 if not force:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
823 self.check_localchanges(repo)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
824
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
825 self.applied_dirty = 1;
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
826 start = self.series_end()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
827 if start > 0:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
828 self.check_toppatch(repo)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
829 if not patch:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
830 patch = self.series[start]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
831 end = start + 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
832 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
833 end = self.series.index(patch, start) + 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
834 s = self.series[start:end]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
835 if mergeq:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
836 ret = self.mergepatch(repo, mergeq, s, wlock)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
837 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
838 ret = self.apply(repo, s, list, wlock=wlock)
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
839 top = self.applied[-1].name
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
840 if ret[0]:
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
841 self.ui.write("Errors during apply, please fix and refresh %s\n" %
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
842 top)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
843 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
844 self.ui.write("Now at: %s\n" % top)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
845 return ret[0]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
846
2697
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
847 def pop(self, repo, patch=None, force=False, update=True, all=False,
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
848 wlock=None):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
849 def getfile(f, rev):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
850 t = repo.file(f).read(rev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
851 try:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
852 repo.wfile(f, "w").write(t)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
853 except IOError:
2086
8742352db413 mq: do not fail if directory to create exists
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2047
diff changeset
854 try:
8742352db413 mq: do not fail if directory to create exists
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2047
diff changeset
855 os.makedirs(os.path.dirname(repo.wjoin(f)))
8742352db413 mq: do not fail if directory to create exists
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2047
diff changeset
856 except OSError, err:
8742352db413 mq: do not fail if directory to create exists
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2047
diff changeset
857 if err.errno != errno.EEXIST: raise
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
858 repo.wfile(f, "w").write(t)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
859
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
860 if not wlock:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
861 wlock = repo.wlock()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
862 if patch:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
863 # index, rev, patch
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
864 info = self.isapplied(patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
865 if not info:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
866 patch = self.lookup(patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
867 info = self.isapplied(patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
868 if not info:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
869 raise util.Abort(_("patch %s is not applied") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
870 if len(self.applied) == 0:
3179
245bb70d7dfb mq: raise util.Abort instead of using sys.exit(1)
Brendan Cully <brendan@kublai.com>
parents: 3178
diff changeset
871 raise util.Abort(_("no patches applied"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
872
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
873 if not update:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
874 parents = repo.dirstate.parents()
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
875 rr = [ revlog.bin(x.rev) for x in self.applied ]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
876 for p in parents:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
877 if p in rr:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
878 self.ui.warn("qpop: forcing dirstate update\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
879 update = True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
880
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
881 if not force and update:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
882 self.check_localchanges(repo)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
883
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
884 self.applied_dirty = 1;
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
885 end = len(self.applied)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
886 if not patch:
2697
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
887 if all:
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
888 popi = 0
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
889 else:
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
890 popi = len(self.applied) - 1
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
891 else:
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
892 popi = info[0] + 1
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
893 if popi >= end:
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
894 self.ui.warn("qpop: %s is already at the top\n" % patch)
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
895 return
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
896 info = [ popi ] + [self.applied[popi].rev, self.applied[popi].name]
2697
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
897
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
898 start = info[0]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
899 rev = revlog.bin(info[1])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
900
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
901 # we know there are no local changes, so we can make a simplified
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
902 # form of hg.update.
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
903 if update:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
904 top = self.check_toppatch(repo)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
905 qp = self.qparents(repo, rev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
906 changes = repo.changelog.read(qp)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
907 mmap = repo.manifest.read(changes[0])
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
908 m, a, r, d, u = repo.status(qp, top)[:5]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
909 if d:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
910 raise util.Abort("deletions found between repo revs")
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
911 for f in m:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
912 getfile(f, mmap[f])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
913 for f in r:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
914 getfile(f, mmap[f])
2871
d36af1f10fdf manifest.execf is now a function.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2852
diff changeset
915 util.set_exec(repo.wjoin(f), mmap.execf(f))
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
916 repo.dirstate.update(m + r, 'n')
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
917 for f in a:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
918 try: os.unlink(repo.wjoin(f))
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
919 except: raise
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
920 try: os.removedirs(os.path.dirname(repo.wjoin(f)))
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
921 except: pass
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
922 if a:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
923 repo.dirstate.forget(a)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
924 repo.dirstate.setparents(qp, revlog.nullid)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
925 self.strip(repo, rev, update=False, backup='strip', wlock=wlock)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
926 del self.applied[start:end]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
927 if len(self.applied):
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
928 self.ui.write("Now at: %s\n" % self.applied[-1].name)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
929 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
930 self.ui.write("Patch queue now empty\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
931
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
932 def diff(self, repo, pats, opts):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
933 top = self.check_toppatch(repo)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
934 if not top:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
935 self.ui.write("No patches applied\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
936 return
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
937 qp = self.qparents(repo, top)
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
938 self.printdiff(repo, qp, files=pats, opts=opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
939
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
940 def refresh(self, repo, pats=None, **opts):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
941 if len(self.applied) == 0:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
942 self.ui.write("No patches applied\n")
2990
ac74046f8f58 qrefresh: exit with status 1 if no patches applied.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2967
diff changeset
943 return 1
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
944 wlock = repo.wlock()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
945 self.check_toppatch(repo)
3024
a4374f7331e4 Call patch.diff directly instead of printdiff - this also saves an
Brendan Cully <brendan@kublai.com>
parents: 2994
diff changeset
946 (top, patchfn) = (self.applied[-1].rev, self.applied[-1].name)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
947 top = revlog.bin(top)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
948 cparents = repo.changelog.parents(top)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
949 patchparent = self.qparents(repo, top)
3024
a4374f7331e4 Call patch.diff directly instead of printdiff - this also saves an
Brendan Cully <brendan@kublai.com>
parents: 2994
diff changeset
950 message, comments, user, date, patchfound = self.readheaders(patchfn)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
951
3024
a4374f7331e4 Call patch.diff directly instead of printdiff - this also saves an
Brendan Cully <brendan@kublai.com>
parents: 2994
diff changeset
952 patchf = self.opener(patchfn, "w")
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
953 msg = opts.get('msg', '').rstrip()
2745
1bac2bfe081a Change patch header as well as commit message with qrefresh -m or -l.
Brendan Cully <brendan@kublai.com>
parents: 2742
diff changeset
954 if msg:
1bac2bfe081a Change patch header as well as commit message with qrefresh -m or -l.
Brendan Cully <brendan@kublai.com>
parents: 2742
diff changeset
955 if comments:
1bac2bfe081a Change patch header as well as commit message with qrefresh -m or -l.
Brendan Cully <brendan@kublai.com>
parents: 2742
diff changeset
956 # Remove existing message.
1bac2bfe081a Change patch header as well as commit message with qrefresh -m or -l.
Brendan Cully <brendan@kublai.com>
parents: 2742
diff changeset
957 ci = 0
3468
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3460
diff changeset
958 for mi in xrange(len(message)):
2745
1bac2bfe081a Change patch header as well as commit message with qrefresh -m or -l.
Brendan Cully <brendan@kublai.com>
parents: 2742
diff changeset
959 while message[mi] != comments[ci]:
1bac2bfe081a Change patch header as well as commit message with qrefresh -m or -l.
Brendan Cully <brendan@kublai.com>
parents: 2742
diff changeset
960 ci += 1
1bac2bfe081a Change patch header as well as commit message with qrefresh -m or -l.
Brendan Cully <brendan@kublai.com>
parents: 2742
diff changeset
961 del comments[ci]
1bac2bfe081a Change patch header as well as commit message with qrefresh -m or -l.
Brendan Cully <brendan@kublai.com>
parents: 2742
diff changeset
962 comments.append(msg)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
963 if comments:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
964 comments = "\n".join(comments) + '\n\n'
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
965 patchf.write(comments)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
966
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
967 fns, matchfn, anypats = cmdutil.matchpats(repo, pats, opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
968 tip = repo.changelog.tip()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
969 if top == tip:
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
970 # if the top of our patch queue is also the tip, there is an
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
971 # optimization here. We update the dirstate in place and strip
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
972 # off the tip commit. Then just commit the current directory
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
973 # tree. We can also send repo.commit the list of files
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
974 # changed to speed up the diff
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
975 #
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
976 # in short mode, we only diff the files included in the
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
977 # patch already
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
978 #
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
979 # this should really read:
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
980 # mm, dd, aa, aa2, uu = repo.status(tip, patchparent)[:5]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
981 # but we do it backwards to take advantage of manifest/chlog
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
982 # caching against the next repo.status call
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
983 #
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
984 mm, aa, dd, aa2, uu = repo.status(patchparent, tip)[:5]
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
985 if opts.get('short'):
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
986 filelist = mm + aa + dd
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
987 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
988 filelist = None
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
989 m, a, r, d, u = repo.status(files=filelist)[:5]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
990
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
991 # we might end up with files that were added between tip and
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
992 # the dirstate parent, but then changed in the local dirstate.
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
993 # in this case, we want them to only show up in the added section
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
994 for x in m:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
995 if x not in aa:
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
996 mm.append(x)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
997 # we might end up with files added by the local dirstate that
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
998 # were deleted by the patch. In this case, they should only
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
999 # show up in the changed section.
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1000 for x in a:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1001 if x in dd:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1002 del dd[dd.index(x)]
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
1003 mm.append(x)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1004 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1005 aa.append(x)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1006 # make sure any files deleted in the local dirstate
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1007 # are not in the add or change column of the patch
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1008 forget = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1009 for x in d + r:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1010 if x in aa:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1011 del aa[aa.index(x)]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1012 forget.append(x)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1013 continue
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
1014 elif x in mm:
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
1015 del mm[mm.index(x)]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1016 dd.append(x)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1017
3566
4d97184a06ad Make util.unique return a list
Matt Mackall <mpm@selenic.com>
parents: 3557
diff changeset
1018 m = util.unique(mm)
4d97184a06ad Make util.unique return a list
Matt Mackall <mpm@selenic.com>
parents: 3557
diff changeset
1019 r = util.unique(dd)
4d97184a06ad Make util.unique return a list
Matt Mackall <mpm@selenic.com>
parents: 3557
diff changeset
1020 a = util.unique(aa)
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1021 filelist = filter(matchfn, util.unique(m + r + a))
3083
17747e80ea6c mq: Add --git option to qrefresh
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
1022 if opts.get('git'):
17747e80ea6c mq: Add --git option to qrefresh
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
1023 self.diffopts().git = True
3024
a4374f7331e4 Call patch.diff directly instead of printdiff - this also saves an
Brendan Cully <brendan@kublai.com>
parents: 2994
diff changeset
1024 patch.diff(repo, patchparent, files=filelist, match=matchfn,
a4374f7331e4 Call patch.diff directly instead of printdiff - this also saves an
Brendan Cully <brendan@kublai.com>
parents: 2994
diff changeset
1025 fp=patchf, changes=(m, a, r, [], u),
a4374f7331e4 Call patch.diff directly instead of printdiff - this also saves an
Brendan Cully <brendan@kublai.com>
parents: 2994
diff changeset
1026 opts=self.diffopts())
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1027 patchf.close()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1028
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1029 changes = repo.changelog.read(tip)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1030 repo.dirstate.setparents(*cparents)
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
1031 copies = [(f, repo.dirstate.copied(f)) for f in a]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1032 repo.dirstate.update(a, 'a')
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
1033 for dst, src in copies:
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
1034 repo.dirstate.copy(src, dst)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1035 repo.dirstate.update(r, 'r')
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1036 # if the patch excludes a modified file, mark that file with mtime=0
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1037 # so status can see it.
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1038 mm = []
3468
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3460
diff changeset
1039 for i in xrange(len(m)-1, -1, -1):
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1040 if not matchfn(m[i]):
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1041 mm.append(m[i])
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1042 del m[i]
2874
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
1043 repo.dirstate.update(m, 'n')
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1044 repo.dirstate.update(mm, 'n', st_mtime=0)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1045 repo.dirstate.forget(forget)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1046
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
1047 if not msg:
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
1048 if not message:
3024
a4374f7331e4 Call patch.diff directly instead of printdiff - this also saves an
Brendan Cully <brendan@kublai.com>
parents: 2994
diff changeset
1049 message = "patch queue: %s\n" % patchfn
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
1050 else:
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
1051 message = "\n".join(message)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1052 else:
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
1053 message = msg
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
1054
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1055 self.strip(repo, top, update=False, backup='strip', wlock=wlock)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1056 n = repo.commit(filelist, message, changes[1], force=1, wlock=wlock)
3024
a4374f7331e4 Call patch.diff directly instead of printdiff - this also saves an
Brendan Cully <brendan@kublai.com>
parents: 2994
diff changeset
1057 self.applied[-1] = statusentry(revlog.hex(n), patchfn)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1058 self.applied_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1059 else:
2873
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2872
diff changeset
1060 self.printdiff(repo, patchparent, fp=patchf)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1061 patchf.close()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1062 self.pop(repo, force=True, wlock=wlock)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1063 self.push(repo, force=True, wlock=wlock)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1064
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1065 def init(self, repo, create=False):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1066 if os.path.isdir(self.path):
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
1067 raise util.Abort(_("patch queue directory already exists"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1068 os.mkdir(self.path)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1069 if create:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1070 return self.qrepo(create=True)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1071
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1072 def unapplied(self, repo, patch=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1073 if patch and patch not in self.series:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
1074 raise util.Abort(_("patch %s is not in series file") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1075 if not patch:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1076 start = self.series_end()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1077 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1078 start = self.series.index(patch) + 1
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1079 unapplied = []
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1080 for i in xrange(start, len(self.series)):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1081 pushable, reason = self.pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1082 if pushable:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1083 unapplied.append((i, self.series[i]))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1084 self.explain_pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1085 return unapplied
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1086
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1087 def qseries(self, repo, missing=None, start=0, length=0, status=None,
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1088 summary=False):
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1089 def displayname(patchname):
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1090 if summary:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1091 msg = self.readheaders(patchname)[0]
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1092 msg = msg and ': ' + msg[0] or ': '
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1093 else:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1094 msg = ''
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1095 return '%s%s' % (patchname, msg)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1096
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1097 def pname(i):
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1098 if status == 'A':
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1099 return self.applied[i].name
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1100 else:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1101 return self.series[i]
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1102
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1103 unapplied = self.series_end(all_patches=True)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1104 if not length:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1105 length = len(self.series) - start
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1106 if not missing:
3468
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3460
diff changeset
1107 for i in xrange(start, start+length):
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1108 pfx = ''
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1109 patch = pname(i)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1110 if self.ui.verbose:
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1111 if i < unapplied:
2756
caa6d992608b Add -s option to qseries: display first line of patch header.
Brendan Cully <brendan@kublai.com>
parents: 2754
diff changeset
1112 status = 'A'
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1113 elif self.pushable(i)[0]:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1114 status = 'U'
2756
caa6d992608b Add -s option to qseries: display first line of patch header.
Brendan Cully <brendan@kublai.com>
parents: 2754
diff changeset
1115 else:
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1116 status = 'G'
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1117 pfx = '%d %s ' % (i, status)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1118 self.ui.write('%s%s\n' % (pfx, displayname(patch)))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1119 else:
2789
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1120 msng_list = []
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1121 for root, dirs, files in os.walk(self.path):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1122 d = root[len(self.path) + 1:]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1123 for f in files:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1124 fl = os.path.join(d, f)
1852
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
1125 if (fl not in self.series and
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
1126 fl not in (self.status_path, self.series_path)
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
1127 and not fl.startswith('.')):
2789
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1128 msng_list.append(fl)
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1129 msng_list.sort()
2790
e5e23cae6e09 mq: remove unecessary test
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2789
diff changeset
1130 for x in msng_list:
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1131 pfx = self.ui.verbose and ('D ') or ''
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1132 self.ui.write("%s%s\n" % (pfx, displayname(x)))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1133
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1134 def issaveline(self, l):
2805
52516e48e3f3 Update qsave to use StatusEntry; don't throw exception on bad status lines.
Brendan Cully <brendan@kublai.com>
parents: 2804
diff changeset
1135 if l.name == '.hg.patches.save.line':
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1136 return True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1137
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1138 def qrepo(self, create=False):
2808
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
1139 if create or os.path.isdir(self.join(".hg")):
1839
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1810
diff changeset
1140 return hg.repository(self.ui, path=self.path, create=create)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1141
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1142 def restore(self, repo, rev, delete=None, qupdate=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1143 c = repo.changelog.read(rev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1144 desc = c[4].strip()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1145 lines = desc.splitlines()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1146 i = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1147 datastart = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1148 series = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1149 applied = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1150 qpp = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1151 for i in xrange(0, len(lines)):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1152 if lines[i] == 'Patch Data:':
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1153 datastart = i + 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1154 elif lines[i].startswith('Dirstate:'):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1155 l = lines[i].rstrip()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1156 l = l[10:].split(' ')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1157 qpp = [ hg.bin(x) for x in l ]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1158 elif datastart != None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1159 l = lines[i].rstrip()
2807
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2805
diff changeset
1160 se = statusentry(l)
2789
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1161 file_ = se.name
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1162 if se.rev:
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1163 applied.append(se)
3178
b3e103c388fc mq: don't write applied patches into series twice in restore
Brendan Cully <brendan@kublai.com>
parents: 3177
diff changeset
1164 else:
b3e103c388fc mq: don't write applied patches into series twice in restore
Brendan Cully <brendan@kublai.com>
parents: 3177
diff changeset
1165 series.append(file_)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1166 if datastart == None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1167 self.ui.warn("No saved patch data found\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1168 return 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1169 self.ui.warn("restoring status: %s\n" % lines[0])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1170 self.full_series = series
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1171 self.applied = applied
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
1172 self.parse_series()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1173 self.series_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1174 self.applied_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1175 heads = repo.changelog.heads()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1176 if delete:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1177 if rev not in heads:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1178 self.ui.warn("save entry has children, leaving it alone\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1179 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1180 self.ui.warn("removing save entry %s\n" % hg.short(rev))
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1181 pp = repo.dirstate.parents()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1182 if rev in pp:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1183 update = True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1184 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1185 update = False
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1186 self.strip(repo, rev, update=update, backup='strip')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1187 if qpp:
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1188 self.ui.warn("saved queue repository parents: %s %s\n" %
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1189 (hg.short(qpp[0]), hg.short(qpp[1])))
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1190 if qupdate:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1191 print "queue directory updating"
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1192 r = self.qrepo()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1193 if not r:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1194 self.ui.warn("Unable to load queue repository\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1195 return 1
2822
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2804
diff changeset
1196 hg.clean(r, qpp[0])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1197
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1198 def save(self, repo, msg=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1199 if len(self.applied) == 0:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1200 self.ui.warn("save: no patches applied, exiting\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1201 return 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1202 if self.issaveline(self.applied[-1]):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1203 self.ui.warn("status is already saved\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1204 return 1
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1205
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1206 ar = [ ':' + x for x in self.full_series ]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1207 if not msg:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1208 msg = "hg patches saved state"
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1209 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1210 msg = "hg patches: " + msg.rstrip('\r\n')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1211 r = self.qrepo()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1212 if r:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1213 pp = r.dirstate.parents()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1214 msg += "\nDirstate: %s %s" % (hg.hex(pp[0]), hg.hex(pp[1]))
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1215 msg += "\n\nPatch Data:\n"
2805
52516e48e3f3 Update qsave to use StatusEntry; don't throw exception on bad status lines.
Brendan Cully <brendan@kublai.com>
parents: 2804
diff changeset
1216 text = msg + "\n".join([str(x) for x in self.applied]) + '\n' + (ar and
52516e48e3f3 Update qsave to use StatusEntry; don't throw exception on bad status lines.
Brendan Cully <brendan@kublai.com>
parents: 2804
diff changeset
1217 "\n".join(ar) + '\n' or "")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1218 n = repo.commit(None, text, user=None, force=1)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1219 if not n:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1220 self.ui.warn("repo commit failed\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1221 return 1
2807
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2805
diff changeset
1222 self.applied.append(statusentry(revlog.hex(n),'.hg.patches.save.line'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1223 self.applied_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1224
2698
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1225 def full_series_end(self):
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1226 if len(self.applied) > 0:
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1227 p = self.applied[-1].name
2698
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1228 end = self.find_series(p)
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1229 if end == None:
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1230 return len(self.full_series)
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1231 return end + 1
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1232 return 0
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1233
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1234 def series_end(self, all_patches=False):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1235 end = 0
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1236 def next(start):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1237 if all_patches:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1238 return start
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1239 i = start
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1240 while i < len(self.series):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1241 p, reason = self.pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1242 if p:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1243 break
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1244 self.explain_pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1245 i += 1
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1246 return i
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1247 if len(self.applied) > 0:
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1248 p = self.applied[-1].name
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1249 try:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1250 end = self.series.index(p)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1251 except ValueError:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1252 return 0
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1253 return next(end + 1)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1254 return next(end)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1255
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1256 def appliedname(self, index):
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1257 pname = self.applied[index].name
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1258 if not self.ui.verbose:
2677
ec05ce9cbf47 mq: uniform verbose display of patche[s].
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2664
diff changeset
1259 p = pname
ec05ce9cbf47 mq: uniform verbose display of patche[s].
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2664
diff changeset
1260 else:
2941
d32df6452323 mq: fix appliedname
Brendan Cully <brendan@kublai.com>
parents: 2940
diff changeset
1261 p = str(self.series.index(pname)) + " " + pname
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1262 return p
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1263
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1264 def qimport(self, repo, files, patchname=None, rev=None, existing=None,
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1265 force=None):
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1266 def checkseries(patchname):
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1267 if patchname in self.series:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1268 raise util.Abort(_('patch %s is already in the series file')
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1269 % patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1270 def checkfile(patchname):
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1271 if not force and os.path.exists(self.join(patchname)):
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1272 raise util.Abort(_('patch "%s" already exists')
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1273 % patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1274
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1275 if rev:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1276 if files:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1277 raise util.Abort(_('option "-r" not valid when importing '
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1278 'files'))
3557
68341c06bc61 Make revrange return a list of ints so that callers don't have to convert
Matt Mackall <mpm@selenic.com>
parents: 3486
diff changeset
1279 rev = cmdutil.revrange(self.ui, repo, rev)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1280 rev.sort(lambda x, y: cmp(y, x))
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1281 if (len(files) > 1 or len(rev) > 1) and patchname:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
1282 raise util.Abort(_('option "-n" not valid when importing multiple '
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1283 'patches'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1284 i = 0
2488
2785aeb51be4 mq: add qimported patches if patch dir is a repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
1285 added = []
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1286 if rev:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1287 # If mq patches are applied, we can only import revisions
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1288 # that form a linear path to qbase.
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1289 # Otherwise, they should form a linear path to a head.
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1290 heads = repo.changelog.heads(repo.changelog.node(rev[-1]))
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1291 if len(heads) > 1:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1292 raise util.Abort(_('revision %d is the root of more than one '
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1293 'branch') % rev[-1])
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1294 if self.applied:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1295 base = revlog.hex(repo.changelog.node(rev[0]))
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1296 if base in [n.rev for n in self.applied]:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1297 raise util.Abort(_('revision %d is already managed')
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1298 % rev[0])
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1299 if heads != [revlog.bin(self.applied[-1].rev)]:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1300 raise util.Abort(_('revision %d is not the parent of '
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1301 'the queue') % rev[0])
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1302 base = repo.changelog.rev(revlog.bin(self.applied[0].rev))
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1303 lastparent = repo.changelog.parentrevs(base)[0]
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1304 else:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1305 if heads != [repo.changelog.node(rev[0])]:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1306 raise util.Abort(_('revision %d has unmanaged children')
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1307 % rev[0])
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1308 lastparent = None
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1309
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1310 for r in rev:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1311 p1, p2 = repo.changelog.parentrevs(r)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1312 n = repo.changelog.node(r)
3578
3b4e00cba57a Define and use nullrev (revision of nullid) instead of -1.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3568
diff changeset
1313 if p2 != revlog.nullrev:
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1314 raise util.Abort(_('cannot import merge revision %d') % r)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1315 if lastparent and lastparent != r:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1316 raise util.Abort(_('revision %d is not the parent of %d')
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1317 % (r, lastparent))
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1318 lastparent = p1
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1319
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1320 if not patchname:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1321 patchname = '%d.diff' % r
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1322 checkseries(patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1323 checkfile(patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1324 self.full_series.insert(0, patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1325
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1326 patchf = self.opener(patchname, "w")
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1327 patch.export(repo, [n], fp=patchf, opts=self.diffopts())
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1328 patchf.close()
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1329
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1330 se = statusentry(revlog.hex(n), patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1331 self.applied.insert(0, se)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1332
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1333 added.append(patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1334 patchname = None
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1335 self.parse_series()
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1336 self.applied_dirty = 1
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1337
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1338 for filename in files:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1339 if existing:
3533
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3486
diff changeset
1340 if filename == '-':
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3486
diff changeset
1341 raise util.Abort(_('-e is incompatible with import from -'))
3128
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1342 if not patchname:
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1343 patchname = filename
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1344 if not os.path.isfile(self.join(patchname)):
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1345 raise util.Abort(_("patch %s does not exist") % patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1346 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1347 try:
3533
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3486
diff changeset
1348 if filename == '-':
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3486
diff changeset
1349 if not patchname:
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3486
diff changeset
1350 raise util.Abort(_('need --name to import a patch from -'))
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3486
diff changeset
1351 text = sys.stdin.read()
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3486
diff changeset
1352 else:
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3486
diff changeset
1353 text = file(filename).read()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1354 except IOError:
3128
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1355 raise util.Abort(_("unable to read %s") % patchname)
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1356 if not patchname:
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1357 patchname = os.path.basename(filename)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1358 checkfile(patchname)
3128
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1359 patchf = self.opener(patchname, "w")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1360 patchf.write(text)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1361 checkseries(patchname)
2698
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1362 index = self.full_series_end() + i
3128
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1363 self.full_series[index:index] = [patchname]
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
1364 self.parse_series()
3128
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1365 self.ui.warn("adding %s to series file\n" % patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1366 i += 1
3128
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1367 added.append(patchname)
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1368 patchname = None
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1369 self.series_dirty = 1
2488
2785aeb51be4 mq: add qimported patches if patch dir is a repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
1370 qrepo = self.qrepo()
2785aeb51be4 mq: add qimported patches if patch dir is a repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
1371 if qrepo:
2785aeb51be4 mq: add qimported patches if patch dir is a repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
1372 qrepo.add(added)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1373
3371
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
1374 def delete(ui, repo, *patches, **opts):
2890
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2889
diff changeset
1375 """remove patches from queue
2752
5dfeda163bb7 Add -f option to qdelete, to remove patch file.
Brendan Cully <brendan@kublai.com>
parents: 2751
diff changeset
1376
3371
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
1377 With --rev, mq will stop managing the named revisions. The
3085
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
1378 patches must be applied and at the base of the stack. This option
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
1379 is useful when the patches have been applied upstream.
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
1380
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
1381 Otherwise, the patches must not be applied.
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
1382
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3084
diff changeset
1383 With --keep, the patch files are preserved in the patch directory."""
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1384 q = repo.mq
3371
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
1385 q.delete(repo, patches, opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1386 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1387 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1388
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1389 def applied(ui, repo, patch=None, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1390 """print the patches already applied"""
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1391 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1392 if patch:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1393 if patch not in q.series:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1394 raise util.Abort(_("patch %s is not in series file") % patch)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1395 end = q.series.index(patch) + 1
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1396 else:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1397 end = len(q.applied)
3179
245bb70d7dfb mq: raise util.Abort instead of using sys.exit(1)
Brendan Cully <brendan@kublai.com>
parents: 3178
diff changeset
1398 if not end:
245bb70d7dfb mq: raise util.Abort instead of using sys.exit(1)
Brendan Cully <brendan@kublai.com>
parents: 3178
diff changeset
1399 return
245bb70d7dfb mq: raise util.Abort instead of using sys.exit(1)
Brendan Cully <brendan@kublai.com>
parents: 3178
diff changeset
1400
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1401 return q.qseries(repo, length=end, status='A', summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1402
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1403 def unapplied(ui, repo, patch=None, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1404 """print the patches not yet applied"""
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1405 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1406 if patch:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1407 if patch not in q.series:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1408 raise util.Abort(_("patch %s is not in series file") % patch)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1409 start = q.series.index(patch) + 1
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1410 else:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1411 start = q.series_end()
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1412 q.qseries(repo, start=start, summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1413
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1414 def qimport(ui, repo, *filename, **opts):
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1415 """import a patch
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1416
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1417 The patch will have the same name as its source file unless you
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1418 give it a new one with --name.
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1419
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1420 You can register an existing patch inside the patch directory
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1421 with the --existing flag.
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1422
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1423 With --force, an existing patch of the same name will be overwritten.
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1424
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1425 An existing changeset may be placed under mq control with --rev
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1426 (e.g. qimport --rev tip -n patch will place tip under mq control).
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1427 """
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1428 q = repo.mq
3128
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3088
diff changeset
1429 q.qimport(repo, filename, patchname=opts['name'],
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
1430 existing=opts['existing'], force=opts['force'], rev=opts['rev'])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1431 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1432 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1433
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1434 def init(ui, repo, **opts):
2754
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1435 """init a new queue repository
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1436
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1437 The queue repository is unversioned by default. If -c is
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1438 specified, qinit will create a separate nested repository
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1439 for patches. Use qcommit to commit changes to this queue
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1440 repository."""
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1441 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1442 r = q.init(repo, create=opts['create_repo'])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1443 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1444 if r:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1445 fp = r.wopener('.hgignore', 'w')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1446 print >> fp, 'syntax: glob'
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1447 print >> fp, 'status'
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1448 fp.close()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1449 r.wopener('series', 'w').close()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1450 r.add(['.hgignore', 'series'])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1451 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1452
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1453 def clone(ui, source, dest=None, **opts):
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1454 '''clone main and patch repository at same time
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1455
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1456 If source is local, destination will have no patches applied. If
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1457 source is remote, this command can not check if patches are
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1458 applied in source, so cannot guarantee that patches are not
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1459 applied in destination. If you clone remote repository, be sure
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1460 before that it has no patches applied.
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1461
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1462 Source patch repository is looked for in <src>/.hg/patches by
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1463 default. Use -p <url> to change.
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1464 '''
2766
c5ac397f7671 fix call to commands.setremoteconfig
Bryan O'Sullivan <bos@serpentine.com>
parents: 2765
diff changeset
1465 commands.setremoteconfig(ui, opts)
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1466 if dest is None:
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1467 dest = hg.defaultdest(source)
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1468 sr = hg.repository(ui, ui.expandpath(source))
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1469 qbase, destrev = None, None
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1470 if sr.local():
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1471 reposetup(ui, sr)
2725
9ffee4f07323 mq: update to handle repomap not longer used
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2724
diff changeset
1472 if sr.mq.applied:
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1473 qbase = revlog.bin(sr.mq.applied[0].rev)
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1474 if not hg.islocal(dest):
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1475 destrev = sr.parents(qbase)[0]
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1476 ui.note(_('cloning main repo\n'))
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1477 sr, dr = hg.clone(ui, sr, dest,
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1478 pull=opts['pull'],
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1479 rev=destrev,
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1480 update=False,
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1481 stream=opts['uncompressed'])
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1482 ui.note(_('cloning patch repo\n'))
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1483 spr, dpr = hg.clone(ui, opts['patches'] or (sr.url() + '/.hg/patches'),
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1484 dr.url() + '/.hg/patches',
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1485 pull=opts['pull'],
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1486 update=not opts['noupdate'],
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1487 stream=opts['uncompressed'])
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1488 if dr.local():
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1489 if qbase:
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1490 ui.note(_('stripping applied patches from destination repo\n'))
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1491 reposetup(ui, dr)
2725
9ffee4f07323 mq: update to handle repomap not longer used
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2724
diff changeset
1492 dr.mq.strip(dr, qbase, update=False, backup=None)
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1493 if not opts['noupdate']:
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1494 ui.note(_('updating destination repo\n'))
2799
b550cd82f92a Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents: 2772
diff changeset
1495 hg.update(dr, dr.changelog.tip())
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
1496
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1497 def commit(ui, repo, *pats, **opts):
2526
37785f986260 mq: Added help for qcommit, consistently talk about queue repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2488
diff changeset
1498 """commit changes in the queue repository"""
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1499 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1500 r = q.qrepo()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1501 if not r: raise util.Abort('no queue repository')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1502 commands.commit(r.ui, r, *pats, **opts)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1503
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1504 def series(ui, repo, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1505 """print the entire series file"""
2756
caa6d992608b Add -s option to qseries: display first line of patch header.
Brendan Cully <brendan@kublai.com>
parents: 2754
diff changeset
1506 repo.mq.qseries(repo, missing=opts['missing'], summary=opts['summary'])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1507 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1508
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1509 def top(ui, repo, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1510 """print the name of the current patch"""
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1511 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1512 t = len(q.applied)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1513 if t:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1514 return q.qseries(repo, start=t-1, length=1, status='A',
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1515 summary=opts.get('summary'))
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1516 else:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1517 ui.write("No patches applied\n")
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1518 return 1
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1519
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1520 def next(ui, repo, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1521 """print the name of the next patch"""
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1522 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1523 end = q.series_end()
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1524 if end == len(q.series):
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1525 ui.write("All patches applied\n")
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1526 return 1
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1527 return q.qseries(repo, start=end, length=1, summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1528
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1529 def prev(ui, repo, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1530 """print the name of the previous patch"""
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1531 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1532 l = len(q.applied)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1533 if l == 1:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1534 ui.write("Only one patch applied\n")
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1535 return 1
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1536 if not l:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1537 ui.write("No patches applied\n")
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1538 return 1
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1539 return q.qseries(repo, start=l-2, length=1, status='A',
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1540 summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1541
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1542 def new(ui, repo, patch, **opts):
2754
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1543 """create a new patch
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1544
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1545 qnew creates a new patch on top of the currently-applied patch
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1546 (if any). It will refuse to run if there are any outstanding
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1547 changes unless -f is specified, in which case the patch will
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1548 be initialised with them.
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1549
2939
abd0be815c9c Add qnew -e option.
Brendan Cully <brendan@kublai.com>
parents: 2938
diff changeset
1550 -e, -m or -l set the patch header as well as the commit message.
abd0be815c9c Add qnew -e option.
Brendan Cully <brendan@kublai.com>
parents: 2938
diff changeset
1551 If none is specified, the patch header is empty and the
2770
5f8259e4d292 Clean up qnew help text.
Brendan Cully <brendan@kublai.com>
parents: 2767
diff changeset
1552 commit message is 'New patch: PATCH'"""
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1553 q = repo.mq
2804
4b20daa25f15 Update mq to use new logmessage arglist from 2794:bd8a9a94139f
Brendan Cully <brendan@kublai.com>
parents: 2803
diff changeset
1554 message = commands.logmessage(opts)
2939
abd0be815c9c Add qnew -e option.
Brendan Cully <brendan@kublai.com>
parents: 2938
diff changeset
1555 if opts['edit']:
abd0be815c9c Add qnew -e option.
Brendan Cully <brendan@kublai.com>
parents: 2938
diff changeset
1556 message = ui.edit(message, ui.username())
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
1557 q.new(repo, patch, msg=message, force=opts['force'])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1558 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1559 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1560
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1561 def refresh(ui, repo, *pats, **opts):
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1562 """update the current patch
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1563
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1564 If any file patterns are provided, the refreshed patch will contain only
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1565 the modifications that match those patterns; the remaining modifications
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1566 will remain in the working directory.
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1567 """
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1568 q = repo.mq
2804
4b20daa25f15 Update mq to use new logmessage arglist from 2794:bd8a9a94139f
Brendan Cully <brendan@kublai.com>
parents: 2803
diff changeset
1569 message = commands.logmessage(opts)
2746
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
1570 if opts['edit']:
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
1571 if message:
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
1572 raise util.Abort(_('option "-e" incompatible with "-m" or "-l"'))
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1573 patch = q.applied[-1].name
2746
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
1574 (message, comment, user, date, hasdiff) = q.readheaders(patch)
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
1575 message = ui.edit('\n'.join(message), user or ui.username())
2990
ac74046f8f58 qrefresh: exit with status 1 if no patches applied.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2967
diff changeset
1576 ret = q.refresh(repo, pats, msg=message, **opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1577 q.save_dirty()
2990
ac74046f8f58 qrefresh: exit with status 1 if no patches applied.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2967
diff changeset
1578 return ret
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1579
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
1580 def diff(ui, repo, *pats, **opts):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1581 """diff of the current patch"""
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
1582 repo.mq.diff(repo, pats, opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1583 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1584
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1585 def fold(ui, repo, *files, **opts):
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1586 """fold the named patches into the current patch
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1587
2771
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
1588 Patches must not yet be applied. Each patch will be successively
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
1589 applied to the current patch in the order given. If all the
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
1590 patches apply successfully, the current patch will be refreshed
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
1591 with the new cumulative patch, and the folded patches will
2889
57b88b86a845 Replace qdel/qfold -f option with -k/--keep.
Brendan Cully <brendan@kublai.com>
parents: 2882
diff changeset
1592 be deleted. With -k/--keep, the folded patch files will not
2771
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
1593 be removed afterwards.
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
1594
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1595 The header for each folded patch will be concatenated with
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1596 the current patch header, separated by a line of '* * *'."""
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1597
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1598 q = repo.mq
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1599
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1600 if not files:
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1601 raise util.Abort(_('qfold requires at least one patch name'))
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1602 if not q.check_toppatch(repo):
3069
bc3fe3b5b785 Never apply string formatting to generated errors with util.Abort.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3024
diff changeset
1603 raise util.Abort(_('No patches applied'))
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1604
2804
4b20daa25f15 Update mq to use new logmessage arglist from 2794:bd8a9a94139f
Brendan Cully <brendan@kublai.com>
parents: 2803
diff changeset
1605 message = commands.logmessage(opts)
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1606 if opts['edit']:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1607 if message:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1608 raise util.Abort(_('option "-e" incompatible with "-m" or "-l"'))
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1609
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1610 parent = q.lookup('qtip')
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1611 patches = []
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1612 messages = []
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1613 for f in files:
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1614 p = q.lookup(f)
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1615 if p in patches or p == parent:
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1616 ui.warn(_('Skipping already folded patch %s') % p)
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1617 if q.isapplied(p):
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1618 raise util.Abort(_('qfold cannot fold already applied patch %s') % p)
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1619 patches.append(p)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1620
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1621 for p in patches:
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1622 if not message:
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1623 messages.append(q.readheaders(p)[0])
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1624 pf = q.join(p)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1625 (patchsuccess, files, fuzz) = q.patch(repo, pf)
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1626 if not patchsuccess:
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1627 raise util.Abort(_('Error folding patch %s') % p)
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
1628 patch.updatedir(ui, repo, files)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1629
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1630 if not message:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1631 message, comments, user = q.readheaders(parent)[0:3]
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1632 for msg in messages:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1633 message.append('* * *')
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1634 message.extend(msg)
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1635 message = '\n'.join(message)
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1636
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1637 if opts['edit']:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1638 message = ui.edit(message, user or ui.username())
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1639
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1640 q.refresh(repo, msg=message)
3243
1d3aceae87c1 mq: update qfold to call delete correctly
Brendan Cully <brendan@kublai.com>
parents: 3215
diff changeset
1641 q.delete(repo, patches, opts)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1642 q.save_dirty()
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
1643
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1644 def guard(ui, repo, *args, **opts):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1645 '''set or print guards for a patch
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1646
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1647 Guards control whether a patch can be pushed. A patch with no
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1648 guards is always pushed. A patch with a positive guard ("+foo") is
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1649 pushed only if the qselect command has activated it. A patch with
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1650 a negative guard ("-foo") is never pushed if the qselect command
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1651 has activated it.
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1652
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1653 With no arguments, print the currently active guards.
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1654 With arguments, set guards for the named patch.
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1655
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1656 To set a negative guard "-foo" on topmost patch ("--" is needed so
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1657 hg will not interpret "-foo" as an option):
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1658 hg qguard -- -foo
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1659
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1660 To set guards on another patch:
3215
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3179
diff changeset
1661 hg qguard other.patch +2.6.17 -stable
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1662 '''
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1663 def status(idx):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1664 guards = q.series_guards[idx] or ['unguarded']
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1665 ui.write('%s: %s\n' % (q.series[idx], ' '.join(guards)))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1666 q = repo.mq
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1667 patch = None
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1668 args = list(args)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1669 if opts['list']:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1670 if args or opts['none']:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1671 raise util.Abort(_('cannot mix -l/--list with options or arguments'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1672 for i in xrange(len(q.series)):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1673 status(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1674 return
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1675 if not args or args[0][0:1] in '-+':
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1676 if not q.applied:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1677 raise util.Abort(_('no patches applied'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1678 patch = q.applied[-1].name
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1679 if patch is None and args[0][0:1] not in '-+':
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1680 patch = args.pop(0)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1681 if patch is None:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1682 raise util.Abort(_('no patch to work with'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1683 if args or opts['none']:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1684 q.set_guards(q.find_series(patch), args)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1685 q.save_dirty()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1686 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1687 status(q.series.index(q.lookup(patch)))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1688
2747
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1689 def header(ui, repo, patch=None):
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1690 """Print the header of the topmost or specified patch"""
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1691 q = repo.mq
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1692
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1693 if patch:
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1694 patch = q.lookup(patch)
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1695 else:
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1696 if not q.applied:
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1697 ui.write('No patches applied\n')
2994
c203ccd7d838 qheader: exit withh meaningful error code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2992
diff changeset
1698 return 1
2747
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1699 patch = q.lookup('qtip')
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1700 message = repo.mq.readheaders(patch)[0]
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1701
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1702 ui.write('\n'.join(message) + '\n')
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
1703
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1704 def lastsavename(path):
2789
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1705 (directory, base) = os.path.split(path)
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1706 names = os.listdir(directory)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1707 namere = re.compile("%s.([0-9]+)" % base)
2789
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1708 maxindex = None
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1709 maxname = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1710 for f in names:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1711 m = namere.match(f)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1712 if m:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1713 index = int(m.group(1))
2789
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1714 if maxindex == None or index > maxindex:
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1715 maxindex = index
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1716 maxname = f
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1717 if maxname:
2789
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2787
diff changeset
1718 return (os.path.join(directory, maxname), maxindex)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1719 return (None, None)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1720
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1721 def savename(path):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1722 (last, index) = lastsavename(path)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1723 if last is None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1724 index = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1725 newpath = path + ".%d" % (index + 1)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1726 return newpath
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1727
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1728 def push(ui, repo, patch=None, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1729 """push the next patch onto the stack"""
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1730 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1731 mergeq = None
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1732
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1733 if opts['all']:
3604
437489d8dfbf mq: handle qpush -a with empty series
Brendan Cully <brendan@kublai.com>
parents: 3578
diff changeset
1734 if not q.series:
437489d8dfbf mq: handle qpush -a with empty series
Brendan Cully <brendan@kublai.com>
parents: 3578
diff changeset
1735 raise util.Abort(_('no patches in series'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1736 patch = q.series[-1]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1737 if opts['merge']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1738 if opts['name']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1739 newpath = opts['name']
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1740 else:
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1741 newpath, i = lastsavename(q.path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1742 if not newpath:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1743 ui.warn("no saved queues found, please use -n\n")
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1744 return 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1745 mergeq = queue(ui, repo.join(""), newpath)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1746 ui.warn("merging with queue at: %s\n" % mergeq.path)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1747 ret = q.push(repo, patch, force=opts['force'], list=opts['list'],
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1748 mergeq=mergeq)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1749 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1750 return ret
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1751
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1752 def pop(ui, repo, patch=None, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1753 """pop the current patch off the stack"""
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1754 localupdate = True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1755 if opts['name']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1756 q = queue(ui, repo.join(""), repo.join(opts['name']))
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1757 ui.warn('using patch queue: %s\n' % q.path)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1758 localupdate = False
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1759 else:
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1760 q = repo.mq
2697
6c540dd14c38 mq: qpop should act like quilt pop
Chris Mason <mason@suse.com>
parents: 2696
diff changeset
1761 q.pop(repo, patch, force=opts['force'], update=localupdate, all=opts['all'])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1762 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1763 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1764
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1765 def rename(ui, repo, patch, name=None, **opts):
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1766 """rename a patch
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1767
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1768 With one argument, renames the current patch to PATCH1.
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1769 With two arguments, renames PATCH1 to PATCH2."""
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1770
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1771 q = repo.mq
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1772
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1773 if not name:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1774 name = patch
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1775 patch = None
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1776
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1777 if patch:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1778 patch = q.lookup(patch)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1779 else:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1780 if not q.applied:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1781 ui.write(_('No patches applied\n'))
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1782 return
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1783 patch = q.lookup('qtip')
3080
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3079
diff changeset
1784 absdest = q.join(name)
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3079
diff changeset
1785 if os.path.isdir(absdest):
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3079
diff changeset
1786 name = os.path.join(name, os.path.basename(patch))
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3079
diff changeset
1787 absdest = q.join(name)
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3079
diff changeset
1788 if os.path.exists(absdest):
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3079
diff changeset
1789 raise util.Abort(_('%s already exists') % absdest)
3215
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3179
diff changeset
1790
3080
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3079
diff changeset
1791 if name in q.series:
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3079
diff changeset
1792 raise util.Abort(_('A patch named %s already exists in the series file') % name)
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1793
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1794 if ui.verbose:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1795 ui.write('Renaming %s to %s\n' % (patch, name))
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1796 i = q.find_series(patch)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1797 q.full_series[i] = name
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
1798 q.parse_series()
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1799 q.series_dirty = 1
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1800
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1801 info = q.isapplied(patch)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1802 if info:
2807
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2805
diff changeset
1803 q.applied[info[0]] = statusentry(info[1], name)
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1804 q.applied_dirty = 1
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1805
2808
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
1806 util.rename(q.join(patch), absdest)
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1807 r = q.qrepo()
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1808 if r:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1809 wlock = r.wlock()
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1810 if r.dirstate.state(name) == 'r':
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1811 r.undelete([name], wlock)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1812 r.copy(patch, name, wlock)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1813 r.remove([patch], False, wlock)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1814
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1815 q.save_dirty()
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
1816
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1817 def restore(ui, repo, rev, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1818 """restore the queue state saved by a rev"""
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1819 rev = repo.lookup(rev)
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1820 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1821 q.restore(repo, rev, delete=opts['delete'],
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1822 qupdate=opts['update'])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1823 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1824 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1825
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1826 def save(ui, repo, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1827 """save current queue state"""
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1828 q = repo.mq
2804
4b20daa25f15 Update mq to use new logmessage arglist from 2794:bd8a9a94139f
Brendan Cully <brendan@kublai.com>
parents: 2803
diff changeset
1829 message = commands.logmessage(opts)
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
1830 ret = q.save(repo, msg=message)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1831 if ret:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1832 return ret
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1833 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1834 if opts['copy']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1835 path = q.path
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1836 if opts['name']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1837 newpath = os.path.join(q.basepath, opts['name'])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1838 if os.path.exists(newpath):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1839 if not os.path.isdir(newpath):
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
1840 raise util.Abort(_('destination %s exists and is not '
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
1841 'a directory') % newpath)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1842 if not opts['force']:
2711
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
1843 raise util.Abort(_('destination %s exists, '
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2710
diff changeset
1844 'use -f to force') % newpath)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1845 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1846 newpath = savename(path)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1847 ui.warn("copy %s to %s\n" % (path, newpath))
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1848 util.copyfiles(path, newpath)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1849 if opts['empty']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1850 try:
2808
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2807
diff changeset
1851 os.unlink(q.join(q.status_path))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1852 except:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1853 pass
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1854 return 0
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1855
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1856 def strip(ui, repo, rev, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1857 """strip a revision and all later revs on the same branch"""
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1858 rev = repo.lookup(rev)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1859 backup = 'all'
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1860 if opts['backup']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1861 backup = 'strip'
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1862 elif opts['nobackup']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1863 backup = 'none'
3084
fd1479e30aaf mq: do not update an empty working directory after strip.
Brendan Cully <brendan@kublai.com>
parents: 3083
diff changeset
1864 update = repo.dirstate.parents()[0] != revlog.nullid
fd1479e30aaf mq: do not update an empty working directory after strip.
Brendan Cully <brendan@kublai.com>
parents: 3083
diff changeset
1865 repo.mq.strip(repo, rev, backup=backup, update=update)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1866 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1867
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1868 def select(ui, repo, *args, **opts):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1869 '''set or print guarded patches to push
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1870
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1871 Use the qguard command to set or print guards on patch, then use
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1872 qselect to tell mq which guards to use. A patch will be pushed if it
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1873 has no guards or any positive guards match the currently selected guard,
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1874 but will not be pushed if any negative guards match the current guard.
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1875 For example:
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1876
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1877 qguard foo.patch -stable (negative guard)
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1878 qguard bar.patch +stable (positive guard)
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1879 qselect stable
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1880
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1881 This activates the "stable" guard. mq will skip foo.patch (because
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1882 it has a negative match) but push bar.patch (because it
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1883 has a positive match).
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1884
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1885 With no arguments, prints the currently active guards.
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1886 With one argument, sets the active guard.
3215
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3179
diff changeset
1887
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1888 Use -n/--none to deactivate guards (no other arguments needed).
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1889 When no guards are active, patches with positive guards are skipped
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1890 and patches with negative guards are pushed.
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1891
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1892 qselect can change the guards on applied patches. It does not pop
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1893 guarded patches by default. Use --pop to pop back to the last applied
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1894 patch that is not guarded. Use --reapply (which implies --pop) to push
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1895 back to the current patch afterwards, but skip guarded patches.
2832
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1896
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1897 Use -s/--series to print a list of all guards in the series file (no
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
1898 other arguments needed). Use -v for more information.'''
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1899
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1900 q = repo.mq
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1901 guards = q.active()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1902 if args or opts['none']:
2832
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1903 old_unapplied = q.unapplied(repo)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1904 old_guarded = [i for i in xrange(len(q.applied)) if
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1905 not q.pushable(i)[0]]
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1906 q.set_active(args)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1907 q.save_dirty()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1908 if not args:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1909 ui.status(_('guards deactivated\n'))
2832
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1910 if not opts['pop'] and not opts['reapply']:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1911 unapplied = q.unapplied(repo)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1912 guarded = [i for i in xrange(len(q.applied))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1913 if not q.pushable(i)[0]]
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1914 if len(unapplied) != len(old_unapplied):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1915 ui.status(_('number of unguarded, unapplied patches has '
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1916 'changed from %d to %d\n') %
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1917 (len(old_unapplied), len(unapplied)))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1918 if len(guarded) != len(old_guarded):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1919 ui.status(_('number of guarded, applied patches has changed '
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1920 'from %d to %d\n') %
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1921 (len(old_guarded), len(guarded)))
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1922 elif opts['series']:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1923 guards = {}
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1924 noguards = 0
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1925 for gs in q.series_guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1926 if not gs:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1927 noguards += 1
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1928 for g in gs:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1929 guards.setdefault(g, 0)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1930 guards[g] += 1
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1931 if ui.verbose:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1932 guards['NONE'] = noguards
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1933 guards = guards.items()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1934 guards.sort(lambda a, b: cmp(a[0][1:], b[0][1:]))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1935 if guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1936 ui.note(_('guards in series file:\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1937 for guard, count in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1938 ui.note('%2d ' % count)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1939 ui.write(guard, '\n')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1940 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1941 ui.note(_('no guards in series file\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1942 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1943 if guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1944 ui.note(_('active guards:\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1945 for g in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1946 ui.write(g, '\n')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1947 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1948 ui.write(_('no active guards\n'))
2832
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1949 reapply = opts['reapply'] and q.applied and q.appliedname(-1)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1950 popped = False
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1951 if opts['pop'] or opts['reapply']:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1952 for i in xrange(len(q.applied)):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1953 pushable, reason = q.pushable(i)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1954 if not pushable:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1955 ui.status(_('popping guarded patches\n'))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1956 popped = True
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1957 if i == 0:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1958 q.pop(repo, all=True)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1959 else:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1960 q.pop(repo, i-1)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1961 break
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1962 if popped:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1963 try:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1964 if reapply:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1965 ui.status(_('reapplying unguarded patches\n'))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1966 q.push(repo, reapply)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1967 finally:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
1968 q.save_dirty()
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
1969
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1970 def reposetup(ui, repo):
2807
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2805
diff changeset
1971 class mqrepo(repo.__class__):
2836
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1972 def abort_if_wdir_patched(self, errmsg, force=False):
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1973 if self.mq.applied and not force:
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1974 parent = revlog.hex(self.dirstate.parents()[0])
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1975 if parent in [s.rev for s in self.mq.applied]:
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1976 raise util.Abort(errmsg)
3215
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3179
diff changeset
1977
2833
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2832
diff changeset
1978 def commit(self, *args, **opts):
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2832
diff changeset
1979 if len(args) >= 6:
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2832
diff changeset
1980 force = args[5]
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2832
diff changeset
1981 else:
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2832
diff changeset
1982 force = opts.get('force')
2836
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1983 self.abort_if_wdir_patched(
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1984 _('cannot commit over an applied mq patch'),
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1985 force)
2833
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2832
diff changeset
1986
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2832
diff changeset
1987 return super(mqrepo, self).commit(*args, **opts)
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2832
diff changeset
1988
2836
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1989 def push(self, remote, force=False, revs=None):
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1990 if self.mq.applied and not force:
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1991 raise util.Abort(_('source has mq patches applied'))
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2833
diff changeset
1992 return super(mqrepo, self).push(remote, force, revs)
3215
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3179
diff changeset
1993
2723
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
1994 def tags(self):
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
1995 if self.tagscache:
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
1996 return self.tagscache
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
1997
2807
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2805
diff changeset
1998 tagscache = super(mqrepo, self).tags()
2682
4e2dc5c16e61 Add mq patch names to tagscache instead of overriding lookup.
Brendan Cully <brendan@kublai.com>
parents: 2677
diff changeset
1999
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2000 q = self.mq
2723
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2001 if not q.applied:
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2002 return tagscache
2663
96950d39171d Mq: modify repo.lookup to resolve applied patches too.
Brendan Cully <brendan@kublai.com>
parents: 2554
diff changeset
2003
2775
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
2004 mqtags = [(patch.rev, patch.name) for patch in q.applied]
2723
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2005 mqtags.append((mqtags[-1][0], 'qtip'))
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2006 mqtags.append((mqtags[0][0], 'qbase'))
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2007 for patch in mqtags:
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2008 if patch[1] in tagscache:
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2009 self.ui.warn('Tag %s overrides mq patch of the same name\n' % patch[1])
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2010 else:
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2011 tagscache[patch[1]] = revlog.bin(patch[0])
2682
4e2dc5c16e61 Add mq patch names to tagscache instead of overriding lookup.
Brendan Cully <brendan@kublai.com>
parents: 2677
diff changeset
2012
4e2dc5c16e61 Add mq patch names to tagscache instead of overriding lookup.
Brendan Cully <brendan@kublai.com>
parents: 2677
diff changeset
2013 return tagscache
2664
9b8df8dceeed Add qtip and qbase to mq qlookup.
Brendan Cully <brendan@kublai.com>
parents: 2663
diff changeset
2014
3486
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2015 def branchtags(self):
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2016 if self.branchcache != None:
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2017 return self.branchcache
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2018
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2019 q = self.mq
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2020 if not q.applied:
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2021 return super(mqrepo, self).branchtags()
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2022
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2023 self.branchcache = {} # avoid recursion in changectx
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2024 cl = self.changelog
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2025 partial, last, lrev = self._readbranchcache()
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2026
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2027 qbase = cl.rev(revlog.bin(q.applied[0].rev))
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2028 start = lrev + 1
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2029 if start < qbase:
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2030 # update the cache (excluding the patches) and save it
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2031 self._updatebranchcache(partial, lrev+1, qbase)
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2032 self._writebranchcache(partial, cl.node(qbase-1), qbase-1)
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2033 start = qbase
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2034 # if start = qbase, the cache is as updated as it should be.
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2035 # if start > qbase, the cache includes (part of) the patches.
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2036 # we might as well use it, but we won't save it.
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2037
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2038 # update the cache up to the tip
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2039 self._updatebranchcache(partial, start, cl.count())
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2040
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2041 self.branchcache = partial
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2042 return self.branchcache
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3468
diff changeset
2043
2839
82f50658c72b mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2838
diff changeset
2044 if repo.local():
82f50658c72b mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2838
diff changeset
2045 repo.__class__ = mqrepo
82f50658c72b mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2838
diff changeset
2046 repo.mq = queue(ui, repo.join(""))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2047
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2048 seriesopts = [('s', 'summary', None, _('print first line of patch header'))]
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2049
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2050 cmdtable = {
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2051 "qapplied": (applied, [] + seriesopts, 'hg qapplied [-s] [PATCH]'),
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
2052 "qclone": (clone,
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
2053 [('', 'pull', None, _('use pull protocol to copy metadata')),
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
2054 ('U', 'noupdate', None, _('do not update the new working directories')),
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
2055 ('', 'uncompressed', None,
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
2056 _('use uncompressed transfer (fast over LAN)')),
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
2057 ('e', 'ssh', '', _('specify ssh command to use')),
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
2058 ('p', 'patches', '', _('location of source patch repo')),
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
2059 ('', 'remotecmd', '',
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
2060 _('specify hg command to run on the remote side'))],
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2712
diff changeset
2061 'hg qclone [OPTION]... SOURCE [DEST]'),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2062 "qcommit|qci":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2063 (commit,
2185
5acd648770d0 Better help for mq: Corrected synopses, get qcommit options from commands.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2097
diff changeset
2064 commands.table["^commit|ci"][1],
5acd648770d0 Better help for mq: Corrected synopses, get qcommit options from commands.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2097
diff changeset
2065 'hg qcommit [OPTION]... [FILE]...'),
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
2066 "^qdiff": (diff,
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
2067 [('I', 'include', [], _('include names matching the given patterns')),
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
2068 ('X', 'exclude', [], _('exclude names matching the given patterns'))],
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
2069 'hg qdiff [-I] [-X] [FILE]...'),
2889
57b88b86a845 Replace qdel/qfold -f option with -k/--keep.
Brendan Cully <brendan@kublai.com>
parents: 2882
diff changeset
2070 "qdelete|qremove|qrm":
2752
5dfeda163bb7 Add -f option to qdelete, to remove patch file.
Brendan Cully <brendan@kublai.com>
parents: 2751
diff changeset
2071 (delete,
3371
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
2072 [('k', 'keep', None, _('keep patch file')),
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
2073 ('r', 'rev', [], _('stop managing a revision'))],
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
2074 'hg qdelete [-k] [-r REV]... PATCH...'),
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2075 'qfold':
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2076 (fold,
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2077 [('e', 'edit', None, _('edit patch header')),
2889
57b88b86a845 Replace qdel/qfold -f option with -k/--keep.
Brendan Cully <brendan@kublai.com>
parents: 2882
diff changeset
2078 ('k', 'keep', None, _('keep folded patch files')),
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2079 ('m', 'message', '', _('set patch header to <text>')),
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2080 ('l', 'logfile', '', _('set patch header to contents of <file>'))],
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2081 'hg qfold [-e] [-m <text>] [-l <file] PATCH...'),
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
2082 'qguard': (guard, [('l', 'list', None, _('list all patches and guards')),
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
2083 ('n', 'none', None, _('drop all guards'))],
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
2084 'hg qguard [PATCH] [+GUARD...] [-GUARD...]'),
2747
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2085 'qheader': (header, [],
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2086 _('hg qheader [PATCH]')),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2087 "^qimport":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2088 (qimport,
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2089 [('e', 'existing', None, 'import file in patch dir'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2090 ('n', 'name', '', 'patch file name'),
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
2091 ('f', 'force', None, 'overwrite existing files'),
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
2092 ('r', 'rev', [], 'place existing revisions under mq control')],
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3128
diff changeset
2093 'hg qimport [-e] [-n NAME] [-f] [-r REV]... FILE...'),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2094 "^qinit":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2095 (init,
2526
37785f986260 mq: Added help for qcommit, consistently talk about queue repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2488
diff changeset
2096 [('c', 'create-repo', None, 'create queue repository')],
2185
5acd648770d0 Better help for mq: Corrected synopses, get qcommit options from commands.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2097
diff changeset
2097 'hg qinit [-c]'),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2098 "qnew":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2099 (new,
2939
abd0be815c9c Add qnew -e option.
Brendan Cully <brendan@kublai.com>
parents: 2938
diff changeset
2100 [('e', 'edit', None, _('edit commit message')),
abd0be815c9c Add qnew -e option.
Brendan Cully <brendan@kublai.com>
parents: 2938
diff changeset
2101 ('m', 'message', '', _('use <text> as commit message')),
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
2102 ('l', 'logfile', '', _('read the commit message from <file>')),
2754
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
2103 ('f', 'force', None, _('import uncommitted changes into patch'))],
2939
abd0be815c9c Add qnew -e option.
Brendan Cully <brendan@kublai.com>
parents: 2938
diff changeset
2104 'hg qnew [-e] [-m TEXT] [-l FILE] [-f] PATCH'),
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2105 "qnext": (next, [] + seriesopts, 'hg qnext [-s]'),
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2106 "qprev": (prev, [] + seriesopts, 'hg qprev [-s]'),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2107 "^qpop":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2108 (pop,
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2109 [('a', 'all', None, 'pop all patches'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2110 ('n', 'name', '', 'queue name to pop'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2111 ('f', 'force', None, 'forget any local changes')],
2185
5acd648770d0 Better help for mq: Corrected synopses, get qcommit options from commands.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2097
diff changeset
2112 'hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]'),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2113 "^qpush":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2114 (push,
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2115 [('f', 'force', None, 'apply if the patch has rejects'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2116 ('l', 'list', None, 'list patch name in commit text'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2117 ('a', 'all', None, 'apply all patches'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2118 ('m', 'merge', None, 'merge from another queue'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2119 ('n', 'name', '', 'merge queue name')],
2185
5acd648770d0 Better help for mq: Corrected synopses, get qcommit options from commands.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2097
diff changeset
2120 'hg qpush [-f] [-l] [-a] [-m] [-n NAME] [PATCH | INDEX]'),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2121 "^qrefresh":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2122 (refresh,
2746
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
2123 [('e', 'edit', None, _('edit commit message')),
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
2124 ('m', 'message', '', _('change commit message with <text>')),
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
2125 ('l', 'logfile', '', _('change commit message with <file> content')),
3083
17747e80ea6c mq: Add --git option to qrefresh
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
2126 ('g', 'git', None, _('use git extended diff format')),
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
2127 ('s', 'short', None, 'short refresh'),
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
2128 ('I', 'include', [], _('include names matching the given patterns')),
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
2129 ('X', 'exclude', [], _('exclude names matching the given patterns'))],
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
2130 'hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] FILES...'),
2751
7d1de4545728 mq: add qmv as alias for qrename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2750
diff changeset
2131 'qrename|qmv':
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2132 (rename, [], 'hg qrename PATCH1 [PATCH2]'),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2133 "qrestore":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2134 (restore,
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2135 [('d', 'delete', None, 'delete save entry'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2136 ('u', 'update', None, 'update queue working dir')],
2185
5acd648770d0 Better help for mq: Corrected synopses, get qcommit options from commands.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2097
diff changeset
2137 'hg qrestore [-d] [-u] REV'),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2138 "qsave":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2139 (save,
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
2140 [('m', 'message', '', _('use <text> as commit message')),
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
2141 ('l', 'logfile', '', _('read the commit message from <file>')),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2142 ('c', 'copy', None, 'copy patch directory'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2143 ('n', 'name', '', 'copy directory name'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2144 ('e', 'empty', None, 'clear queue status file'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2145 ('f', 'force', None, 'force copy')],
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
2146 'hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]'),
2810
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
2147 "qselect": (select,
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2808
diff changeset
2148 [('n', 'none', None, _('disable all guards')),
2832
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2149 ('s', 'series', None, _('list all guards in series file')),
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2150 ('', 'pop', None,
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2151 _('pop to before first guarded applied patch')),
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2152 ('', 'reapply', None, _('pop, then reapply patches'))],
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2153 'hg qselect [OPTION...] [GUARD...]'),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2154 "qseries":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2155 (series,
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2156 [('m', 'missing', None, 'print patches not in series')] + seriesopts,
3082
240ec0e61290 Add the -s option to `hg help qseries`.
john.levon@sun.com
parents: 3080
diff changeset
2157 'hg qseries [-ms]'),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2158 "^strip":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2159 (strip,
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2160 [('f', 'force', None, 'force multi-head removal'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2161 ('b', 'backup', None, 'bundle unrelated changesets'),
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2162 ('n', 'nobackup', None, 'no backups')],
2185
5acd648770d0 Better help for mq: Corrected synopses, get qcommit options from commands.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2097
diff changeset
2163 'hg strip [-f] [-b] [-n] REV'),
3176
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2164 "qtop": (top, [] + seriesopts, 'hg qtop [-s]'),
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2165 "qunapplied": (unapplied, [] + seriesopts, 'hg qunapplied [-s] [PATCH]'),
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2166 }