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