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