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