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