Mercurial > hg
annotate hgext/mq.py @ 33649:377e8ddaebef stable
pathauditor: disable cache of audited paths by default (issue5628)
The initial attempt was to discard cache when appropriate, but it appears
to be error prone. We had to carefully inspect all places where audit() is
called e.g. without actually updating filesystem, before removing files and
directories, etc.
So, this patch disables the cache of audited paths by default, and enables
it only for the following cases:
- short-lived auditor objects
- repo.vfs, repo.svfs, and repo.cachevfs, which are managed directories
and considered sort of append-only (a file/directory would never be
replaced with a symlink)
There would be more cacheable vfs objects (e.g. mq.queue.opener), but I
decided not to inspect all of them in this patch. We can make them cached
later.
Benchmark result:
- using old clone of http://selenic.com/repo/linux-2.6/ (38319 files)
- on tmpfs
- run HGRCPATH=/dev/null hg up -q --time tip && hg up -q null
- try 4 times and take the last three results
original:
real 7.480 secs (user 1.140+22.760 sys 0.150+1.690)
real 8.010 secs (user 1.070+22.280 sys 0.170+2.120)
real 7.470 secs (user 1.120+22.390 sys 0.120+1.910)
clearcache (the other series):
real 7.680 secs (user 1.120+23.420 sys 0.140+1.970)
real 7.670 secs (user 1.110+23.620 sys 0.130+1.810)
real 7.740 secs (user 1.090+23.510 sys 0.160+1.940)
enable cache only for vfs and svfs (this series):
real 8.730 secs (user 1.500+25.190 sys 0.260+2.260)
real 8.750 secs (user 1.490+25.170 sys 0.250+2.340)
real 9.010 secs (user 1.680+25.340 sys 0.280+2.540)
remove cache function at all (for reference):
real 9.620 secs (user 1.440+27.120 sys 0.250+2.980)
real 9.420 secs (user 1.400+26.940 sys 0.320+3.130)
real 9.760 secs (user 1.530+27.270 sys 0.250+2.970)
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 26 Jul 2017 22:10:15 +0900 |
parents | 870560c759ed |
children | d5b2beca16c0 987a85c42b08 |
rev | line source |
---|---|
6187
531f3e78c6f2
mq: Cleanup: update outdated file header.
Marti Raudsepp <marti@juffo.org>
parents:
6164
diff
changeset
|
1 # mq.py - patch queues for mercurial |
1808 | 2 # |
2859 | 3 # Copyright 2005, 2006 Chris Mason <mason@suse.com> |
1808 | 4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
1808 | 7 |
8932
f87884329419
extensions: fix up description lines some more
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8929
diff
changeset
|
8 '''manage a stack of patches |
2554
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 |
7983
7b813bdbd5d0
Change double spaces to single spaces in help texts.
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
11 repository. It manages two stacks of patches - all known patches, and |
2554
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 |
7983
7b813bdbd5d0
Change double spaces to single spaces in help texts.
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
15 directory. Applied patches are both patch files and changesets. |
2554
8264c2034970
help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2531
diff
changeset
|
16 |
30879
5fbf1da938a6
help: uppercase command placeholder
Yuya Nishihara <yuya@tcha.org>
parents:
30519
diff
changeset
|
17 Common tasks (use :hg:`help COMMAND` for more details):: |
2554
8264c2034970
help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2531
diff
changeset
|
18 |
9157
9261667e9b82
commands: use minirst parser when displaying help
Martin Geisler <mg@lazybytes.net>
parents:
9111
diff
changeset
|
19 create new patch qnew |
9261667e9b82
commands: use minirst parser when displaying help
Martin Geisler <mg@lazybytes.net>
parents:
9111
diff
changeset
|
20 import existing patch qimport |
2554
8264c2034970
help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2531
diff
changeset
|
21 |
9157
9261667e9b82
commands: use minirst parser when displaying help
Martin Geisler <mg@lazybytes.net>
parents:
9111
diff
changeset
|
22 print patch series qseries |
9261667e9b82
commands: use minirst parser when displaying help
Martin Geisler <mg@lazybytes.net>
parents:
9111
diff
changeset
|
23 print applied patches qapplied |
2554
8264c2034970
help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2531
diff
changeset
|
24 |
9157
9261667e9b82
commands: use minirst parser when displaying help
Martin Geisler <mg@lazybytes.net>
parents:
9111
diff
changeset
|
25 add known patch to applied stack qpush |
9261667e9b82
commands: use minirst parser when displaying help
Martin Geisler <mg@lazybytes.net>
parents:
9111
diff
changeset
|
26 remove patch from applied stack qpop |
9261667e9b82
commands: use minirst parser when displaying help
Martin Geisler <mg@lazybytes.net>
parents:
9111
diff
changeset
|
27 refresh contents of top applied patch qrefresh |
10190
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
28 |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
29 By default, mq will automatically use git patches when required to |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
30 avoid losing file mode changes, copy records, binary files or empty |
26098 | 31 files creations or deletions. This behavior can be configured with:: |
10190
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
32 |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
33 [mq] |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
34 git = auto/keep/yes/no |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
35 |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
36 If set to 'keep', mq will obey the [diff] section configuration while |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
37 preserving existing git patches upon qrefresh. If set to 'yes' or |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
38 'no', mq will override the [diff] section and always generate git or |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
39 regular patches, possibly losing data in the second case. |
11234
1ebe048902d9
mq: mention qqueue in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11230
diff
changeset
|
40 |
16040
c0b2986b37b8
mq: fix secret description in help
Matt Mackall <mpm@selenic.com>
parents:
16029
diff
changeset
|
41 It may be desirable for mq changesets to be kept in the secret phase (see |
16017 | 42 :hg:`help phases`), which can be enabled with the following setting:: |
43 | |
44 [mq] | |
45 secret = True | |
46 | |
11234
1ebe048902d9
mq: mention qqueue in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11230
diff
changeset
|
47 You will by default be managing a patch queue named "patches". You can |
1ebe048902d9
mq: mention qqueue in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11230
diff
changeset
|
48 create other, independent patch queues with the :hg:`qqueue` command. |
16656
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
49 |
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
50 If the working directory contains uncommitted files, qpush, qpop and |
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
51 qgoto abort immediately. If -f/--force is used, the changes are |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
52 discarded. Setting:: |
16656
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
53 |
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
54 [mq] |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
55 keepchanges = True |
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
56 |
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
57 make them behave as if --keep-changes were passed, and non-conflicting |
16656
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
58 local changes will be tolerated and preserved. If incompatible options |
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
59 such as -f/--force or --exact are passed, this setting is ignored. |
19826
4b1cbcfdabf7
mq: extract strip function as its standalone extension (issue3824)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19825
diff
changeset
|
60 |
4b1cbcfdabf7
mq: extract strip function as its standalone extension (issue3824)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19825
diff
changeset
|
61 This extension used to provide a strip command. This command now lives |
4b1cbcfdabf7
mq: extract strip function as its standalone extension (issue3824)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19825
diff
changeset
|
62 in the strip extension. |
2554
8264c2034970
help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2531
diff
changeset
|
63 ''' |
8264c2034970
help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2531
diff
changeset
|
64 |
29127
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
65 from __future__ import absolute_import |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
66 |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
67 import errno |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
68 import os |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
69 import re |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
70 import shutil |
3891 | 71 from mercurial.i18n import _ |
29127
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
72 from mercurial.node import ( |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
73 bin, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
74 hex, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
75 nullid, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
76 nullrev, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
77 short, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
78 ) |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
79 from mercurial import ( |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
80 cmdutil, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
81 commands, |
30489
0ae83ede68c5
mq: refer to dirstateguard by its new name
Augie Fackler <augie@google.com>
parents:
30485
diff
changeset
|
82 dirstateguard, |
29127
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
83 error, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
84 extensions, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
85 hg, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
86 localrepo, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
87 lock as lockmod, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
88 patch as patchmod, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
89 phases, |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30489
diff
changeset
|
90 pycompat, |
29127
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
91 registrar, |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31023
diff
changeset
|
92 revsetlang, |
29127
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
93 scmutil, |
31023
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30879
diff
changeset
|
94 smartset, |
29127
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
95 subrepo, |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
96 util, |
31243
816bc3b35bac
vfs: use 'vfs' module directly in 'hgext.mq'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31216
diff
changeset
|
97 vfs as vfsmod, |
29127
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
98 ) |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
99 |
fa161ac73b24
py3: make hgext/mq.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28622
diff
changeset
|
100 release = lockmod.release |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
101 seriesopts = [('s', 'summary', None, _('print first line of patch header'))] |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
102 |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
103 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32193
diff
changeset
|
104 command = registrar.command(cmdtable) |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29752
diff
changeset
|
105 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
25149
diff
changeset
|
106 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
25149
diff
changeset
|
107 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
25149
diff
changeset
|
108 # leave the attribute unspecified. |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29752
diff
changeset
|
109 testedwith = 'ships-with-hg-core' |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
110 |
19951
d51c4d85ec23
spelling: random spell checker fixes
Mads Kiilerich <madski@unity3d.com>
parents:
19916
diff
changeset
|
111 # force load strip extension formerly included in mq and import some utility |
19822
a194a33f8cb2
mq: prepare a strip extension for extraction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19820
diff
changeset
|
112 try: |
a194a33f8cb2
mq: prepare a strip extension for extraction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19820
diff
changeset
|
113 stripext = extensions.find('strip') |
a194a33f8cb2
mq: prepare a strip extension for extraction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19820
diff
changeset
|
114 except KeyError: |
a194a33f8cb2
mq: prepare a strip extension for extraction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19820
diff
changeset
|
115 # note: load is lazy so we could avoid the try-except, |
19951
d51c4d85ec23
spelling: random spell checker fixes
Mads Kiilerich <madski@unity3d.com>
parents:
19916
diff
changeset
|
116 # but I (marmoute) prefer this explicit code. |
19822
a194a33f8cb2
mq: prepare a strip extension for extraction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19820
diff
changeset
|
117 class dummyui(object): |
a194a33f8cb2
mq: prepare a strip extension for extraction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19820
diff
changeset
|
118 def debug(self, msg): |
a194a33f8cb2
mq: prepare a strip extension for extraction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19820
diff
changeset
|
119 pass |
a194a33f8cb2
mq: prepare a strip extension for extraction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19820
diff
changeset
|
120 stripext = extensions.load(dummyui(), 'strip', '') |
a194a33f8cb2
mq: prepare a strip extension for extraction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19820
diff
changeset
|
121 |
19825
4b4997068143
strip: move the strip helper function for mq to strip
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19824
diff
changeset
|
122 strip = stripext.strip |
19823
6fb14d21fe9d
strip: move checksubstate from mq to strip
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19822
diff
changeset
|
123 checksubstate = stripext.checksubstate |
19824
237e40b2c1ff
strip: move checklocalchanges from mq to strip
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19823
diff
changeset
|
124 checklocalchanges = stripext.checklocalchanges |
237e40b2c1ff
strip: move checklocalchanges from mq to strip
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19823
diff
changeset
|
125 |
19823
6fb14d21fe9d
strip: move checksubstate from mq to strip
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19822
diff
changeset
|
126 |
4037
bbdba01cce28
Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents:
4016
diff
changeset
|
127 # Patch names looks like unix-file names. |
bbdba01cce28
Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents:
4016
diff
changeset
|
128 # They must be joinable with queue directory and result in the patch path. |
bbdba01cce28
Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents:
4016
diff
changeset
|
129 normname = util.normpath |
bbdba01cce28
Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents:
4016
diff
changeset
|
130 |
8778
c5f36402daad
use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8761
diff
changeset
|
131 class statusentry(object): |
10682
8ed350051896
mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10681
diff
changeset
|
132 def __init__(self, node, name): |
8ed350051896
mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10681
diff
changeset
|
133 self.node, self.name = node, name |
11375
0f33abfccaa1
mq: __str__ falls back to __repr__
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11365
diff
changeset
|
134 def __repr__(self): |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
135 return hex(self.node) + ':' + self.name |
2780
ee48e5ef8753
Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents:
2765
diff
changeset
|
136 |
22546
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
137 # The order of the headers in 'hg export' HG patches: |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
138 HGHEADERS = [ |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
139 # '# HG changeset patch', |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
140 '# User ', |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
141 '# Date ', |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
142 '# ', |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
143 '# Branch ', |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
144 '# Node ID ', |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
145 '# Parent ', # can occur twice for merges - but that is not relevant for mq |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
146 ] |
23442
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
147 # The order of headers in plain 'mail style' patches: |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
148 PLAINHEADERS = { |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
149 'from': 0, |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
150 'date': 1, |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
151 'subject': 2, |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
152 } |
22546
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
153 |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
154 def inserthgheader(lines, header, value): |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
155 """Assuming lines contains a HG patch header, add a header line with value. |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
156 >>> try: inserthgheader([], '# Date ', 'z') |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
157 ... except ValueError, inst: print "oops" |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
158 oops |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
159 >>> inserthgheader(['# HG changeset patch'], '# Date ', 'z') |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
160 ['# HG changeset patch', '# Date z'] |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
161 >>> inserthgheader(['# HG changeset patch', ''], '# Date ', 'z') |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
162 ['# HG changeset patch', '# Date z', ''] |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
163 >>> inserthgheader(['# HG changeset patch', '# User y'], '# Date ', 'z') |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
164 ['# HG changeset patch', '# User y', '# Date z'] |
23412
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
165 >>> inserthgheader(['# HG changeset patch', '# Date x', '# User y'], |
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
166 ... '# User ', 'z') |
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
167 ['# HG changeset patch', '# Date x', '# User z'] |
22546
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
168 >>> inserthgheader(['# HG changeset patch', '# Date y'], '# Date ', 'z') |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
169 ['# HG changeset patch', '# Date z'] |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
170 >>> inserthgheader(['# HG changeset patch', '', '# Date y'], '# Date ', 'z') |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
171 ['# HG changeset patch', '# Date z', '', '# Date y'] |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
172 >>> inserthgheader(['# HG changeset patch', '# Parent y'], '# Date ', 'z') |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
173 ['# HG changeset patch', '# Date z', '# Parent y'] |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
174 """ |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
175 start = lines.index('# HG changeset patch') + 1 |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
176 newindex = HGHEADERS.index(header) |
23412
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
177 bestpos = len(lines) |
22546
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
178 for i in range(start, len(lines)): |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
179 line = lines[i] |
23412
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
180 if not line.startswith('# '): |
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
181 bestpos = min(bestpos, i) |
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
182 break |
22546
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
183 for lineindex, h in enumerate(HGHEADERS): |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
184 if line.startswith(h): |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
185 if lineindex == newindex: |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
186 lines[i] = header + value |
23412
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
187 return lines |
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
188 if lineindex > newindex: |
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
189 bestpos = min(bestpos, i) |
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
190 break # next line |
94092019e839
mq: fix update of headers that occur in the "wrong" order
Mads Kiilerich <madski@unity3d.com>
parents:
23346
diff
changeset
|
191 lines.insert(bestpos, header + value) |
22546
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
192 return lines |
aac5482db318
mq: refactor patchheader header ordering to match export (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22545
diff
changeset
|
193 |
23345
83cbf556babf
mq: introduce insertplainheader - same naive implementation as before
Mads Kiilerich <madski@unity3d.com>
parents:
23344
diff
changeset
|
194 def insertplainheader(lines, header, value): |
23442
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
195 """For lines containing a plain patch header, add a header line with value. |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
196 >>> insertplainheader([], 'Date', 'z') |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
197 ['Date: z'] |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
198 >>> insertplainheader([''], 'Date', 'z') |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
199 ['Date: z', ''] |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
200 >>> insertplainheader(['x'], 'Date', 'z') |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
201 ['Date: z', '', 'x'] |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
202 >>> insertplainheader(['From: y', 'x'], 'Date', 'z') |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
203 ['From: y', 'Date: z', '', 'x'] |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
204 >>> insertplainheader([' date : x', ' from : y', ''], 'From', 'z') |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
205 [' date : x', 'From: z', ''] |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
206 >>> insertplainheader(['', 'Date: y'], 'Date', 'z') |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
207 ['Date: z', '', 'Date: y'] |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
208 >>> insertplainheader(['foo: bar', 'DATE: z', 'x'], 'From', 'y') |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
209 ['From: y', 'foo: bar', 'DATE: z', '', 'x'] |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
210 """ |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
211 newprio = PLAINHEADERS[header.lower()] |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
212 bestpos = len(lines) |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
213 for i, line in enumerate(lines): |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
214 if ':' in line: |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
215 lheader = line.split(':', 1)[0].strip().lower() |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
216 lprio = PLAINHEADERS.get(lheader, newprio + 1) |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
217 if lprio == newprio: |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
218 lines[i] = '%s: %s' % (header, value) |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
219 return lines |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
220 if lprio > newprio and i < bestpos: |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
221 bestpos = i |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
222 else: |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
223 if line: |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
224 lines.insert(i, '') |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
225 if i < bestpos: |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
226 bestpos = i |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
227 break |
a5c94ea3b8af
mq: smarter handling of plain headers
Mads Kiilerich <madski@unity3d.com>
parents:
23412
diff
changeset
|
228 lines.insert(bestpos, '%s: %s' % (header, value)) |
23345
83cbf556babf
mq: introduce insertplainheader - same naive implementation as before
Mads Kiilerich <madski@unity3d.com>
parents:
23344
diff
changeset
|
229 return lines |
83cbf556babf
mq: introduce insertplainheader - same naive implementation as before
Mads Kiilerich <madski@unity3d.com>
parents:
23344
diff
changeset
|
230 |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
231 class patchheader(object): |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
232 def __init__(self, pf, plainmode=False): |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
233 def eatdiff(lines): |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
234 while lines: |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
235 l = lines[-1] |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
236 if (l.startswith("diff -") or |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
237 l.startswith("Index:") or |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
238 l.startswith("===========")): |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
239 del lines[-1] |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
240 else: |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
241 break |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
242 def eatempty(lines): |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
243 while lines: |
10688
d4d3a8a65248
mq: don't use regexp when not necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10687
diff
changeset
|
244 if not lines[-1].strip(): |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
245 del lines[-1] |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
246 else: |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
247 break |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
248 |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
249 message = [] |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
250 comments = [] |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
251 user = None |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
252 date = None |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
253 parent = None |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
254 format = None |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
255 subject = None |
13229
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
256 branch = None |
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
257 nodeid = None |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
258 diffstart = 0 |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
259 |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
260 for line in file(pf): |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
261 line = line.rstrip() |
10730
4d6bd7b8b6d8
mq: allow lines starting with '--- ' in patch messages
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10691
diff
changeset
|
262 if (line.startswith('diff --git') |
4d6bd7b8b6d8
mq: allow lines starting with '--- ' in patch messages
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10691
diff
changeset
|
263 or (diffstart and line.startswith('+++ '))): |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
264 diffstart = 2 |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
265 break |
10730
4d6bd7b8b6d8
mq: allow lines starting with '--- ' in patch messages
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10691
diff
changeset
|
266 diffstart = 0 # reset |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
267 if line.startswith("--- "): |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
268 diffstart = 1 |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
269 continue |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
270 elif format == "hgpatch": |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
271 # parse values when importing the result of an hg export |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
272 if line.startswith("# User "): |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
273 user = line[7:] |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
274 elif line.startswith("# Date "): |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
275 date = line[7:] |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
276 elif line.startswith("# Parent "): |
22521
3f948469bac0
mq: write '# Parent ' lines with two spaces like export does (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
22520
diff
changeset
|
277 parent = line[9:].lstrip() # handle double trailing space |
13229
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
278 elif line.startswith("# Branch "): |
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
279 branch = line[9:] |
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
280 elif line.startswith("# Node ID "): |
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
281 nodeid = line[10:] |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
282 elif not line.startswith("# ") and line: |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
283 message.append(line) |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
284 format = None |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
285 elif line == '# HG changeset patch': |
9287
53fdf18fd63b
mq: Parse commit message after we find start of changeset patch
David Soria Parra <dsp@php.net>
parents:
8948
diff
changeset
|
286 message = [] |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
287 format = "hgpatch" |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
288 elif (format != "tagdone" and (line.startswith("Subject: ") or |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
289 line.startswith("subject: "))): |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
290 subject = line[9:] |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
291 format = "tag" |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
292 elif (format != "tagdone" and (line.startswith("From: ") or |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
293 line.startswith("from: "))): |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
294 user = line[6:] |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
295 format = "tag" |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
296 elif (format != "tagdone" and (line.startswith("Date: ") or |
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
297 line.startswith("date: "))): |
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
298 date = line[6:] |
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
299 format = "tag" |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
300 elif format == "tag" and line == "": |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
301 # when looking for tags (subject: from: etc) they |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
302 # end once you find a blank line in the source |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
303 format = "tagdone" |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
304 elif message or line: |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
305 message.append(line) |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
306 comments.append(line) |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
307 |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
308 eatdiff(message) |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
309 eatdiff(comments) |
13229
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
310 # Remember the exact starting line of the patch diffs before consuming |
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
311 # empty lines, for external use by TortoiseHg and others |
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
312 self.diffstartline = len(comments) |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
313 eatempty(message) |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
314 eatempty(comments) |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
315 |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
316 # make sure message isn't empty |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
317 if format and format.startswith("tag") and subject: |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
318 message.insert(0, subject) |
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
319 |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
320 self.message = message |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
321 self.comments = comments |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
322 self.user = user |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
323 self.date = date |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
324 self.parent = parent |
13229
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
325 # nodeid and branch are for external use by TortoiseHg and others |
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
326 self.nodeid = nodeid |
f3058dd05281
mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents:
13228
diff
changeset
|
327 self.branch = branch |
8653
aa011d123f71
mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents:
8632
diff
changeset
|
328 self.haspatch = diffstart > 1 |
22544
0d75ce895adc
mq: make patchheader .plainmode more reliable
Mads Kiilerich <madski@unity3d.com>
parents:
22522
diff
changeset
|
329 self.plainmode = (plainmode or |
0d75ce895adc
mq: make patchheader .plainmode more reliable
Mads Kiilerich <madski@unity3d.com>
parents:
22522
diff
changeset
|
330 '# HG changeset patch' not in self.comments and |
25149
3f0744eeaeaf
cleanup: use __builtins__.any instead of util.any
Augie Fackler <augie@google.com>
parents:
25019
diff
changeset
|
331 any(c.startswith('Date: ') or |
22544
0d75ce895adc
mq: make patchheader .plainmode more reliable
Mads Kiilerich <madski@unity3d.com>
parents:
22522
diff
changeset
|
332 c.startswith('From: ') |
0d75ce895adc
mq: make patchheader .plainmode more reliable
Mads Kiilerich <madski@unity3d.com>
parents:
22522
diff
changeset
|
333 for c in self.comments)) |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
334 |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
335 def setuser(self, user): |
23443
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
336 try: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
337 inserthgheader(self.comments, '# User ', user) |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
338 except ValueError: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
339 if self.plainmode: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
340 insertplainheader(self.comments, 'From', user) |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
341 else: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
342 tmp = ['# HG changeset patch', '# User ' + user] |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
343 self.comments = tmp + self.comments |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
344 self.user = user |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
345 |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
346 def setdate(self, date): |
23443
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
347 try: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
348 inserthgheader(self.comments, '# Date ', date) |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
349 except ValueError: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
350 if self.plainmode: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
351 insertplainheader(self.comments, 'Date', date) |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
352 else: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
353 tmp = ['# HG changeset patch', '# Date ' + date] |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
354 self.comments = tmp + self.comments |
9337
2b1260436f83
mq: add the date with qrefresh, even if missing (issue1768)
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents:
9336
diff
changeset
|
355 self.date = date |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
356 |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
357 def setparent(self, parent): |
23443
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
358 try: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
359 inserthgheader(self.comments, '# Parent ', parent) |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
360 except ValueError: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
361 if not self.plainmode: |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
362 tmp = ['# HG changeset patch', '# Parent ' + parent] |
3b653c2fd6ba
mq: drop updateheader - inserthgheader and insertplainheader is enough
Mads Kiilerich <madski@unity3d.com>
parents:
23442
diff
changeset
|
363 self.comments = tmp + self.comments |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
364 self.parent = parent |
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
365 |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
366 def setmessage(self, message): |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
367 if self.comments: |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
368 self._delmsg() |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
369 self.message = [message] |
23344
6333412245ec
mq: when setting message in plain mode, separate it from header (issue4453)
Mads Kiilerich <madski@unity3d.com>
parents:
23128
diff
changeset
|
370 if message: |
6333412245ec
mq: when setting message in plain mode, separate it from header (issue4453)
Mads Kiilerich <madski@unity3d.com>
parents:
23128
diff
changeset
|
371 if self.plainmode and self.comments and self.comments[-1]: |
6333412245ec
mq: when setting message in plain mode, separate it from header (issue4453)
Mads Kiilerich <madski@unity3d.com>
parents:
23128
diff
changeset
|
372 self.comments.append('') |
6333412245ec
mq: when setting message in plain mode, separate it from header (issue4453)
Mads Kiilerich <madski@unity3d.com>
parents:
23128
diff
changeset
|
373 self.comments.append(message) |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
374 |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
375 def __str__(self): |
22522
382c2be610dc
mq: simplify patchheader handling of the empty line before the diff
Mads Kiilerich <madski@unity3d.com>
parents:
22521
diff
changeset
|
376 s = '\n'.join(self.comments).rstrip() |
382c2be610dc
mq: simplify patchheader handling of the empty line before the diff
Mads Kiilerich <madski@unity3d.com>
parents:
22521
diff
changeset
|
377 if not s: |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
378 return '' |
22522
382c2be610dc
mq: simplify patchheader handling of the empty line before the diff
Mads Kiilerich <madski@unity3d.com>
parents:
22521
diff
changeset
|
379 return s + '\n\n' |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
380 |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
381 def _delmsg(self): |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
382 '''Remove existing message, keeping the rest of the comments fields. |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
383 If comments contains 'subject: ', message will prepend |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
384 the field and a blank line.''' |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
385 if self.message: |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
386 subj = 'subject: ' + self.message[0].lower() |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
387 for i in xrange(len(self.comments)): |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
388 if subj == self.comments[i].lower(): |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
389 del self.comments[i] |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
390 self.message = self.message[2:] |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
391 break |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
392 ci = 0 |
8632
9e055cfdd620
replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
393 for mi in self.message: |
9e055cfdd620
replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
394 while mi != self.comments[ci]: |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
395 ci += 1 |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
396 del self.comments[ci] |
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
397 |
16102 | 398 def newcommit(repo, phase, *args, **kwargs): |
16057
db4b0532dbf2
mq: rename secretcommit to newcommit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16048
diff
changeset
|
399 """helper dedicated to ensure a commit respect mq.secret setting |
db4b0532dbf2
mq: rename secretcommit to newcommit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16048
diff
changeset
|
400 |
db4b0532dbf2
mq: rename secretcommit to newcommit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16048
diff
changeset
|
401 It should be used instead of repo.commit inside the mq source for operation |
db4b0532dbf2
mq: rename secretcommit to newcommit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16048
diff
changeset
|
402 creating new changeset. |
15926
f94513971767
mq: have mq create secret changeset only
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15924
diff
changeset
|
403 """ |
18010
38b51a60a195
clfilter: ensure that mq performs commits on unfiltered repos
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17954
diff
changeset
|
404 repo = repo.unfiltered() |
16100
24df9338aa01
mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents:
16064
diff
changeset
|
405 if phase is None: |
24df9338aa01
mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents:
16064
diff
changeset
|
406 if repo.ui.configbool('mq', 'secret', False): |
24df9338aa01
mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents:
16064
diff
changeset
|
407 phase = phases.secret |
31460 | 408 overrides = {('ui', 'allowemptycommit'): True} |
16100
24df9338aa01
mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents:
16064
diff
changeset
|
409 if phase is not None: |
31460 | 410 overrides[('phases', 'new-commit')] = phase |
411 with repo.ui.configoverride(overrides, 'mq'): | |
25019
672e0558aed1
mq: use ui.allowemptycommit to allow empty commits
Durham Goode <durham@fb.com>
parents:
24997
diff
changeset
|
412 repo.ui.setconfig('ui', 'allowemptycommit', True) |
15926
f94513971767
mq: have mq create secret changeset only
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15924
diff
changeset
|
413 return repo.commit(*args, **kwargs) |
f94513971767
mq: have mq create secret changeset only
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15924
diff
changeset
|
414 |
16654
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
415 class AbortNoCleanup(error.Abort): |
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
416 pass |
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
417 |
8778
c5f36402daad
use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8761
diff
changeset
|
418 class queue(object): |
19064
743daa601445
mq: do not inherit settings form base repo in mqrepo (Fixes issue2358)
Simon Heimberg <simohe@besonet.ch>
parents:
18958
diff
changeset
|
419 def __init__(self, ui, baseui, path, patchdir=None): |
1808 | 420 self.basepath = path |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
421 try: |
11270
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
422 fh = open(os.path.join(path, 'patches.queue')) |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
423 cur = fh.read().rstrip() |
13400
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13373
diff
changeset
|
424 fh.close() |
11270
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
425 if not cur: |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
426 curpath = os.path.join(path, 'patches') |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
427 else: |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
428 curpath = os.path.join(path, 'patches-' + cur) |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
429 except IOError: |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
430 curpath = os.path.join(path, 'patches') |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
431 self.path = patchdir or curpath |
31243
816bc3b35bac
vfs: use 'vfs' module directly in 'hgext.mq'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31216
diff
changeset
|
432 self.opener = vfsmod.vfs(self.path) |
1808 | 433 self.ui = ui |
19064
743daa601445
mq: do not inherit settings form base repo in mqrepo (Fixes issue2358)
Simon Heimberg <simohe@besonet.ch>
parents:
18958
diff
changeset
|
434 self.baseui = baseui |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
435 self.applieddirty = False |
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
436 self.seriesdirty = False |
11462
1b82a26635d7
mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents:
11439
diff
changeset
|
437 self.added = [] |
14587
5d3bb4460256
mq: rename series_path to seriespath
Adrian Buehlmann <adrian@cadifra.com>
parents:
14586
diff
changeset
|
438 self.seriespath = "series" |
14588
bd3d75a03f80
mq: rename status_path to statuspath
Adrian Buehlmann <adrian@cadifra.com>
parents:
14587
diff
changeset
|
439 self.statuspath = "status" |
14589
7d59ee9e711b
mq: rename guards_path to guardspath
Adrian Buehlmann <adrian@cadifra.com>
parents:
14588
diff
changeset
|
440 self.guardspath = "guards" |
14590
dbb80f03d4ae
mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14589
diff
changeset
|
441 self.activeguards = None |
14591
b49099712d30
mq: rename guards_dirty to guardsdirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14590
diff
changeset
|
442 self.guardsdirty = False |
10190
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
443 # Handle mq.git as a bool with extended values |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
444 try: |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
445 gitmode = ui.configbool('mq', 'git', None) |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
446 if gitmode is None: |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
447 raise error.ConfigError |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
448 if gitmode: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
449 self.gitmode = 'yes' |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
450 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
451 self.gitmode = 'no' |
10190
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
452 except error.ConfigError: |
25827
0fdf2c304019
mq: tweak config reading to make check-config happy
Matt Mackall <mpm@selenic.com>
parents:
25660
diff
changeset
|
453 # let's have check-config ignore the type mismatch |
0fdf2c304019
mq: tweak config reading to make check-config happy
Matt Mackall <mpm@selenic.com>
parents:
25660
diff
changeset
|
454 self.gitmode = ui.config(r'mq', 'git', 'auto').lower() |
0fdf2c304019
mq: tweak config reading to make check-config happy
Matt Mackall <mpm@selenic.com>
parents:
25660
diff
changeset
|
455 # deprecated config: mq.plain |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
456 self.plainmode = ui.configbool('mq', 'plain', False) |
19856
28b1b7b9b4a9
shelve: allow shelving of a change with an mq patch applied
David Soria Parra <dsp@experimentalworks.net>
parents:
19826
diff
changeset
|
457 self.checkapplied = True |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
458 |
8524
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
459 @util.propertycache |
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
460 def applied(self): |
15258
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
461 def parselines(lines): |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
462 for l in lines: |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
463 entry = l.split(':', 1) |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
464 if len(entry) > 1: |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
465 n, name = entry |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
466 yield statusentry(bin(n), name) |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
467 elif l.strip(): |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
468 self.ui.warn(_('malformated mq status line: %s\n') % entry) |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
469 # else we ignore empty lines |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
470 try: |
14588
bd3d75a03f80
mq: rename status_path to statuspath
Adrian Buehlmann <adrian@cadifra.com>
parents:
14587
diff
changeset
|
471 lines = self.opener.read(self.statuspath).splitlines() |
13507
375ba42f3cda
mq: gracefully handle malformated status file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
13409
diff
changeset
|
472 return list(parselines(lines)) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25469
diff
changeset
|
473 except IOError as e: |
15258
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
474 if e.errno == errno.ENOENT: |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
475 return [] |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
476 raise |
8524
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
477 |
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
478 @util.propertycache |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
479 def fullseries(self): |
15258
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
480 try: |
15878 | 481 return self.opener.read(self.seriespath).splitlines() |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25469
diff
changeset
|
482 except IOError as e: |
15258
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
483 if e.errno == errno.ENOENT: |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
484 return [] |
fe9677449331
mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents:
15257
diff
changeset
|
485 raise |
8524
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
486 |
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
487 @util.propertycache |
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
488 def series(self): |
14575
845c864200d0
mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14574
diff
changeset
|
489 self.parseseries() |
8524
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
490 return self.series |
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
491 |
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
492 @util.propertycache |
14573
d590ff1f22b2
mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14572
diff
changeset
|
493 def seriesguards(self): |
14575
845c864200d0
mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14574
diff
changeset
|
494 self.parseseries() |
14573
d590ff1f22b2
mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14572
diff
changeset
|
495 return self.seriesguards |
1808 | 496 |
8525
b169ba60eebe
mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents:
8524
diff
changeset
|
497 def invalidate(self): |
14573
d590ff1f22b2
mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14572
diff
changeset
|
498 for a in 'applied fullseries series seriesguards'.split(): |
8525
b169ba60eebe
mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents:
8524
diff
changeset
|
499 if a in self.__dict__: |
b169ba60eebe
mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents:
8524
diff
changeset
|
500 delattr(self, a) |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
501 self.applieddirty = False |
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
502 self.seriesdirty = False |
14591
b49099712d30
mq: rename guards_dirty to guardsdirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14590
diff
changeset
|
503 self.guardsdirty = False |
14590
dbb80f03d4ae
mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14589
diff
changeset
|
504 self.activeguards = None |
8525
b169ba60eebe
mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents:
8524
diff
changeset
|
505 |
26345
2aa0dde846b4
mq: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26098
diff
changeset
|
506 def diffopts(self, opts=None, patchfn=None): |
14241
45f7aa35f2fd
mq: don't hide the patch module
Idan Kamara <idankk86@gmail.com>
parents:
14239
diff
changeset
|
507 diffopts = patchmod.diffopts(self.ui, opts) |
10190
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
508 if self.gitmode == 'auto': |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
509 diffopts.upgrade = True |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
510 elif self.gitmode == 'keep': |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
511 pass |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
512 elif self.gitmode in ('yes', 'no'): |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
513 diffopts.git = self.gitmode == 'yes' |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
514 else: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
515 raise error.Abort(_('mq.git option can be auto/keep/yes/no' |
10190
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
516 ' got %s') % self.gitmode) |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
517 if patchfn: |
10185
7637fe4f525d
mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents:
10184
diff
changeset
|
518 diffopts = self.patchopts(diffopts, patchfn) |
7637fe4f525d
mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents:
10184
diff
changeset
|
519 return diffopts |
7637fe4f525d
mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents:
10184
diff
changeset
|
520 |
10186
296a0b14a686
mq: preserve --git flag when folding patches
Patrick Mezard <pmezard@gmail.com>
parents:
10185
diff
changeset
|
521 def patchopts(self, diffopts, *patches): |
10185
7637fe4f525d
mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents:
10184
diff
changeset
|
522 """Return a copy of input diff options with git set to true if |
10190
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
523 referenced patch is a git patch and should be preserved as such. |
10185
7637fe4f525d
mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents:
10184
diff
changeset
|
524 """ |
7637fe4f525d
mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents:
10184
diff
changeset
|
525 diffopts = diffopts.copy() |
10190
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
526 if not diffopts.git and self.gitmode == 'keep': |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
527 for patchfn in patches: |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
528 patchf = self.opener(patchfn, 'r') |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
529 # if the patch was a git patch, refresh it as a git patch |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
530 for line in patchf: |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
531 if line.startswith('diff --git'): |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
532 diffopts.git = True |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
533 break |
9c2c94934f0d
mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents:
10188
diff
changeset
|
534 patchf.close() |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
535 return diffopts |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2873
diff
changeset
|
536 |
2819 | 537 def join(self, *p): |
538 return os.path.join(self.path, *p) | |
539 | |
14574
12fba7bcb4f1
mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14573
diff
changeset
|
540 def findseries(self, patch): |
10685
10248fc845db
mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10684
diff
changeset
|
541 def matchpatch(l): |
10248fc845db
mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10684
diff
changeset
|
542 l = l.split('#', 1)[0] |
10248fc845db
mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10684
diff
changeset
|
543 return l.strip() == patch |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
544 for index, l in enumerate(self.fullseries): |
10685
10248fc845db
mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10684
diff
changeset
|
545 if matchpatch(l): |
10248fc845db
mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10684
diff
changeset
|
546 return index |
1808 | 547 return None |
548 | |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
549 guard_re = re.compile(r'\s?#([-+][^-+# \t\r\n\f][^# \t\r\n\f]*)') |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
550 |
14575
845c864200d0
mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14574
diff
changeset
|
551 def parseseries(self): |
1808 | 552 self.series = [] |
14573
d590ff1f22b2
mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14572
diff
changeset
|
553 self.seriesguards = [] |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
554 for l in self.fullseries: |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
555 h = l.find('#') |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
556 if h == -1: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
557 patch = l |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
558 comment = '' |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
559 elif h == 0: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
560 continue |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
561 else: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
562 patch = l[:h] |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
563 comment = l[h:] |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
564 patch = patch.strip() |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
565 if patch: |
3184
87b7ae306d54
mq: bail out if a patch appears more than once in the series file.
Brendan Cully <brendan@kublai.com>
parents:
3183
diff
changeset
|
566 if patch in self.series: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
567 raise error.Abort(_('%s appears more than once in %s') % |
14587
5d3bb4460256
mq: rename series_path to seriespath
Adrian Buehlmann <adrian@cadifra.com>
parents:
14586
diff
changeset
|
568 (patch, self.join(self.seriespath))) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
569 self.series.append(patch) |
14573
d590ff1f22b2
mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14572
diff
changeset
|
570 self.seriesguards.append(self.guard_re.findall(comment)) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
571 |
14576
668ea374f46e
mq: rename check_guard to checkguard
Adrian Buehlmann <adrian@cadifra.com>
parents:
14575
diff
changeset
|
572 def checkguard(self, guard): |
6607
75b506f0e571
mq: make qselect fail properly on an empty guard
Patrick Mezard <pmezard@gmail.com>
parents:
6606
diff
changeset
|
573 if not guard: |
75b506f0e571
mq: make qselect fail properly on an empty guard
Patrick Mezard <pmezard@gmail.com>
parents:
6606
diff
changeset
|
574 return _('guard cannot be an empty string') |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
575 bad_chars = '# \t\r\n\f' |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
576 first = guard[0] |
8288
9de088320e9a
mq: simpler check of first character of guard name
Simon Heimberg <simohe@besonet.ch>
parents:
8225
diff
changeset
|
577 if first in '-+': |
9de088320e9a
mq: simpler check of first character of guard name
Simon Heimberg <simohe@besonet.ch>
parents:
8225
diff
changeset
|
578 return (_('guard %r starts with invalid character: %r') % |
9de088320e9a
mq: simpler check of first character of guard name
Simon Heimberg <simohe@besonet.ch>
parents:
8225
diff
changeset
|
579 (guard, first)) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
580 for c in bad_chars: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
581 if c in guard: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
582 return _('invalid character in guard %r: %r') % (guard, c) |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3186
diff
changeset
|
583 |
14578
28a2646f3b81
mq: rename set_active to setactive
Adrian Buehlmann <adrian@cadifra.com>
parents:
14577
diff
changeset
|
584 def setactive(self, guards): |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
585 for guard in guards: |
14576
668ea374f46e
mq: rename check_guard to checkguard
Adrian Buehlmann <adrian@cadifra.com>
parents:
14575
diff
changeset
|
586 bad = self.checkguard(guard) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
587 if bad: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
588 raise error.Abort(bad) |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8188
diff
changeset
|
589 guards = sorted(set(guards)) |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9440
diff
changeset
|
590 self.ui.debug('active guards: %s\n' % ' '.join(guards)) |
14590
dbb80f03d4ae
mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14589
diff
changeset
|
591 self.activeguards = guards |
14591
b49099712d30
mq: rename guards_dirty to guardsdirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14590
diff
changeset
|
592 self.guardsdirty = True |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
593 |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
594 def active(self): |
14590
dbb80f03d4ae
mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14589
diff
changeset
|
595 if self.activeguards is None: |
dbb80f03d4ae
mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14589
diff
changeset
|
596 self.activeguards = [] |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
597 try: |
14589
7d59ee9e711b
mq: rename guards_path to guardspath
Adrian Buehlmann <adrian@cadifra.com>
parents:
14588
diff
changeset
|
598 guards = self.opener.read(self.guardspath).split() |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25469
diff
changeset
|
599 except IOError as err: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
600 if err.errno != errno.ENOENT: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
601 raise |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
602 guards = [] |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
603 for i, guard in enumerate(guards): |
14576
668ea374f46e
mq: rename check_guard to checkguard
Adrian Buehlmann <adrian@cadifra.com>
parents:
14575
diff
changeset
|
604 bad = self.checkguard(guard) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
605 if bad: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
606 self.ui.warn('%s:%d: %s\n' % |
14589
7d59ee9e711b
mq: rename guards_path to guardspath
Adrian Buehlmann <adrian@cadifra.com>
parents:
14588
diff
changeset
|
607 (self.join(self.guardspath), i + 1, bad)) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
608 else: |
14590
dbb80f03d4ae
mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14589
diff
changeset
|
609 self.activeguards.append(guard) |
dbb80f03d4ae
mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14589
diff
changeset
|
610 return self.activeguards |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
611 |
14577
76357276662e
mq: rename set_guards to setguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14576
diff
changeset
|
612 def setguards(self, idx, guards): |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
613 for g in guards: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
614 if len(g) < 2: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
615 raise error.Abort(_('guard %r too short') % g) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
616 if g[0] not in '-+': |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
617 raise error.Abort(_('guard %r starts with invalid char') % g) |
14576
668ea374f46e
mq: rename check_guard to checkguard
Adrian Buehlmann <adrian@cadifra.com>
parents:
14575
diff
changeset
|
618 bad = self.checkguard(g[1:]) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
619 if bad: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
620 raise error.Abort(bad) |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
621 drop = self.guard_re.sub('', self.fullseries[idx]) |
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
622 self.fullseries[idx] = drop + ''.join([' #' + g for g in guards]) |
14575
845c864200d0
mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14574
diff
changeset
|
623 self.parseseries() |
14593
599a72895c0d
mq: rename series_dirty to seriesdirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14592
diff
changeset
|
624 self.seriesdirty = True |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3186
diff
changeset
|
625 |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
626 def pushable(self, idx): |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
627 if isinstance(idx, str): |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
628 idx = self.series.index(idx) |
14573
d590ff1f22b2
mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14572
diff
changeset
|
629 patchguards = self.seriesguards[idx] |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
630 if not patchguards: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
631 return True, None |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
632 guards = self.active() |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
633 exactneg = [g for g in patchguards if g[0] == '-' and g[1:] in guards] |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
634 if exactneg: |
14464
00256f689f9c
mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents:
14448
diff
changeset
|
635 return False, repr(exactneg[0]) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
636 pos = [g for g in patchguards if g[0] == '+'] |
2850
851b07ec450c
mq: apply patch is any posative guard matches
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2848
diff
changeset
|
637 exactpos = [g for g in pos if g[1:] in guards] |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
638 if pos: |
2850
851b07ec450c
mq: apply patch is any posative guard matches
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2848
diff
changeset
|
639 if exactpos: |
14464
00256f689f9c
mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents:
14448
diff
changeset
|
640 return True, repr(exactpos[0]) |
00256f689f9c
mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents:
14448
diff
changeset
|
641 return False, ' '.join(map(repr, pos)) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
642 return True, '' |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
643 |
14579
f7b25764d974
mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents:
14578
diff
changeset
|
644 def explainpushable(self, idx, all_patches=False): |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
645 if all_patches: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
646 write = self.ui.write |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
647 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
648 write = self.ui.warn |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
649 |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
650 if all_patches or self.ui.verbose: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
651 if isinstance(idx, str): |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
652 idx = self.series.index(idx) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
653 pushable, why = self.pushable(idx) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
654 if all_patches and pushable: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
655 if why is None: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
656 write(_('allowing %s - no guards in effect\n') % |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
657 self.series[idx]) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
658 else: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
659 if not why: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
660 write(_('allowing %s - no matching negative guards\n') % |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
661 self.series[idx]) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
662 else: |
14464
00256f689f9c
mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents:
14448
diff
changeset
|
663 write(_('allowing %s - guarded by %s\n') % |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
664 (self.series[idx], why)) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
665 if not pushable: |
2829
05316bb57d01
mq: make guards more strict, add tests
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2828
diff
changeset
|
666 if why: |
14464
00256f689f9c
mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents:
14448
diff
changeset
|
667 write(_('skipping %s - guarded by %s\n') % |
3870
22d18051f9e5
mq: fix explain_pushable for negative guards
Brendan Cully <brendan@kublai.com>
parents:
3857
diff
changeset
|
668 (self.series[idx], why)) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
669 else: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
670 write(_('skipping %s - no matching guards\n') % |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
671 self.series[idx]) |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
672 |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
673 def savedirty(self): |
14594
3752b5e1f4c4
mq: rename write_list to writelist
Adrian Buehlmann <adrian@cadifra.com>
parents:
14593
diff
changeset
|
674 def writelist(items, path): |
2772
4720e79486d3
mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2771
diff
changeset
|
675 fp = self.opener(path, 'w') |
4720e79486d3
mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2771
diff
changeset
|
676 for i in items: |
5878
d39af2eabb8c
transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents:
5788
diff
changeset
|
677 fp.write("%s\n" % i) |
2772
4720e79486d3
mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2771
diff
changeset
|
678 fp.close() |
14592
fc94add69d9f
mq: rename applied_dirty to applieddirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14591
diff
changeset
|
679 if self.applieddirty: |
14594
3752b5e1f4c4
mq: rename write_list to writelist
Adrian Buehlmann <adrian@cadifra.com>
parents:
14593
diff
changeset
|
680 writelist(map(str, self.applied), self.statuspath) |
15883
91d99f02b26f
mq: only save dirty files once when savedirty is called multiple times
Mads Kiilerich <mads@kiilerich.com>
parents:
15882
diff
changeset
|
681 self.applieddirty = False |
14593
599a72895c0d
mq: rename series_dirty to seriesdirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14592
diff
changeset
|
682 if self.seriesdirty: |
14594
3752b5e1f4c4
mq: rename write_list to writelist
Adrian Buehlmann <adrian@cadifra.com>
parents:
14593
diff
changeset
|
683 writelist(self.fullseries, self.seriespath) |
15883
91d99f02b26f
mq: only save dirty files once when savedirty is called multiple times
Mads Kiilerich <mads@kiilerich.com>
parents:
15882
diff
changeset
|
684 self.seriesdirty = False |
14591
b49099712d30
mq: rename guards_dirty to guardsdirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14590
diff
changeset
|
685 if self.guardsdirty: |
14594
3752b5e1f4c4
mq: rename write_list to writelist
Adrian Buehlmann <adrian@cadifra.com>
parents:
14593
diff
changeset
|
686 writelist(self.activeguards, self.guardspath) |
15883
91d99f02b26f
mq: only save dirty files once when savedirty is called multiple times
Mads Kiilerich <mads@kiilerich.com>
parents:
15882
diff
changeset
|
687 self.guardsdirty = False |
11546
134eb1c97e94
mq: qrepo.add(mq.added) inside save_dirty inside of doing it manually
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11530
diff
changeset
|
688 if self.added: |
134eb1c97e94
mq: qrepo.add(mq.added) inside save_dirty inside of doing it manually
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11530
diff
changeset
|
689 qrepo = self.qrepo() |
134eb1c97e94
mq: qrepo.add(mq.added) inside save_dirty inside of doing it manually
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11530
diff
changeset
|
690 if qrepo: |
12658
97d7ee445e98
mq: silence spurious output.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12655
diff
changeset
|
691 qrepo[None].add(f for f in self.added if f not in qrepo[None]) |
11546
134eb1c97e94
mq: qrepo.add(mq.added) inside save_dirty inside of doing it manually
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11530
diff
changeset
|
692 self.added = [] |
1808 | 693 |
4207
b7e66db28571
Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents:
4206
diff
changeset
|
694 def removeundo(self, repo): |
b7e66db28571
Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents:
4206
diff
changeset
|
695 undo = repo.sjoin('undo') |
b7e66db28571
Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents:
4206
diff
changeset
|
696 if not os.path.exists(undo): |
b7e66db28571
Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents:
4206
diff
changeset
|
697 return |
b7e66db28571
Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents:
4206
diff
changeset
|
698 try: |
b7e66db28571
Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents:
4206
diff
changeset
|
699 os.unlink(undo) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25469
diff
changeset
|
700 except OSError as inst: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
701 self.ui.warn(_('error removing undo: %s\n') % str(inst)) |
4207
b7e66db28571
Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents:
4206
diff
changeset
|
702 |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
703 def backup(self, repo, files, copy=False): |
16633
b2ca2f40c9c1
mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents:
16551
diff
changeset
|
704 # backup local changes in --force case |
b2ca2f40c9c1
mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents:
16551
diff
changeset
|
705 for f in sorted(files): |
b2ca2f40c9c1
mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents:
16551
diff
changeset
|
706 absf = repo.wjoin(f) |
b2ca2f40c9c1
mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents:
16551
diff
changeset
|
707 if os.path.lexists(absf): |
b2ca2f40c9c1
mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents:
16551
diff
changeset
|
708 self.ui.note(_('saving current version of %s as %s\n') % |
27651
07fc2f2134ba
origpath: move from cmdutil to scmutil
Siddharth Agarwal <sid0@fb.com>
parents:
27586
diff
changeset
|
709 (f, scmutil.origpath(self.ui, repo, f))) |
07fc2f2134ba
origpath: move from cmdutil to scmutil
Siddharth Agarwal <sid0@fb.com>
parents:
27586
diff
changeset
|
710 |
07fc2f2134ba
origpath: move from cmdutil to scmutil
Siddharth Agarwal <sid0@fb.com>
parents:
27586
diff
changeset
|
711 absorig = scmutil.origpath(self.ui, repo, absf) |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
712 if copy: |
26943
263edb591b72
mq: let the user choose where .orig files are kept
Christian Delahousse <cdelahousse@fb.com>
parents:
26831
diff
changeset
|
713 util.copyfile(absf, absorig) |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
714 else: |
26943
263edb591b72
mq: let the user choose where .orig files are kept
Christian Delahousse <cdelahousse@fb.com>
parents:
26831
diff
changeset
|
715 util.rename(absf, absorig) |
16633
b2ca2f40c9c1
mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents:
16551
diff
changeset
|
716 |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
717 def printdiff(self, repo, diffopts, node1, node2=None, files=None, |
31394
fd3d8eb7f545
mq: don't use mutable default argument value
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31333
diff
changeset
|
718 fp=None, changes=None, opts=None): |
31432
6e1c79578e5c
mq: explicitly tests for None
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31407
diff
changeset
|
719 if opts is None: |
6e1c79578e5c
mq: explicitly tests for None
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31407
diff
changeset
|
720 opts = {} |
9640
9e76232fbfbe
diff: add --stat for diffstat output
Brodie Rao <me+hg@dackz.net>
parents:
9599
diff
changeset
|
721 stat = opts.get('stat') |
14671
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14636
diff
changeset
|
722 m = scmutil.match(repo[node1], files, opts) |
11050
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11049
diff
changeset
|
723 cmdutil.diffordiffstat(self.ui, repo, diffopts, node1, node2, m, |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11049
diff
changeset
|
724 changes, stat, fp) |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2873
diff
changeset
|
725 |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
726 def mergeone(self, repo, mergeq, head, patch, rev, diffopts): |
1808 | 727 # first try just applying the patch |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
728 (err, n) = self.apply(repo, [patch], update_status=False, |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
729 strict=True, merge=rev) |
1808 | 730 |
731 if err == 0: | |
732 return (err, n) | |
733 | |
734 if n is None: | |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
735 raise error.Abort(_("apply failed for patch %s") % patch) |
1808 | 736 |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
737 self.ui.warn(_("patch didn't work out, merging %s\n") % patch) |
1808 | 738 |
739 # apply failed, strip away that rev and merge. | |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
740 hg.clean(repo, head) |
22057
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22049
diff
changeset
|
741 strip(self.ui, repo, [n], update=False, backup=False) |
1808 | 742 |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6668
diff
changeset
|
743 ctx = repo[rev] |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
744 ret = hg.merge(repo, rev) |
1808 | 745 if ret: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
746 raise error.Abort(_("update returned %d") % ret) |
16102 | 747 n = newcommit(repo, None, ctx.description(), ctx.user(), force=True) |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8525
diff
changeset
|
748 if n is None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
749 raise error.Abort(_("repo commit failed")) |
1808 | 750 try: |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
751 ph = patchheader(mergeq.join(patch), self.plainmode) |
16689
f366d4c2ff34
cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents:
16688
diff
changeset
|
752 except Exception: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
753 raise error.Abort(_("unable to read %s") % patch) |
1808 | 754 |
10185
7637fe4f525d
mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents:
10184
diff
changeset
|
755 diffopts = self.patchopts(diffopts, patch) |
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
|
756 patchf = self.opener(patch, "w") |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
757 comments = str(ph) |
1808 | 758 if comments: |
759 patchf.write(comments) | |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
760 self.printdiff(repo, diffopts, head, n, fp=patchf) |
1808 | 761 patchf.close() |
4207
b7e66db28571
Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents:
4206
diff
changeset
|
762 self.removeundo(repo) |
1808 | 763 return (0, n) |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
764 |
1808 | 765 def qparents(self, repo, rev=None): |
19816
d5ec50e8604b
mq: document repo.mq.qparents
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19815
diff
changeset
|
766 """return the mq handled parent or p1 |
d5ec50e8604b
mq: document repo.mq.qparents
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19815
diff
changeset
|
767 |
d5ec50e8604b
mq: document repo.mq.qparents
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19815
diff
changeset
|
768 In some case where mq get himself in being the parent of a merge the |
19951
d51c4d85ec23
spelling: random spell checker fixes
Mads Kiilerich <madski@unity3d.com>
parents:
19916
diff
changeset
|
769 appropriate parent may be p2. |
19816
d5ec50e8604b
mq: document repo.mq.qparents
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19815
diff
changeset
|
770 (eg: an in progress merge started with mq disabled) |
d5ec50e8604b
mq: document repo.mq.qparents
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19815
diff
changeset
|
771 |
d5ec50e8604b
mq: document repo.mq.qparents
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19815
diff
changeset
|
772 If no parent are managed by mq, p1 is returned. |
d5ec50e8604b
mq: document repo.mq.qparents
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19815
diff
changeset
|
773 """ |
1808 | 774 if rev is None: |
775 (p1, p2) = repo.dirstate.parents() | |
7639
ae7a614a6a57
mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
776 if p2 == nullid: |
1808 | 777 return p1 |
10686
0c68c2c36ed8
mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10685
diff
changeset
|
778 if not self.applied: |
1808 | 779 return None |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
780 return self.applied[-1].node |
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
781 p1, p2 = repo.changelog.parents(rev) |
10680
45eb9b5dacf6
mq: simplify qparents calculation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10679
diff
changeset
|
782 if p2 != nullid and p2 in [x.node for x in self.applied]: |
45eb9b5dacf6
mq: simplify qparents calculation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10679
diff
changeset
|
783 return p2 |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
784 return p1 |
1808 | 785 |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
786 def mergepatch(self, repo, mergeq, series, diffopts): |
10686
0c68c2c36ed8
mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10685
diff
changeset
|
787 if not self.applied: |
1808 | 788 # each of the patches merged in will have two parents. This |
789 # can confuse the qrefresh, qdiff, and strip code because it | |
790 # needs to know which parent is actually in the patch queue. | |
791 # so, we insert a merge marker with only one parent. This way | |
792 # the first patch in the queue is never a merge patch | |
793 # | |
794 pname = ".hg.patches.merge.marker" | |
16102 | 795 n = newcommit(repo, None, '[mq]: merge marker', force=True) |
4207
b7e66db28571
Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents:
4206
diff
changeset
|
796 self.removeundo(repo) |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
797 self.applied.append(statusentry(n, pname)) |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
798 self.applieddirty = True |
1808 | 799 |
800 head = self.qparents(repo) | |
801 | |
802 for patch in series: | |
2696 | 803 patch = mergeq.lookup(patch, strict=True) |
1808 | 804 if not patch: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
805 self.ui.warn(_("patch %s does not exist\n") % patch) |
1808 | 806 return (1, None) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
807 pushable, reason = self.pushable(patch) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
808 if not pushable: |
14579
f7b25764d974
mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents:
14578
diff
changeset
|
809 self.explainpushable(patch, all_patches=True) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
810 continue |
1808 | 811 info = mergeq.isapplied(patch) |
812 if not info: | |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
813 self.ui.warn(_("patch %s is not applied\n") % patch) |
1808 | 814 return (1, None) |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
815 rev = info[1] |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
816 err, head = self.mergeone(repo, mergeq, head, patch, rev, diffopts) |
1808 | 817 if head: |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
818 self.applied.append(statusentry(head, patch)) |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
819 self.applieddirty = True |
1808 | 820 if err: |
821 return (err, head) | |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
822 self.savedirty() |
1808 | 823 return (0, head) |
824 | |
2748
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
825 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
|
826 '''Apply patchfile to the working directory. |
8761
0289f384e1e5
Generally replace "file name" with "filename" in help and comments.
timeless <timeless@gmail.com>
parents:
8760
diff
changeset
|
827 patchfile: name of patch file''' |
14564
65f4512e40e4
patch: turn patch() touched files dict into a set
Patrick Mezard <pmezard@gmail.com>
parents:
14553
diff
changeset
|
828 files = set() |
2748
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
829 try: |
14260
00a881581400
patch: make patch()/internalpatch() always update the dirstate
Patrick Mezard <pmezard@gmail.com>
parents:
14259
diff
changeset
|
830 fuzz = patchmod.patch(self.ui, repo, patchfile, strip=1, |
14382
2d16f15da7bd
patch: remove patch.patch() cwd argument
Patrick Mezard <pmezard@gmail.com>
parents:
14351
diff
changeset
|
831 files=files, eolmode=None) |
14260
00a881581400
patch: make patch()/internalpatch() always update the dirstate
Patrick Mezard <pmezard@gmail.com>
parents:
14259
diff
changeset
|
832 return (True, list(files), fuzz) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25469
diff
changeset
|
833 except Exception as inst: |
2919
b70740aefa4d
Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents:
2905
diff
changeset
|
834 self.ui.note(str(inst) + '\n') |
b70740aefa4d
Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents:
2905
diff
changeset
|
835 if not self.ui.verbose: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
836 self.ui.warn(_("patch failed, unable to continue (try -v)\n")) |
15085
110d6804bfc6
mq: don't suppress patch tracebacks when applying patches
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
15057
diff
changeset
|
837 self.ui.traceback() |
14260
00a881581400
patch: make patch()/internalpatch() always update the dirstate
Patrick Mezard <pmezard@gmail.com>
parents:
14259
diff
changeset
|
838 return (False, list(files), False) |
2796
4c39568007f9
mq: codingstyle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2795
diff
changeset
|
839 |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
840 def apply(self, repo, series, list=False, update_status=True, |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
841 strict=False, patchdir=None, merge=None, all_files=None, |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
842 tobackup=None, keepchanges=False): |
26578
8bd2759f1fa7
dirstate: remove meaningless dirstateguard
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26345
diff
changeset
|
843 wlock = lock = tr = None |
4418
0532491f7476
MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4406
diff
changeset
|
844 try: |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
845 wlock = repo.wlock() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
846 lock = repo.lock() |
10881
a685011ed38e
localrepo: add desc parameter to transaction
Steve Borho <steve@borho.org>
parents:
10873
diff
changeset
|
847 tr = repo.transaction("qpush") |
4418
0532491f7476
MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4406
diff
changeset
|
848 try: |
4970
30d4d8985dd8
transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents:
4917
diff
changeset
|
849 ret = self._apply(repo, series, list, update_status, |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
850 strict, patchdir, merge, all_files=all_files, |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
851 tobackup=tobackup, keepchanges=keepchanges) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
852 tr.close() |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
853 self.savedirty() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
854 return ret |
16654
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
855 except AbortNoCleanup: |
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
856 tr.close() |
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
857 self.savedirty() |
24826
9b02b678888e
mq: avoid silent failure when single patch doesn't apply (issue4604)
Matt Mackall <mpm@selenic.com>
parents:
24365
diff
changeset
|
858 raise |
16705
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16699
diff
changeset
|
859 except: # re-raises |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
860 try: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
861 tr.abort() |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
862 finally: |
15881
3862369cf9b9
mq: use .invalidate to cancel dirty mq state when cancelling transaction
Mads Kiilerich <mads@kiilerich.com>
parents:
15880
diff
changeset
|
863 self.invalidate() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
864 raise |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
865 finally: |
26578
8bd2759f1fa7
dirstate: remove meaningless dirstateguard
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26345
diff
changeset
|
866 release(tr, lock, wlock) |
5527
0b3f910dfd17
mq: really remove undo after a qpush (and after a strip)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5432
diff
changeset
|
867 self.removeundo(repo) |
4418
0532491f7476
MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4406
diff
changeset
|
868 |
4970
30d4d8985dd8
transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents:
4917
diff
changeset
|
869 def _apply(self, repo, series, list=False, update_status=True, |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
870 strict=False, patchdir=None, merge=None, all_files=None, |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
871 tobackup=None, keepchanges=False): |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
872 """returns (error, hash) |
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
873 |
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
874 error = 1 for unable to read, 2 for patch failed, 3 for patch |
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
875 fuzz. tobackup is None or a set of files to backup before they |
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
876 are modified by a patch. |
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
877 """ |
1808 | 878 # TODO unify with commands.py |
879 if not patchdir: | |
880 patchdir = self.path | |
881 err = 0 | |
882 n = None | |
2934
2f190e998eb3
Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents:
2922
diff
changeset
|
883 for patchname in series: |
2f190e998eb3
Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents:
2922
diff
changeset
|
884 pushable, reason = self.pushable(patchname) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
885 if not pushable: |
14579
f7b25764d974
mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents:
14578
diff
changeset
|
886 self.explainpushable(patchname, all_patches=True) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
887 continue |
9111
ac3f1e6696eb
mq: use ui.status when pushing and popping patches
Martin Geisler <mg@lazybytes.net>
parents:
9110
diff
changeset
|
888 self.ui.status(_("applying %s\n") % patchname) |
2934
2f190e998eb3
Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents:
2922
diff
changeset
|
889 pf = os.path.join(patchdir, patchname) |
1808 | 890 |
891 try: | |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
892 ph = patchheader(self.join(patchname), self.plainmode) |
14239
967be4bb42a7
mq: loosen except clause when reading patch headers
Idan Kamara <idankk86@gmail.com>
parents:
14210
diff
changeset
|
893 except IOError: |
8875
801cacf46e62
mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8833
diff
changeset
|
894 self.ui.warn(_("unable to read %s\n") % patchname) |
1808 | 895 err = 1 |
896 break | |
897 | |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
898 message = ph.message |
1808 | 899 if not message: |
12849
d966eb464888
mq: mark strings that should not be translated
Martin Geisler <mg@lazybytes.net>
parents:
12848
diff
changeset
|
900 # The commit message should not be translated |
10274
04207f5e7344
mq: Do not translate import message that are appended to commits.
David Soria Parra <dsp@php.net>
parents:
10263
diff
changeset
|
901 message = "imported patch %s\n" % patchname |
1808 | 902 else: |
903 if list: | |
12849
d966eb464888
mq: mark strings that should not be translated
Martin Geisler <mg@lazybytes.net>
parents:
12848
diff
changeset
|
904 # The commit message should not be translated |
10274
04207f5e7344
mq: Do not translate import message that are appended to commits.
David Soria Parra <dsp@php.net>
parents:
10263
diff
changeset
|
905 message.append("\nimported patch %s" % patchname) |
1808 | 906 message = '\n'.join(message) |
907 | |
7782
140429276b63
mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents:
7772
diff
changeset
|
908 if ph.haspatch: |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
909 if tobackup: |
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
910 touched = patchmod.changedfiles(self.ui, repo, pf) |
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
911 touched = set(touched) & tobackup |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
912 if touched and keepchanges: |
16654
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
913 raise AbortNoCleanup( |
24826
9b02b678888e
mq: avoid silent failure when single patch doesn't apply (issue4604)
Matt Mackall <mpm@selenic.com>
parents:
24365
diff
changeset
|
914 _("conflicting local changes found"), |
9b02b678888e
mq: avoid silent failure when single patch doesn't apply (issue4604)
Matt Mackall <mpm@selenic.com>
parents:
24365
diff
changeset
|
915 hint=_("did you forget to qrefresh?")) |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
916 self.backup(repo, touched, copy=True) |
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
917 tobackup = tobackup - touched |
7782
140429276b63
mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents:
7772
diff
changeset
|
918 (patcherr, files, fuzz) = self.patch(repo, pf) |
10661
c4859aad1980
mq: all_files can be a set, remove dangerous default values
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10611
diff
changeset
|
919 if all_files is not None: |
c4859aad1980
mq: all_files can be a set, remove dangerous default values
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10611
diff
changeset
|
920 all_files.update(files) |
7782
140429276b63
mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents:
7772
diff
changeset
|
921 patcherr = not patcherr |
140429276b63
mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents:
7772
diff
changeset
|
922 else: |
140429276b63
mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents:
7772
diff
changeset
|
923 self.ui.warn(_("patch %s is empty\n") % patchname) |
140429276b63
mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents:
7772
diff
changeset
|
924 patcherr, files, fuzz = 0, [], 0 |
1808 | 925 |
2934
2f190e998eb3
Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents:
2922
diff
changeset
|
926 if merge and files: |
4332
4e5e1638b165
mq: don't abort when merging a patch that removes files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4242
diff
changeset
|
927 # Mark as removed/merged and update dirstate parent info |
4e5e1638b165
mq: don't abort when merging a patch that removes files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4242
diff
changeset
|
928 removed = [] |
4e5e1638b165
mq: don't abort when merging a patch that removes files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4242
diff
changeset
|
929 merged = [] |
4e5e1638b165
mq: don't abort when merging a patch that removes files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4242
diff
changeset
|
930 for f in files: |
12344
b6173aee4a47
Use lexists() instead of exists() where appropriate
Patrick Mezard <pmezard@gmail.com>
parents:
12067
diff
changeset
|
931 if os.path.lexists(repo.wjoin(f)): |
4332
4e5e1638b165
mq: don't abort when merging a patch that removes files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4242
diff
changeset
|
932 merged.append(f) |
4e5e1638b165
mq: don't abort when merging a patch that removes files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4242
diff
changeset
|
933 else: |
4e5e1638b165
mq: don't abort when merging a patch that removes files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4242
diff
changeset
|
934 removed.append(f) |
32347
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
935 with repo.dirstate.parentchange(): |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
936 for f in removed: |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
937 repo.dirstate.remove(f) |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
938 for f in merged: |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
939 repo.dirstate.merge(f) |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
940 p1, p2 = repo.dirstate.parents() |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
941 repo.setparents(p1, merge) |
6603
41eb20cc1c02
match: remove files arg from repo.status and friends
Matt Mackall <mpm@selenic.com>
parents:
6602
diff
changeset
|
942 |
19638
20096384754f
mq: update subrepos when applying / unapplying patches that change .hgsubstate
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
19636
diff
changeset
|
943 if all_files and '.hgsubstate' in all_files: |
20959
b6e0616d08cb
mq: repo['.'] is not a wctx, repo[None] is
Mads Kiilerich <madski@unity3d.com>
parents:
20924
diff
changeset
|
944 wctx = repo[None] |
b6e0616d08cb
mq: repo['.'] is not a wctx, repo[None] is
Mads Kiilerich <madski@unity3d.com>
parents:
20924
diff
changeset
|
945 pctx = repo['.'] |
19638
20096384754f
mq: update subrepos when applying / unapplying patches that change .hgsubstate
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
19636
diff
changeset
|
946 overwrite = False |
20959
b6e0616d08cb
mq: repo['.'] is not a wctx, repo[None] is
Mads Kiilerich <madski@unity3d.com>
parents:
20924
diff
changeset
|
947 mergedsubstate = subrepo.submerge(repo, pctx, wctx, wctx, |
19638
20096384754f
mq: update subrepos when applying / unapplying patches that change .hgsubstate
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
19636
diff
changeset
|
948 overwrite) |
20096384754f
mq: update subrepos when applying / unapplying patches that change .hgsubstate
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
19636
diff
changeset
|
949 files += mergedsubstate.keys() |
20096384754f
mq: update subrepos when applying / unapplying patches that change .hgsubstate
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
19636
diff
changeset
|
950 |
14322
a90131b85fd8
scmutil: drop aliases in cmdutil for match functions
Matt Mackall <mpm@selenic.com>
parents:
14319
diff
changeset
|
951 match = scmutil.matchfiles(repo, files or []) |
16043
74d00b5d00cc
qpush: avoid trying to manage existing history (issue2218)
Matt Mackall <mpm@selenic.com>
parents:
16040
diff
changeset
|
952 oldtip = repo['tip'] |
16102 | 953 n = newcommit(repo, None, message, ph.user, ph.date, match=match, |
954 force=True) | |
16043
74d00b5d00cc
qpush: avoid trying to manage existing history (issue2218)
Matt Mackall <mpm@selenic.com>
parents:
16040
diff
changeset
|
955 if repo['tip'] == oldtip: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
956 raise error.Abort(_("qpush exactly duplicates child changeset")) |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8525
diff
changeset
|
957 if n is None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
958 raise error.Abort(_("repository commit failed")) |
1808 | 959 |
960 if update_status: | |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
961 self.applied.append(statusentry(n, patchname)) |
1808 | 962 |
963 if patcherr: | |
24365
f1eaf03dd608
commands: say "working directory" in full spelling
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
964 self.ui.warn(_("patch failed, rejects left in working " |
f1eaf03dd608
commands: say "working directory" in full spelling
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
965 "directory\n")) |
8875
801cacf46e62
mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8833
diff
changeset
|
966 err = 2 |
1808 | 967 break |
968 | |
969 if fuzz and strict: | |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
970 self.ui.warn(_("fuzz found when applying patch, stopping\n")) |
8875
801cacf46e62
mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8833
diff
changeset
|
971 err = 3 |
1808 | 972 break |
973 return (err, n) | |
974 | |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
975 def _cleanup(self, patches, numrevs, keep=False): |
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
976 if not keep: |
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
977 r = self.qrepo() |
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
978 if r: |
14435
5f6090e559fa
context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents:
14434
diff
changeset
|
979 r[None].forget(patches) |
5f6090e559fa
context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents:
14434
diff
changeset
|
980 for p in patches: |
18067
6f62e005781d
mq: don't fail when removing a patch without patch file from series file
Mads Kiilerich <mads@kiilerich.com>
parents:
18054
diff
changeset
|
981 try: |
6f62e005781d
mq: don't fail when removing a patch without patch file from series file
Mads Kiilerich <mads@kiilerich.com>
parents:
18054
diff
changeset
|
982 os.unlink(self.join(p)) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25469
diff
changeset
|
983 except OSError as inst: |
18067
6f62e005781d
mq: don't fail when removing a patch without patch file from series file
Mads Kiilerich <mads@kiilerich.com>
parents:
18054
diff
changeset
|
984 if inst.errno != errno.ENOENT: |
6f62e005781d
mq: don't fail when removing a patch without patch file from series file
Mads Kiilerich <mads@kiilerich.com>
parents:
18054
diff
changeset
|
985 raise |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
986 |
15920
885e0c71db9b
mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15883
diff
changeset
|
987 qfinished = [] |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
988 if numrevs: |
14010
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
989 qfinished = self.applied[:numrevs] |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
990 del self.applied[:numrevs] |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
991 self.applieddirty = True |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
992 |
14010
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
993 unknown = [] |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
994 |
14574
12fba7bcb4f1
mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14573
diff
changeset
|
995 for (i, p) in sorted([(self.findseries(p), p) for p in patches], |
14010
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
996 reverse=True): |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
997 if i is not None: |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
998 del self.fullseries[i] |
14010
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
999 else: |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1000 unknown.append(p) |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1001 |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1002 if unknown: |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1003 if numrevs: |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1004 rev = dict((entry.name, entry.node) for entry in qfinished) |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1005 for p in unknown: |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1006 msg = _('revision %s refers to unknown patches: %s\n') |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1007 self.ui.warn(msg % (short(rev[p]), p)) |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1008 else: |
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1009 msg = _('unknown patches: %s\n') |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1010 raise error.Abort(''.join(msg % p for p in unknown)) |
14010
d7b4d421b56c
mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
13970
diff
changeset
|
1011 |
14575
845c864200d0
mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14574
diff
changeset
|
1012 self.parseseries() |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
1013 self.seriesdirty = True |
15920
885e0c71db9b
mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15883
diff
changeset
|
1014 return [entry.node for entry in qfinished] |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
1015 |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
1016 def _revpatches(self, repo, revs): |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1017 firstrev = repo[self.applied[0].node].rev() |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
1018 patches = [] |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
1019 for i, rev in enumerate(revs): |
8832
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1020 |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
1021 if rev < firstrev: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1022 raise error.Abort(_('revision %d is not managed') % rev) |
8832
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1023 |
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1024 ctx = repo[rev] |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1025 base = self.applied[i].node |
8832
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1026 if ctx.node() != base: |
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1027 msg = _('cannot delete revision %d above applied patches') |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1028 raise error.Abort(msg % rev) |
8832
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1029 |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
1030 patch = self.applied[i].name |
8832
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1031 for fmt in ('[mq]: %s', 'imported patch %s'): |
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1032 if ctx.description() == fmt % patch: |
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1033 msg = _('patch %s finalized without changeset message\n') |
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1034 repo.ui.status(msg % patch) |
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1035 break |
6e6f5b80e056
mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8811
diff
changeset
|
1036 |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
1037 patches.append(patch) |
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
1038 return patches |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
1039 |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
1040 def finish(self, repo, revs): |
16029
ee1c8385e5b0
qfinish: do not set secret changeset to draft if mq.secret=false
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16028
diff
changeset
|
1041 # Manually trigger phase computation to ensure phasedefaults is |
ee1c8385e5b0
qfinish: do not set secret changeset to draft if mq.secret=false
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16028
diff
changeset
|
1042 # executed before we remove the patches. |
16657
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16656
diff
changeset
|
1043 repo._phasecache |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
1044 patches = self._revpatches(repo, sorted(revs)) |
15920
885e0c71db9b
mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15883
diff
changeset
|
1045 qfinished = self._cleanup(patches, len(patches)) |
16029
ee1c8385e5b0
qfinish: do not set secret changeset to draft if mq.secret=false
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16028
diff
changeset
|
1046 if qfinished and repo.ui.configbool('mq', 'secret', False): |
ee1c8385e5b0
qfinish: do not set secret changeset to draft if mq.secret=false
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16028
diff
changeset
|
1047 # only use this logic when the secret option is added |
15920
885e0c71db9b
mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15883
diff
changeset
|
1048 oldqbase = repo[qfinished[0]] |
16290
9518cb55c822
qfinish: comply with the phases.new-commit option in secret mode (issue3335)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16278
diff
changeset
|
1049 tphase = repo.ui.config('phases', 'new-commit', phases.draft) |
9518cb55c822
qfinish: comply with the phases.new-commit option in secret mode (issue3335)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16278
diff
changeset
|
1050 if oldqbase.phase() > tphase and oldqbase.p1().phase() <= tphase: |
27864
4b8e3ffee94f
with: use context manager for transaction in qfinish
Bryan O'Sullivan <bryano@fb.com>
parents:
27848
diff
changeset
|
1051 with repo.transaction('qfinish') as tr: |
22069
616a455b02ca
phase: add a transaction argument to advanceboundary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22057
diff
changeset
|
1052 phases.advanceboundary(repo, tr, tphase, qfinished) |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
1053 |
3088
dc784839516d
mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents:
3087
diff
changeset
|
1054 def delete(self, repo, patches, opts): |
4736
04b2c1e27c26
mq: require patch argument or revision for qdelete
Brendan Cully <brendan@kublai.com>
parents:
4730
diff
changeset
|
1055 if not patches and not opts.get('rev'): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1056 raise error.Abort(_('qdelete requires at least one revision or ' |
4737
2ececafa5859
mq: more qdelete help text tweaks
Brendan Cully <brendan@kublai.com>
parents:
4736
diff
changeset
|
1057 'patch name')) |
4736
04b2c1e27c26
mq: require patch argument or revision for qdelete
Brendan Cully <brendan@kublai.com>
parents:
4730
diff
changeset
|
1058 |
11365
c3d7daa0928e
mq: make 'qdelete <patchidx>' work again.
Greg Ward <greg-hg@gerg.ca>
parents:
11327
diff
changeset
|
1059 realpatches = [] |
2905
790fd342b6c7
Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents:
2904
diff
changeset
|
1060 for patch in patches: |
790fd342b6c7
Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents:
2904
diff
changeset
|
1061 patch = self.lookup(patch, strict=True) |
790fd342b6c7
Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents:
2904
diff
changeset
|
1062 info = self.isapplied(patch) |
3373
9851f46d6ecc
mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents:
3243
diff
changeset
|
1063 if info: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1064 raise error.Abort(_("cannot delete applied patch %s") % patch) |
2905
790fd342b6c7
Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents:
2904
diff
changeset
|
1065 if patch not in self.series: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1066 raise error.Abort(_("patch %s not in series file") % patch) |
12655
5192b24f309c
mq: handle deleting the same patch twice in one command (issue2427)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12590
diff
changeset
|
1067 if patch not in realpatches: |
5192b24f309c
mq: handle deleting the same patch twice in one command (issue2427)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12590
diff
changeset
|
1068 realpatches.append(patch) |
3373
9851f46d6ecc
mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents:
3243
diff
changeset
|
1069 |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
1070 numrevs = 0 |
3373
9851f46d6ecc
mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents:
3243
diff
changeset
|
1071 if opts.get('rev'): |
9851f46d6ecc
mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents:
3243
diff
changeset
|
1072 if not self.applied: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1073 raise error.Abort(_('no patches applied')) |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14298
diff
changeset
|
1074 revs = scmutil.revrange(repo, opts.get('rev')) |
22803
31a591c3fecc
mq: use `revs.sort()` to ensure the set is ascending
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22547
diff
changeset
|
1075 revs.sort() |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
1076 revpatches = self._revpatches(repo, revs) |
11365
c3d7daa0928e
mq: make 'qdelete <patchidx>' work again.
Greg Ward <greg-hg@gerg.ca>
parents:
11327
diff
changeset
|
1077 realpatches += revpatches |
8833
14639c050251
mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8832
diff
changeset
|
1078 numrevs = len(revpatches) |
2905
790fd342b6c7
Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents:
2904
diff
changeset
|
1079 |
11365
c3d7daa0928e
mq: make 'qdelete <patchidx>' work again.
Greg Ward <greg-hg@gerg.ca>
parents:
11327
diff
changeset
|
1080 self._cleanup(realpatches, numrevs, opts.get('keep')) |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
1081 |
14581
da40ee1adc2b
mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents:
14580
diff
changeset
|
1082 def checktoppatch(self, repo): |
18343
cfa731b45b75
mq: checktoppatch should only check if p1 is qtip
Mads Kiilerich <mads@kiilerich.com>
parents:
18342
diff
changeset
|
1083 '''check that working directory is at qtip''' |
10686
0c68c2c36ed8
mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10685
diff
changeset
|
1084 if self.applied: |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1085 top = self.applied[-1].node |
10191
99d285ac5da4
mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents:
10190
diff
changeset
|
1086 patch = self.applied[-1].name |
18343
cfa731b45b75
mq: checktoppatch should only check if p1 is qtip
Mads Kiilerich <mads@kiilerich.com>
parents:
18342
diff
changeset
|
1087 if repo.dirstate.p1() != top: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1088 raise error.Abort(_("working directory revision is not qtip")) |
10191
99d285ac5da4
mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents:
10190
diff
changeset
|
1089 return top, patch |
99d285ac5da4
mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents:
10190
diff
changeset
|
1090 return None, None |
99d285ac5da4
mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents:
10190
diff
changeset
|
1091 |
17152
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1092 def putsubstate2changes(self, substatestate, changes): |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1093 for files in changes[:3]: |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1094 if '.hgsubstate' in files: |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1095 return # already listed up |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1096 # not yet listed up |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1097 if substatestate in 'a?': |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1098 changes[1].append('.hgsubstate') |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1099 elif substatestate in 'r': |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1100 changes[2].append('.hgsubstate') |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1101 else: # modified |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1102 changes[0].append('.hgsubstate') |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1103 |
19812
5d6cfdc38a3d
mq: simplifies the refresh hint in checklocalchanges
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19763
diff
changeset
|
1104 def checklocalchanges(self, repo, force=False, refresh=True): |
5d6cfdc38a3d
mq: simplifies the refresh hint in checklocalchanges
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19763
diff
changeset
|
1105 excsuffix = '' |
14256
d04ba50e104d
mq: allow to qpop/push with a dirty working copy (issue2780)
Idan Kamara <idankk86@gmail.com>
parents:
14241
diff
changeset
|
1106 if refresh: |
26780 | 1107 excsuffix = ', qrefresh first' |
19812
5d6cfdc38a3d
mq: simplifies the refresh hint in checklocalchanges
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19763
diff
changeset
|
1108 # plain versions for i18n tool to detect them |
26780 | 1109 _("local changes found, qrefresh first") |
1110 _("local changed subrepos found, qrefresh first") | |
19814
4495c6a272e0
mq: extract checklocalchanges from `mq.queue`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19813
diff
changeset
|
1111 return checklocalchanges(repo, force, excsuffix) |
4713
c29ee52e0b68
mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents:
4712
diff
changeset
|
1112 |
14051
2b1226693c70
mq: add '.' and '..' to list of forbidden patch names
Idan Kamara <idankk86@gmail.com>
parents:
13791
diff
changeset
|
1113 _reserved = ('series', 'status', 'guards', '.', '..') |
14584
3343a74eea4e
mq: rename check_reserved_name to checkreservedname
Adrian Buehlmann <adrian@cadifra.com>
parents:
14583
diff
changeset
|
1114 def checkreservedname(self, name): |
14054
3c616f512a5b
mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents:
14052
diff
changeset
|
1115 if name in self._reserved: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1116 raise error.Abort(_('"%s" cannot be used as the name of a patch') |
5981
ca2af0c81c9a
mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5980
diff
changeset
|
1117 % name) |
31556
448acdee9161
mq: reject new patch name containing leading/trailing whitespace
Yuya Nishihara <yuya@tcha.org>
parents:
31460
diff
changeset
|
1118 if name != name.strip(): |
448acdee9161
mq: reject new patch name containing leading/trailing whitespace
Yuya Nishihara <yuya@tcha.org>
parents:
31460
diff
changeset
|
1119 # whitespace is stripped by parseseries() |
448acdee9161
mq: reject new patch name containing leading/trailing whitespace
Yuya Nishihara <yuya@tcha.org>
parents:
31460
diff
changeset
|
1120 raise error.Abort(_('patch name cannot begin or end with ' |
448acdee9161
mq: reject new patch name containing leading/trailing whitespace
Yuya Nishihara <yuya@tcha.org>
parents:
31460
diff
changeset
|
1121 'whitespace')) |
14054
3c616f512a5b
mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents:
14052
diff
changeset
|
1122 for prefix in ('.hg', '.mq'): |
3c616f512a5b
mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents:
14052
diff
changeset
|
1123 if name.startswith(prefix): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1124 raise error.Abort(_('patch name cannot begin with "%s"') |
14054
3c616f512a5b
mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents:
14052
diff
changeset
|
1125 % prefix) |
25454
b5a8bc09b0db
mq: ban \r and \n in patch names (issue4711)
Augie Fackler <augie@google.com>
parents:
25453
diff
changeset
|
1126 for c in ('#', ':', '\r', '\n'): |
14054
3c616f512a5b
mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents:
14052
diff
changeset
|
1127 if c in name: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1128 raise error.Abort(_('%r cannot be used in the name of a patch') |
14054
3c616f512a5b
mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents:
14052
diff
changeset
|
1129 % c) |
3c616f512a5b
mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents:
14052
diff
changeset
|
1130 |
14422
2e77525e52d9
mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents:
14396
diff
changeset
|
1131 def checkpatchname(self, name, force=False): |
14584
3343a74eea4e
mq: rename check_reserved_name to checkreservedname
Adrian Buehlmann <adrian@cadifra.com>
parents:
14583
diff
changeset
|
1132 self.checkreservedname(name) |
14422
2e77525e52d9
mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents:
14396
diff
changeset
|
1133 if not force and os.path.exists(self.join(name)): |
2e77525e52d9
mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents:
14396
diff
changeset
|
1134 if os.path.isdir(self.join(name)): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1135 raise error.Abort(_('"%s" already exists as a directory') |
14422
2e77525e52d9
mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents:
14396
diff
changeset
|
1136 % name) |
2e77525e52d9
mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents:
14396
diff
changeset
|
1137 else: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1138 raise error.Abort(_('patch "%s" already exists') % name) |
5981
ca2af0c81c9a
mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5980
diff
changeset
|
1139 |
27918
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1140 def makepatchname(self, title, fallbackname): |
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1141 """Return a suitable filename for title, adding a suffix to make |
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1142 it unique in the existing list""" |
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1143 namebase = re.sub('[\s\W_]+', '_', title.lower()).strip('_') |
28388
b1d35e2e1af6
mq: restrict generated patch name to 75 characters (issue5117)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27919
diff
changeset
|
1144 namebase = namebase[:75] # avoid too long name (issue5117) |
27919
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1145 if namebase: |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1146 try: |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1147 self.checkreservedname(namebase) |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1148 except error.Abort: |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1149 namebase = fallbackname |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1150 else: |
27918
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1151 namebase = fallbackname |
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1152 name = namebase |
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1153 i = 0 |
27919
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1154 while True: |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1155 if name not in self.fullseries: |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1156 try: |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1157 self.checkpatchname(name) |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1158 break |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1159 except error.Abort: |
db24d6888896
mq: check for reserved patch name with qimport -r (issue5033)
Mads Kiilerich <madski@unity3d.com>
parents:
27918
diff
changeset
|
1160 pass |
27918
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1161 i += 1 |
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1162 name = '%s__%s' % (namebase, i) |
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1163 return name |
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
1164 |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1165 def checkkeepchanges(self, keepchanges, force): |
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1166 if force and keepchanges: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1167 raise error.Abort(_('cannot use both --force and --keep-changes')) |
16654
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
1168 |
7162
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1169 def new(self, repo, patchfn, *pats, **opts): |
7157
fd3cba5e73ae
mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents:
7142
diff
changeset
|
1170 """options: |
fd3cba5e73ae
mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents:
7142
diff
changeset
|
1171 msg: a string or a no-argument function returning a string |
fd3cba5e73ae
mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents:
7142
diff
changeset
|
1172 """ |
4713
c29ee52e0b68
mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents:
4712
diff
changeset
|
1173 msg = opts.get('msg') |
21420
d009f6555b81
mq: fold the code path to invoke editor into specific logic (qnew)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21270
diff
changeset
|
1174 edit = opts.get('edit') |
22003
cbbd957358ff
mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
1175 editform = opts.get('editform', 'mq.qnew') |
5673
dd3ce7515f4d
mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents:
5645
diff
changeset
|
1176 user = opts.get('user') |
5788
4107e823dc2c
mq: add --currentdate and --date options to qnew and qrefresh
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5673
diff
changeset
|
1177 date = opts.get('date') |
6139
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6120
diff
changeset
|
1178 if date: |
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6120
diff
changeset
|
1179 date = util.parsedate(date) |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
1180 diffopts = self.diffopts({'git': opts.get('git')}) |
14424
4eb88d296f63
record: check patch name is valid before prompting in qrecord
Idan Kamara <idankk86@gmail.com>
parents:
14423
diff
changeset
|
1181 if opts.get('checkname', True): |
4eb88d296f63
record: check patch name is valid before prompting in qrecord
Idan Kamara <idankk86@gmail.com>
parents:
14423
diff
changeset
|
1182 self.checkpatchname(patchfn) |
19813
76796fe65bad
mq: extract checksubstate from the queue class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19812
diff
changeset
|
1183 inclsubs = checksubstate(repo) |
13174
be7e8e9bc5e5
mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents:
13173
diff
changeset
|
1184 if inclsubs: |
16366
913d1fa61398
mq: use list of already known target files instead of matching object for diff
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16365
diff
changeset
|
1185 substatestate = repo.dirstate['.hgsubstate'] |
4713
c29ee52e0b68
mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents:
4712
diff
changeset
|
1186 if opts.get('include') or opts.get('exclude') or pats: |
7161
b420ef2c812b
mq: abort qnew -f if any file in an explicit list cannot be read
Brendan Cully <brendan@kublai.com>
parents:
7160
diff
changeset
|
1187 # detect missing files in pats |
b420ef2c812b
mq: abort qnew -f if any file in an explicit list cannot be read
Brendan Cully <brendan@kublai.com>
parents:
7160
diff
changeset
|
1188 def badfn(f, msg): |
13174
be7e8e9bc5e5
mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents:
13173
diff
changeset
|
1189 if f != '.hgsubstate': # .hgsubstate is auto-created |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1190 raise error.Abort('%s: %s' % (f, msg)) |
25469
cc3d94e5994e
mq: use the optional badfn argument when building a matcher
Matt Harbison <matt_harbison@yahoo.com>
parents:
25454
diff
changeset
|
1191 match = scmutil.match(repo[None], pats, opts, badfn=badfn) |
16366
913d1fa61398
mq: use list of already known target files instead of matching object for diff
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16365
diff
changeset
|
1192 changes = repo.status(match=match) |
4713
c29ee52e0b68
mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents:
4712
diff
changeset
|
1193 else: |
16366
913d1fa61398
mq: use list of already known target files instead of matching object for diff
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16365
diff
changeset
|
1194 changes = self.checklocalchanges(repo, force=True) |
20786
d666da075b91
mq: omit ".hgsubstate" from qnew/qrefresh target list for consistent node hash
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20785
diff
changeset
|
1195 commitfiles = list(inclsubs) |
d666da075b91
mq: omit ".hgsubstate" from qnew/qrefresh target list for consistent node hash
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20785
diff
changeset
|
1196 for files in changes[:3]: |
20827
ca5dd216cb62
localrepo: omit ".hgsubstate" also from "added" files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20790
diff
changeset
|
1197 commitfiles.extend(files) |
20786
d666da075b91
mq: omit ".hgsubstate" from qnew/qrefresh target list for consistent node hash
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20785
diff
changeset
|
1198 match = scmutil.matchfiles(repo, commitfiles) |
10372
27d542bc0f5b
qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents:
10370
diff
changeset
|
1199 if len(repo[None].parents()) > 1: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1200 raise error.Abort(_('cannot manage merge changesets')) |
14581
da40ee1adc2b
mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents:
14580
diff
changeset
|
1201 self.checktoppatch(repo) |
14585
74bf9c84cfd0
mq: rename full_series_end to fullseriesend
Adrian Buehlmann <adrian@cadifra.com>
parents:
14584
diff
changeset
|
1202 insert = self.fullseriesend() |
27827
a5b168953013
with: use context manager for wlock in qnew
Bryan O'Sullivan <bryano@fb.com>
parents:
27651
diff
changeset
|
1203 with repo.wlock(): |
12878
1634287b6ab1
qnew: give better feedback when doing 'hg qnew foo/' (issue2464)
Martin Geisler <mg@aragost.com>
parents:
12875
diff
changeset
|
1204 try: |
1634287b6ab1
qnew: give better feedback when doing 'hg qnew foo/' (issue2464)
Martin Geisler <mg@aragost.com>
parents:
12875
diff
changeset
|
1205 # if patch file write fails, abort early |
1634287b6ab1
qnew: give better feedback when doing 'hg qnew foo/' (issue2464)
Martin Geisler <mg@aragost.com>
parents:
12875
diff
changeset
|
1206 p = self.opener(patchfn, "w") |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25469
diff
changeset
|
1207 except IOError as e: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1208 raise error.Abort(_('cannot write patch "%s": %s') |
12878
1634287b6ab1
qnew: give better feedback when doing 'hg qnew foo/' (issue2464)
Martin Geisler <mg@aragost.com>
parents:
12875
diff
changeset
|
1209 % (patchfn, e.strerror)) |
7162
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1210 try: |
21234
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1211 defaultmsg = "[mq]: %s" % patchfn |
22003
cbbd957358ff
mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
1212 editor = cmdutil.getcommiteditor(editform=editform) |
21420
d009f6555b81
mq: fold the code path to invoke editor into specific logic (qnew)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21270
diff
changeset
|
1213 if edit: |
21421
4941caa9f0f8
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qnew)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21420
diff
changeset
|
1214 def finishdesc(desc): |
21234
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1215 if desc.rstrip(): |
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1216 return desc |
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1217 else: |
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1218 return defaultmsg |
21421
4941caa9f0f8
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qnew)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21420
diff
changeset
|
1219 # i18n: this message is shown in editor with "HG: " prefix |
4941caa9f0f8
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qnew)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21420
diff
changeset
|
1220 extramsg = _('Leave message empty to use default message.') |
4941caa9f0f8
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qnew)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21420
diff
changeset
|
1221 editor = cmdutil.getcommiteditor(finishdesc=finishdesc, |
22003
cbbd957358ff
mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
1222 extramsg=extramsg, |
cbbd957358ff
mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
1223 editform=editform) |
21234
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1224 commitmsg = msg |
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1225 else: |
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1226 commitmsg = msg or defaultmsg |
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1227 |
16102 | 1228 n = newcommit(repo, None, commitmsg, user, date, match=match, |
21234
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1229 force=True, editor=editor) |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8525
diff
changeset
|
1230 if n is None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1231 raise error.Abort(_("repo commit failed")) |
7162
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1232 try: |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
1233 self.fullseries[insert:insert] = [patchfn] |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1234 self.applied.append(statusentry(n, patchfn)) |
14575
845c864200d0
mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14574
diff
changeset
|
1235 self.parseseries() |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
1236 self.seriesdirty = True |
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
1237 self.applieddirty = True |
21234
b9a16ed5acec
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20959
diff
changeset
|
1238 nctx = repo[n] |
22547
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1239 ph = patchheader(self.join(patchfn), self.plainmode) |
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1240 if user: |
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1241 ph.setuser(user) |
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1242 if date: |
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1243 ph.setdate('%s %s' % date) |
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1244 ph.setparent(hex(nctx.p1().node())) |
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1245 msg = nctx.description().strip() |
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1246 if msg == defaultmsg.strip(): |
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1247 msg = '' |
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1248 ph.setmessage(msg) |
3d616d27a422
mq: write headers of new patches using patchheader
Mads Kiilerich <madski@unity3d.com>
parents:
22546
diff
changeset
|
1249 p.write(str(ph)) |
7162
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1250 if commitfiles: |
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1251 parent = self.qparents(repo, n) |
16366
913d1fa61398
mq: use list of already known target files instead of matching object for diff
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16365
diff
changeset
|
1252 if inclsubs: |
17152
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1253 self.putsubstate2changes(substatestate, changes) |
14241
45f7aa35f2fd
mq: don't hide the patch module
Idan Kamara <idankk86@gmail.com>
parents:
14239
diff
changeset
|
1254 chunks = patchmod.diff(repo, node1=parent, node2=n, |
16366
913d1fa61398
mq: use list of already known target files instead of matching object for diff
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16365
diff
changeset
|
1255 changes=changes, opts=diffopts) |
7308
b6f5490effbf
patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7307
diff
changeset
|
1256 for chunk in chunks: |
b6f5490effbf
patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7307
diff
changeset
|
1257 p.write(chunk) |
7162
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1258 p.close() |
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1259 r = self.qrepo() |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
1260 if r: |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11302
diff
changeset
|
1261 r[None].add([patchfn]) |
16705
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16699
diff
changeset
|
1262 except: # re-raises |
7162
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1263 repo.rollback() |
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1264 raise |
7280
810ca383da9c
remove unused variables
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7271
diff
changeset
|
1265 except Exception: |
7162
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1266 patchpath = self.join(patchfn) |
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1267 try: |
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1268 os.unlink(patchpath) |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16687
diff
changeset
|
1269 except OSError: |
7162
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1270 self.ui.warn(_('error unlinking %s\n') % patchpath) |
ce10a2f22258
mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents:
7161
diff
changeset
|
1271 raise |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1272 self.removeundo(repo) |
1808 | 1273 |
1274 def isapplied(self, patch): | |
1275 """returns (index, rev, patch)""" | |
8632
9e055cfdd620
replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
1276 for i, a in enumerate(self.applied): |
2780
ee48e5ef8753
Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents:
2765
diff
changeset
|
1277 if a.name == patch: |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1278 return (i, a.node, a.name) |
1808 | 1279 return None |
1280 | |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3186
diff
changeset
|
1281 # if the exact patch name does not exist, we try a few |
2696 | 1282 # variations. If strict is passed, we try only #1 |
1283 # | |
15256
8caf7a757afa
mq: fix corner cases for handling of patch 0 in qselect
Mads Kiilerich <mads@kiilerich.com>
parents:
15148
diff
changeset
|
1284 # 1) a number (as string) to indicate an offset in the series file |
2696 | 1285 # 2) a unique substring of the patch name was given |
1286 # 3) patchname[-+]num to indicate an offset in the series file | |
1287 def lookup(self, patch, strict=False): | |
14595
f2c9d4091e0e
mq: rename partial_name to partialname
Adrian Buehlmann <adrian@cadifra.com>
parents:
14594
diff
changeset
|
1288 def partialname(s): |
2696 | 1289 if s in self.series: |
1290 return s | |
2765
0327bd1c831c
mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2757
diff
changeset
|
1291 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
|
1292 if len(matches) > 1: |
0327bd1c831c
mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2757
diff
changeset
|
1293 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
|
1294 for m in matches: |
0327bd1c831c
mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2757
diff
changeset
|
1295 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
|
1296 return None |
0327bd1c831c
mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2757
diff
changeset
|
1297 if matches: |
0327bd1c831c
mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2757
diff
changeset
|
1298 return matches[0] |
10686
0c68c2c36ed8
mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10685
diff
changeset
|
1299 if self.series and self.applied: |
2696 | 1300 if s == 'qtip': |
18054
b35e3364f94a
check-code: there must also be whitespace between ')' and operator
Mads Kiilerich <madski@unity3d.com>
parents:
18011
diff
changeset
|
1301 return self.series[self.seriesend(True) - 1] |
2696 | 1302 if s == 'qbase': |
1303 return self.series[0] | |
1304 return None | |
7568
12df451ce205
mq: don't warn about ambiguous patch name when using patch index (issue1439)
Jason Orendorff <jorendorff@mozilla.com>
parents:
7566
diff
changeset
|
1305 |
12df451ce205
mq: don't warn about ambiguous patch name when using patch index (issue1439)
Jason Orendorff <jorendorff@mozilla.com>
parents:
7566
diff
changeset
|
1306 if patch in self.series: |
12df451ce205
mq: don't warn about ambiguous patch name when using patch index (issue1439)
Jason Orendorff <jorendorff@mozilla.com>
parents:
7566
diff
changeset
|
1307 return patch |
2696 | 1308 |
2819 | 1309 if not os.path.isfile(self.join(patch)): |
1808 | 1310 try: |
1311 sno = int(patch) | |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
1312 except (ValueError, OverflowError): |
2696 | 1313 pass |
1314 else: | |
7568
12df451ce205
mq: don't warn about ambiguous patch name when using patch index (issue1439)
Jason Orendorff <jorendorff@mozilla.com>
parents:
7566
diff
changeset
|
1315 if -len(self.series) <= sno < len(self.series): |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
1316 return self.series[sno] |
7568
12df451ce205
mq: don't warn about ambiguous patch name when using patch index (issue1439)
Jason Orendorff <jorendorff@mozilla.com>
parents:
7566
diff
changeset
|
1317 |
2696 | 1318 if not strict: |
14595
f2c9d4091e0e
mq: rename partial_name to partialname
Adrian Buehlmann <adrian@cadifra.com>
parents:
14594
diff
changeset
|
1319 res = partialname(patch) |
2696 | 1320 if res: |
1321 return res | |
3082
bed7cb835d8d
Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3076
diff
changeset
|
1322 minus = patch.rfind('-') |
bed7cb835d8d
Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3076
diff
changeset
|
1323 if minus >= 0: |
14595
f2c9d4091e0e
mq: rename partial_name to partialname
Adrian Buehlmann <adrian@cadifra.com>
parents:
14594
diff
changeset
|
1324 res = partialname(patch[:minus]) |
2696 | 1325 if res: |
1326 i = self.series.index(res) | |
1327 try: | |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
1328 off = int(patch[minus + 1:] or 1) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
1329 except (ValueError, OverflowError): |
2696 | 1330 pass |
1331 else: | |
1332 if i - off >= 0: | |
1333 return self.series[i - off] | |
3082
bed7cb835d8d
Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3076
diff
changeset
|
1334 plus = patch.rfind('+') |
bed7cb835d8d
Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3076
diff
changeset
|
1335 if plus >= 0: |
14595
f2c9d4091e0e
mq: rename partial_name to partialname
Adrian Buehlmann <adrian@cadifra.com>
parents:
14594
diff
changeset
|
1336 res = partialname(patch[:plus]) |
2696 | 1337 if res: |
1338 i = self.series.index(res) | |
1339 try: | |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
1340 off = int(patch[plus + 1:] or 1) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
1341 except (ValueError, OverflowError): |
2696 | 1342 pass |
1343 else: | |
1344 if i + off < len(self.series): | |
1345 return self.series[i + off] | |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1346 raise error.Abort(_("patch %s not in series") % patch) |
1808 | 1347 |
16654
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
1348 def push(self, repo, patch=None, force=False, list=False, mergeq=None, |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1349 all=False, move=False, exact=False, nobackup=False, |
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1350 keepchanges=False): |
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1351 self.checkkeepchanges(keepchanges, force) |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
1352 diffopts = self.diffopts() |
27828
823069f73ff9
with: use context manager for wlock in qpush
Bryan O'Sullivan <bryano@fb.com>
parents:
27827
diff
changeset
|
1353 with repo.wlock(): |
20119
1648e44edd8d
mq: prefer a loop to a double-for list comprehension
Kevin Bullock <kbullock@ringworld.org>
parents:
20053
diff
changeset
|
1354 heads = [] |
1648e44edd8d
mq: prefer a loop to a double-for list comprehension
Kevin Bullock <kbullock@ringworld.org>
parents:
20053
diff
changeset
|
1355 for hs in repo.branchmap().itervalues(): |
1648e44edd8d
mq: prefer a loop to a double-for list comprehension
Kevin Bullock <kbullock@ringworld.org>
parents:
20053
diff
changeset
|
1356 heads.extend(hs) |
10362
2e3ec7ef5349
mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10361
diff
changeset
|
1357 if not heads: |
2e3ec7ef5349
mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10361
diff
changeset
|
1358 heads = [nullid] |
13878
a8d13ee0ce68
misc: replace .parents()[0] with p1()
Matt Mackall <mpm@selenic.com>
parents:
13793
diff
changeset
|
1359 if repo.dirstate.p1() not in heads and not exact: |
8795
51c29aec0b75
mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents:
8778
diff
changeset
|
1360 self.ui.status(_("(working directory not at a head)\n")) |
6340
949e607ac544
mq: warn when applying a patch to somewhere other than tip
Matt Mackall <mpm@selenic.com>
parents:
6217
diff
changeset
|
1361 |
8795
51c29aec0b75
mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents:
8778
diff
changeset
|
1362 if not self.series: |
51c29aec0b75
mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents:
8778
diff
changeset
|
1363 self.ui.warn(_('no patches in series\n')) |
51c29aec0b75
mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents:
8778
diff
changeset
|
1364 return 0 |
7398
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1365 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1366 # Suppose our series file is: A B C and the current 'top' |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1367 # patch is B. qpush C should be performed (moving forward) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1368 # qpush B is a NOP (no change) qpush A is an error (can't |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1369 # go backwards with qpush) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1370 if patch: |
15257
a8555f9908d1
mq: cleanup of lookup - handling of None is not relevant
Mads Kiilerich <mads@kiilerich.com>
parents:
15256
diff
changeset
|
1371 patch = self.lookup(patch) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1372 info = self.isapplied(patch) |
13369
69238d0ca60f
mq: catch attempt to qpush to an earlier patch (issue2587)
Afuna <afunamatata@gmail.com>
parents:
13224
diff
changeset
|
1373 if info and info[0] >= len(self.applied) - 1: |
7398
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1374 self.ui.warn( |
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1375 _('qpush: %s is already at the top\n') % patch) |
11439
778377be3662
mq: explicit exit code when patch is already on top
Gilles Moris <gilles.moris@free.fr>
parents:
11438
diff
changeset
|
1376 return 0 |
13369
69238d0ca60f
mq: catch attempt to qpush to an earlier patch (issue2587)
Afuna <afunamatata@gmail.com>
parents:
13224
diff
changeset
|
1377 |
7398
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1378 pushable, reason = self.pushable(patch) |
13369
69238d0ca60f
mq: catch attempt to qpush to an earlier patch (issue2587)
Afuna <afunamatata@gmail.com>
parents:
13224
diff
changeset
|
1379 if pushable: |
14586
af91cb281975
mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents:
14585
diff
changeset
|
1380 if self.series.index(patch) < self.seriesend(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1381 raise error.Abort( |
13369
69238d0ca60f
mq: catch attempt to qpush to an earlier patch (issue2587)
Afuna <afunamatata@gmail.com>
parents:
13224
diff
changeset
|
1382 _("cannot push to a previous patch: %s") % patch) |
69238d0ca60f
mq: catch attempt to qpush to an earlier patch (issue2587)
Afuna <afunamatata@gmail.com>
parents:
13224
diff
changeset
|
1383 else: |
7398
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1384 if reason: |
14464
00256f689f9c
mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents:
14448
diff
changeset
|
1385 reason = _('guarded by %s') % reason |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1386 else: |
7398
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1387 reason = _('no matching guards') |
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1388 self.ui.warn(_("cannot push '%s' - %s\n") % (patch, reason)) |
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1389 return 1 |
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1390 elif all: |
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1391 patch = self.series[-1] |
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1392 if self.isapplied(patch): |
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1393 self.ui.warn(_('all patches are currently applied\n')) |
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1394 return 0 |
4100
c30c922f907a
Modify qpush/qpop idempotent operations to return success
Ben Thomas <bthomas@virtualiron.com>
parents:
4099
diff
changeset
|
1395 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1396 # Following the above example, starting at 'top' of B: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1397 # qpush should be performed (pushes C), but a subsequent |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1398 # qpush without an argument is an error (nothing to |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1399 # apply). This allows a loop of "...while hg qpush..." to |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1400 # work as it detects an error when done |
14586
af91cb281975
mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents:
14585
diff
changeset
|
1401 start = self.seriesend() |
7398
2cd1308cb588
mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents:
7308
diff
changeset
|
1402 if start == len(self.series): |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1403 self.ui.warn(_('patch series already fully applied\n')) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1404 return 1 |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1405 if not force and not keepchanges: |
14732
e9ed3506f066
backout of d04ba50e104d: allow to qpop/push with a dirty working copy
Idan Kamara <idankk86@gmail.com>
parents:
14671
diff
changeset
|
1406 self.checklocalchanges(repo, refresh=self.applied) |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
1407 |
13033
026053f691a4
mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents:
13031
diff
changeset
|
1408 if exact: |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1409 if keepchanges: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1410 raise error.Abort( |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1411 _("cannot use --exact and --keep-changes together")) |
13033
026053f691a4
mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents:
13031
diff
changeset
|
1412 if move: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1413 raise error.Abort(_('cannot use --exact and --move ' |
16683 | 1414 'together')) |
13033
026053f691a4
mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents:
13031
diff
changeset
|
1415 if self.applied: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1416 raise error.Abort(_('cannot push --exact with applied ' |
16683 | 1417 'patches')) |
13033
026053f691a4
mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents:
13031
diff
changeset
|
1418 root = self.series[start] |
026053f691a4
mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents:
13031
diff
changeset
|
1419 target = patchheader(self.join(root), self.plainmode).parent |
026053f691a4
mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents:
13031
diff
changeset
|
1420 if not target: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1421 raise error.Abort( |
16231
ce292f1379ba
i18n: fix all remaining uses of % inside _()
Matt Mackall <mpm@selenic.com>
parents:
16188
diff
changeset
|
1422 _("%s does not have a parent recorded") % root) |
13033
026053f691a4
mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents:
13031
diff
changeset
|
1423 if not repo[target] == repo['.']: |
026053f691a4
mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents:
13031
diff
changeset
|
1424 hg.update(repo, target) |
026053f691a4
mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents:
13031
diff
changeset
|
1425 |
11064
590b1d6ef50b
mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents:
11050
diff
changeset
|
1426 if move: |
11715
4f9dfb54c8b5
qpush --move: move the right patch even with comment lines
Gilles Moris <gilles.moris@free.fr>
parents:
11709
diff
changeset
|
1427 if not patch: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1428 raise error.Abort(_("please specify the patch to move")) |
16303
7ee8aa662937
mq: fix qpush --move with comments in series file between applied patches
Mads Kiilerich <mads@kiilerich.com>
parents:
16290
diff
changeset
|
1429 for fullstart, rpn in enumerate(self.fullseries): |
7ee8aa662937
mq: fix qpush --move with comments in series file between applied patches
Mads Kiilerich <mads@kiilerich.com>
parents:
16290
diff
changeset
|
1430 # strip markers for patch guards |
7ee8aa662937
mq: fix qpush --move with comments in series file between applied patches
Mads Kiilerich <mads@kiilerich.com>
parents:
16290
diff
changeset
|
1431 if self.guard_re.split(rpn, 1)[0] == self.series[start]: |
7ee8aa662937
mq: fix qpush --move with comments in series file between applied patches
Mads Kiilerich <mads@kiilerich.com>
parents:
16290
diff
changeset
|
1432 break |
7ee8aa662937
mq: fix qpush --move with comments in series file between applied patches
Mads Kiilerich <mads@kiilerich.com>
parents:
16290
diff
changeset
|
1433 for i, rpn in enumerate(self.fullseries[fullstart:]): |
11715
4f9dfb54c8b5
qpush --move: move the right patch even with comment lines
Gilles Moris <gilles.moris@free.fr>
parents:
11709
diff
changeset
|
1434 # strip markers for patch guards |
4f9dfb54c8b5
qpush --move: move the right patch even with comment lines
Gilles Moris <gilles.moris@free.fr>
parents:
11709
diff
changeset
|
1435 if self.guard_re.split(rpn, 1)[0] == patch: |
4f9dfb54c8b5
qpush --move: move the right patch even with comment lines
Gilles Moris <gilles.moris@free.fr>
parents:
11709
diff
changeset
|
1436 break |
16303
7ee8aa662937
mq: fix qpush --move with comments in series file between applied patches
Mads Kiilerich <mads@kiilerich.com>
parents:
16290
diff
changeset
|
1437 index = fullstart + i |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
1438 assert index < len(self.fullseries) |
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
1439 fullpatch = self.fullseries[index] |
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
1440 del self.fullseries[index] |
16303
7ee8aa662937
mq: fix qpush --move with comments in series file between applied patches
Mads Kiilerich <mads@kiilerich.com>
parents:
16290
diff
changeset
|
1441 self.fullseries.insert(fullstart, fullpatch) |
14575
845c864200d0
mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14574
diff
changeset
|
1442 self.parseseries() |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
1443 self.seriesdirty = True |
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
1444 |
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
1445 self.applieddirty = True |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1446 if start > 0: |
14581
da40ee1adc2b
mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents:
14580
diff
changeset
|
1447 self.checktoppatch(repo) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1448 if not patch: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1449 patch = self.series[start] |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1450 end = start + 1 |
4418
0532491f7476
MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4406
diff
changeset
|
1451 else: |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1452 end = self.series.index(patch, start) + 1 |
8875
801cacf46e62
mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8833
diff
changeset
|
1453 |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
1454 tobackup = set() |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1455 if (not nobackup and force) or keepchanges: |
22925
68df36ce3d8a
strip: make checklocalchanges() return full status tuple
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22821
diff
changeset
|
1456 status = self.checklocalchanges(repo, force=True) |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1457 if keepchanges: |
22925
68df36ce3d8a
strip: make checklocalchanges() return full status tuple
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22821
diff
changeset
|
1458 tobackup.update(status.modified + status.added + |
68df36ce3d8a
strip: make checklocalchanges() return full status tuple
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22821
diff
changeset
|
1459 status.removed + status.deleted) |
16654
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
1460 else: |
22925
68df36ce3d8a
strip: make checklocalchanges() return full status tuple
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22821
diff
changeset
|
1461 tobackup.update(status.modified + status.added) |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
1462 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1463 s = self.series[start:end] |
10661
c4859aad1980
mq: all_files can be a set, remove dangerous default values
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10611
diff
changeset
|
1464 all_files = set() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1465 try: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1466 if mergeq: |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
1467 ret = self.mergepatch(repo, mergeq, s, diffopts) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1468 else: |
16634
435375cc0ca0
mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents:
16633
diff
changeset
|
1469 ret = self.apply(repo, s, list, all_files=all_files, |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1470 tobackup=tobackup, keepchanges=keepchanges) |
24826
9b02b678888e
mq: avoid silent failure when single patch doesn't apply (issue4604)
Matt Mackall <mpm@selenic.com>
parents:
24365
diff
changeset
|
1471 except AbortNoCleanup: |
9b02b678888e
mq: avoid silent failure when single patch doesn't apply (issue4604)
Matt Mackall <mpm@selenic.com>
parents:
24365
diff
changeset
|
1472 raise |
16705
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16699
diff
changeset
|
1473 except: # re-raises |
26654
30657909b2ba
mq: use cmdutil.revert instead of hg.revert
Matt Mackall <mpm@selenic.com>
parents:
26587
diff
changeset
|
1474 self.ui.warn(_('cleaning up working directory...\n')) |
30657909b2ba
mq: use cmdutil.revert instead of hg.revert
Matt Mackall <mpm@selenic.com>
parents:
26587
diff
changeset
|
1475 cmdutil.revert(self.ui, repo, repo['.'], |
30657909b2ba
mq: use cmdutil.revert instead of hg.revert
Matt Mackall <mpm@selenic.com>
parents:
26587
diff
changeset
|
1476 repo.dirstate.parents(), no_backup=True) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1477 # only remove unknown files that we know we touched or |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1478 # created while patching |
10662
e8e56d8377ab
mq: avoid a (potentially expensive) repo.status(unknown=True) call
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10661
diff
changeset
|
1479 for f in all_files: |
e8e56d8377ab
mq: avoid a (potentially expensive) repo.status(unknown=True) call
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10661
diff
changeset
|
1480 if f not in repo.dirstate: |
31309
8908f985570c
vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents:
31243
diff
changeset
|
1481 repo.wvfs.unlinkpath(f, ignoremissing=True) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1482 self.ui.warn(_('done\n')) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1483 raise |
8875
801cacf46e62
mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8833
diff
changeset
|
1484 |
9590
07a62819b309
mq: fix traceback for qpush inexistant-patch with no patch applied
Benoit Allard <benoit@aeteurope.nl>
parents:
9588
diff
changeset
|
1485 if not self.applied: |
07a62819b309
mq: fix traceback for qpush inexistant-patch with no patch applied
Benoit Allard <benoit@aeteurope.nl>
parents:
9588
diff
changeset
|
1486 return ret[0] |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1487 top = self.applied[-1].name |
8875
801cacf46e62
mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8833
diff
changeset
|
1488 if ret[0] and ret[0] > 1: |
26780 | 1489 msg = _("errors during apply, please fix and qrefresh %s\n") |
8875
801cacf46e62
mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8833
diff
changeset
|
1490 self.ui.write(msg % top) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1491 else: |
7627 | 1492 self.ui.write(_("now at: %s\n") % top) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1493 return ret[0] |
8875
801cacf46e62
mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8833
diff
changeset
|
1494 |
16635
9d76320d8b99
mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents:
16634
diff
changeset
|
1495 def pop(self, repo, patch=None, force=False, update=True, all=False, |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1496 nobackup=False, keepchanges=False): |
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1497 self.checkkeepchanges(keepchanges, force) |
27829
bab359a3cf49
with: use context manager for wlock in qpop
Bryan O'Sullivan <bryano@fb.com>
parents:
27828
diff
changeset
|
1498 with repo.wlock(): |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1499 if patch: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1500 # index, rev, patch |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1501 info = self.isapplied(patch) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1502 if not info: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1503 patch = self.lookup(patch) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1504 info = self.isapplied(patch) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1505 if not info: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1506 raise error.Abort(_("patch %s is not applied") % patch) |
4100
c30c922f907a
Modify qpush/qpop idempotent operations to return success
Ben Thomas <bthomas@virtualiron.com>
parents:
4099
diff
changeset
|
1507 |
10686
0c68c2c36ed8
mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10685
diff
changeset
|
1508 if not self.applied: |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1509 # Allow qpop -a to work repeatedly, |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1510 # but not qpop without an argument |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1511 self.ui.warn(_("no patches applied\n")) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1512 return not all |
1808 | 1513 |
7620
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1514 if all: |
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1515 start = 0 |
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1516 elif patch: |
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1517 start = info[0] + 1 |
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1518 else: |
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1519 start = len(self.applied) - 1 |
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1520 |
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1521 if start >= len(self.applied): |
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1522 self.ui.warn(_("qpop: %s is already at the top\n") % patch) |
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1523 return |
fbfd92d51540
mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7619
diff
changeset
|
1524 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1525 if not update: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1526 parents = repo.dirstate.parents() |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1527 rr = [x.node for x in self.applied] |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1528 for p in parents: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1529 if p in rr: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
1530 self.ui.warn(_("qpop: forcing dirstate update\n")) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1531 update = True |
7621
6d891df43a5f
mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7620
diff
changeset
|
1532 else: |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1533 parents = [p.node() for p in repo[None].parents()] |
7621
6d891df43a5f
mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7620
diff
changeset
|
1534 needupdate = False |
6d891df43a5f
mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7620
diff
changeset
|
1535 for entry in self.applied[start:]: |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1536 if entry.node in parents: |
7621
6d891df43a5f
mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7620
diff
changeset
|
1537 needupdate = True |
6d891df43a5f
mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7620
diff
changeset
|
1538 break |
6d891df43a5f
mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7620
diff
changeset
|
1539 update = needupdate |
1808 | 1540 |
16633
b2ca2f40c9c1
mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents:
16551
diff
changeset
|
1541 tobackup = set() |
b2ca2f40c9c1
mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents:
16551
diff
changeset
|
1542 if update: |
22925
68df36ce3d8a
strip: make checklocalchanges() return full status tuple
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22821
diff
changeset
|
1543 s = self.checklocalchanges(repo, force=force or keepchanges) |
16653
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
1544 if force: |
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
1545 if not nobackup: |
22925
68df36ce3d8a
strip: make checklocalchanges() return full status tuple
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22821
diff
changeset
|
1546 tobackup.update(s.modified + s.added) |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1547 elif keepchanges: |
22925
68df36ce3d8a
strip: make checklocalchanges() return full status tuple
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22821
diff
changeset
|
1548 tobackup.update(s.modified + s.added + |
68df36ce3d8a
strip: make checklocalchanges() return full status tuple
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22821
diff
changeset
|
1549 s.removed + s.deleted) |
14732
e9ed3506f066
backout of d04ba50e104d: allow to qpop/push with a dirty working copy
Idan Kamara <idankk86@gmail.com>
parents:
14671
diff
changeset
|
1550 |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
1551 self.applieddirty = True |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1552 end = len(self.applied) |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1553 rev = self.applied[start].node |
5980
dcda0c90125c
mq: pop/refresh: avoid losing revisions not managed by mq
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5979
diff
changeset
|
1554 |
7621
6d891df43a5f
mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7620
diff
changeset
|
1555 try: |
6d891df43a5f
mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7620
diff
changeset
|
1556 heads = repo.changelog.heads(rev) |
7639
ae7a614a6a57
mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
1557 except error.LookupError: |
7621
6d891df43a5f
mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7620
diff
changeset
|
1558 node = short(rev) |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1559 raise error.Abort(_('trying to pop unknown node %s') % node) |
7621
6d891df43a5f
mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7620
diff
changeset
|
1560 |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1561 if heads != [self.applied[-1].node]: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1562 raise error.Abort(_("popping would remove a revision not " |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
1563 "managed by this patch queue")) |
16048
140b6282ac79
mq: prevent rewriting operation on public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16043
diff
changeset
|
1564 if not repo[self.applied[-1].node].mutable(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1565 raise error.Abort( |
25411
d298805fb639
phases: rewrite "immutable changeset" to "public changeset"
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
25186
diff
changeset
|
1566 _("popping would remove a public revision"), |
29968
0342bf292f73
mq: use single quotes in use warning
timeless <timeless@mozdev.org>
parents:
29841
diff
changeset
|
1567 hint=_("see 'hg help phases' for details")) |
5980
dcda0c90125c
mq: pop/refresh: avoid losing revisions not managed by mq
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5979
diff
changeset
|
1568 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1569 # we know there are no local changes, so we can make a simplified |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1570 # form of hg.update. |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1571 if update: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1572 qp = self.qparents(repo, rev) |
10663
85e81d9bfb7a
mq: simplify and use context API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10662
diff
changeset
|
1573 ctx = repo[qp] |
18342
de99de39ba28
mq: fix qpop of working directory parent patch when not at qtip
Mads Kiilerich <mads@kiilerich.com>
parents:
18217
diff
changeset
|
1574 m, a, r, d = repo.status(qp, '.')[:4] |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1575 if d: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1576 raise error.Abort(_("deletions found between repo revs")) |
16633
b2ca2f40c9c1
mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents:
16551
diff
changeset
|
1577 |
16653
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
1578 tobackup = set(a + m + r) & tobackup |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
1579 if keepchanges and tobackup: |
26780 | 1580 raise error.Abort(_("local changes found, qrefresh first")) |
16653
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
1581 self.backup(repo, tobackup) |
32347
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
1582 with repo.dirstate.parentchange(): |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
1583 for f in a: |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
1584 repo.wvfs.unlinkpath(f, ignoremissing=True) |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
1585 repo.dirstate.drop(f) |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
1586 for f in m + r: |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
1587 fctx = ctx[f] |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
1588 repo.wwrite(f, fctx.data(), fctx.flags()) |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
1589 repo.dirstate.normal(f) |
f4aee989ebec
mq: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32337
diff
changeset
|
1590 repo.setparents(qp, nullid) |
9110
561ff8d9e4f0
mq: qpop now tells which patches are popped
Mads Kiilerich <mads@kiilerich.com>
parents:
9067
diff
changeset
|
1591 for patch in reversed(self.applied[start:end]): |
9111
ac3f1e6696eb
mq: use ui.status when pushing and popping patches
Martin Geisler <mg@lazybytes.net>
parents:
9110
diff
changeset
|
1592 self.ui.status(_("popping %s\n") % patch.name) |
5987
f2201aee3dc8
qpop/qrefresh: update self.applied before calling strip
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5981
diff
changeset
|
1593 del self.applied[start:end] |
22057
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22049
diff
changeset
|
1594 strip(self.ui, repo, [rev], update=False, backup=False) |
19638
20096384754f
mq: update subrepos when applying / unapplying patches that change .hgsubstate
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
19636
diff
changeset
|
1595 for s, state in repo['.'].substate.items(): |
20096384754f
mq: update subrepos when applying / unapplying patches that change .hgsubstate
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
19636
diff
changeset
|
1596 repo['.'].sub(s).get(state) |
10686
0c68c2c36ed8
mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10685
diff
changeset
|
1597 if self.applied: |
7627 | 1598 self.ui.write(_("now at: %s\n") % self.applied[-1].name) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1599 else: |
7627 | 1600 self.ui.write(_("patch queue now empty\n")) |
1808 | 1601 |
2937
9dc568f5e03d
Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents:
2936
diff
changeset
|
1602 def diff(self, repo, pats, opts): |
14581
da40ee1adc2b
mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents:
14580
diff
changeset
|
1603 top, patch = self.checktoppatch(repo) |
1808 | 1604 if not top: |
7627 | 1605 self.ui.write(_("no patches applied\n")) |
1808 | 1606 return |
1607 qp = self.qparents(repo, top) | |
9857
24bc6e414610
diff: change --inverse to --reverse
Martin Geisler <mg@lazybytes.net>
parents:
9824
diff
changeset
|
1608 if opts.get('reverse'): |
9725
3f522d2fa633
diff: add --inverse option
Yannick Gingras <ygingras@ygingras.net>
parents:
9642
diff
changeset
|
1609 node1, node2 = None, qp |
3f522d2fa633
diff: add --inverse option
Yannick Gingras <ygingras@ygingras.net>
parents:
9642
diff
changeset
|
1610 else: |
3f522d2fa633
diff: add --inverse option
Yannick Gingras <ygingras@ygingras.net>
parents:
9642
diff
changeset
|
1611 node1, node2 = qp, None |
10191
99d285ac5da4
mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents:
10190
diff
changeset
|
1612 diffopts = self.diffopts(opts, patch) |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
1613 self.printdiff(repo, diffopts, node1, node2, files=pats, opts=opts) |
1808 | 1614 |
2938
5b7a118f5b6c
allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents:
2937
diff
changeset
|
1615 def refresh(self, repo, pats=None, **opts): |
10686
0c68c2c36ed8
mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10685
diff
changeset
|
1616 if not self.applied: |
7627 | 1617 self.ui.write(_("no patches applied\n")) |
3004
ac74046f8f58
qrefresh: exit with status 1 if no patches applied.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2984
diff
changeset
|
1618 return 1 |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
1619 msg = opts.get('msg', '').rstrip() |
21422
edc6ced48d2d
mq: fold the code paths to invoke editor into specific logic (qrefresh/qfold)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21421
diff
changeset
|
1620 edit = opts.get('edit') |
22003
cbbd957358ff
mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
1621 editform = opts.get('editform', 'mq.qrefresh') |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
1622 newuser = opts.get('user') |
6139
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6120
diff
changeset
|
1623 newdate = opts.get('date') |
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6120
diff
changeset
|
1624 if newdate: |
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6120
diff
changeset
|
1625 newdate = '%d %d' % util.parsedate(newdate) |
1808 | 1626 wlock = repo.wlock() |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1627 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1628 try: |
14581
da40ee1adc2b
mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents:
14580
diff
changeset
|
1629 self.checktoppatch(repo) |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
1630 (top, patchfn) = (self.applied[-1].node, self.applied[-1].name) |
5980
dcda0c90125c
mq: pop/refresh: avoid losing revisions not managed by mq
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5979
diff
changeset
|
1631 if repo.changelog.heads(top) != [top]: |
26780 | 1632 raise error.Abort(_("cannot qrefresh a revision with children")) |
16048
140b6282ac79
mq: prevent rewriting operation on public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16043
diff
changeset
|
1633 if not repo[top].mutable(): |
26780 | 1634 raise error.Abort(_("cannot qrefresh public revision"), |
29968
0342bf292f73
mq: use single quotes in use warning
timeless <timeless@mozdev.org>
parents:
29841
diff
changeset
|
1635 hint=_("see 'hg help phases' for details")) |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1636 |
17153
54da604fefee
mq: check subrepo synchronizations against parent of workdir or other appropriate context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17152
diff
changeset
|
1637 cparents = repo.changelog.parents(top) |
54da604fefee
mq: check subrepo synchronizations against parent of workdir or other appropriate context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17152
diff
changeset
|
1638 patchparent = self.qparents(repo, top) |
54da604fefee
mq: check subrepo synchronizations against parent of workdir or other appropriate context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17152
diff
changeset
|
1639 |
19813
76796fe65bad
mq: extract checksubstate from the queue class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19812
diff
changeset
|
1640 inclsubs = checksubstate(repo, hex(patchparent)) |
17152
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1641 if inclsubs: |
f287d4a62031
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17151
diff
changeset
|
1642 substatestate = repo.dirstate['.hgsubstate'] |
13174
be7e8e9bc5e5
mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents:
13173
diff
changeset
|
1643 |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
1644 ph = patchheader(self.join(patchfn), self.plainmode) |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
1645 diffopts = self.diffopts({'git': opts.get('git')}, patchfn) |
5673
dd3ce7515f4d
mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents:
5645
diff
changeset
|
1646 if newuser: |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
1647 ph.setuser(newuser) |
5788
4107e823dc2c
mq: add --currentdate and --date options to qnew and qrefresh
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5673
diff
changeset
|
1648 if newdate: |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
1649 ph.setdate(newdate) |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
1650 ph.setparent(hex(patchparent)) |
5180
5bbbd1f1d586
mq: truncate patch just before rewriting header
Brendan Cully <brendan@kublai.com>
parents:
4930
diff
changeset
|
1651 |
7400
409a9b442308
mq: use atomictempfiles during patch refresh
Brendan Cully <brendan@kublai.com>
parents:
7399
diff
changeset
|
1652 # only commit new patch when write is complete |
409a9b442308
mq: use atomictempfiles during patch refresh
Brendan Cully <brendan@kublai.com>
parents:
7399
diff
changeset
|
1653 patchf = self.opener(patchfn, 'w', atomictemp=True) |
409a9b442308
mq: use atomictempfiles during patch refresh
Brendan Cully <brendan@kublai.com>
parents:
7399
diff
changeset
|
1654 |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1655 # update the dirstate in place, strip off the qtip commit |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1656 # and then commit. |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1657 # |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1658 # this should really read: |
13005
cffa35529706
mq: fix comment to reflect change in efbee27415ab
Martin Geisler <mg@aragost.com>
parents:
13004
diff
changeset
|
1659 # mm, dd, aa = repo.status(top, patchparent)[:3] |
17425
e95ec38f86b0
fix wording and not-completely-trivial spelling errors and bad docstrings
Mads Kiilerich <mads@kiilerich.com>
parents:
17424
diff
changeset
|
1660 # but we do it backwards to take advantage of manifest/changelog |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1661 # caching against the next repo.status call |
13004
efbee27415ab
mq: clean up unused variable in qrefresh
Kevin Bullock <kbullock@ringworld.org>
parents:
12948
diff
changeset
|
1662 mm, aa, dd = repo.status(patchparent, top)[:3] |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1663 changes = repo.changelog.read(top) |
30369
d79c141fdf41
manifest: remove usages of manifest.read
Durham Goode <durham@fb.com>
parents:
30070
diff
changeset
|
1664 man = repo.manifestlog[changes[0]].read() |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1665 aaa = aa[:] |
14671
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14636
diff
changeset
|
1666 matchfn = scmutil.match(repo[None], pats, opts) |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1667 # in short mode, we only diff the files included in the |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1668 # patch already plus specified files |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1669 if opts.get('short'): |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1670 # if amending a patch, we start with existing |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1671 # files plus specified files - unfiltered |
14322
a90131b85fd8
scmutil: drop aliases in cmdutil for match functions
Matt Mackall <mpm@selenic.com>
parents:
14319
diff
changeset
|
1672 match = scmutil.matchfiles(repo, mm + aa + dd + matchfn.files()) |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17191
diff
changeset
|
1673 # filter with include/exclude options |
14671
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14636
diff
changeset
|
1674 matchfn = scmutil.match(repo[None], opts=opts) |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1675 else: |
14322
a90131b85fd8
scmutil: drop aliases in cmdutil for match functions
Matt Mackall <mpm@selenic.com>
parents:
14319
diff
changeset
|
1676 match = scmutil.matchall(repo) |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1677 m, a, r, d = repo.status(match=match)[:4] |
12948
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1678 mm = set(mm) |
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1679 aa = set(aa) |
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1680 dd = set(dd) |
1808 | 1681 |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1682 # we might end up with files that were added between |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1683 # qtip and the dirstate parent, but then changed in the |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1684 # local dirstate. in this case, we want them to only |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1685 # show up in the added section |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1686 for x in m: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1687 if x not in aa: |
12948
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1688 mm.add(x) |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1689 # we might end up with files added by the local dirstate that |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1690 # were deleted by the patch. In this case, they should only |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1691 # show up in the changed section. |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1692 for x in a: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1693 if x in dd: |
12948
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1694 dd.remove(x) |
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1695 mm.add(x) |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1696 else: |
12948
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1697 aa.add(x) |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1698 # make sure any files deleted in the local dirstate |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1699 # are not in the add or change column of the patch |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1700 forget = [] |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1701 for x in d + r: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1702 if x in aa: |
12948
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1703 aa.remove(x) |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1704 forget.append(x) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1705 continue |
12948
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1706 else: |
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1707 mm.discard(x) |
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1708 dd.add(x) |
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1709 |
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1710 m = list(mm) |
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1711 r = list(dd) |
de6a28ff5ffc
mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12879
diff
changeset
|
1712 a = list(aa) |
17888
39b7052b217b
mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents:
17887
diff
changeset
|
1713 |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18371
diff
changeset
|
1714 # create 'match' that includes the files to be recommitted. |
17888
39b7052b217b
mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents:
17887
diff
changeset
|
1715 # apply matchfn via repo.status to ensure correct case handling. |
39b7052b217b
mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents:
17887
diff
changeset
|
1716 cm, ca, cr, cd = repo.status(patchparent, match=matchfn)[:4] |
39b7052b217b
mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents:
17887
diff
changeset
|
1717 allmatches = set(cm + ca + cr + cd) |
39b7052b217b
mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents:
17887
diff
changeset
|
1718 refreshchanges = [x.intersection(allmatches) for x in (mm, aa, dd)] |
39b7052b217b
mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents:
17887
diff
changeset
|
1719 |
39b7052b217b
mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents:
17887
diff
changeset
|
1720 files = set(inclsubs) |
39b7052b217b
mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents:
17887
diff
changeset
|
1721 for x in refreshchanges: |
20827
ca5dd216cb62
localrepo: omit ".hgsubstate" also from "added" files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20790
diff
changeset
|
1722 files.update(x) |
17888
39b7052b217b
mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents:
17887
diff
changeset
|
1723 match = scmutil.matchfiles(repo, files) |
39b7052b217b
mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents:
17887
diff
changeset
|
1724 |
17730
6c6987761e42
mq: update bookmarks during qrefresh
David Soria Parra <dsp@php.net>
parents:
17708
diff
changeset
|
1725 bmlist = repo[top].bookmarks() |
1808 | 1726 |
24997
12f3c7144a39
mq: use dirstateguard instead of dirstate.invalidate (qrefresh)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24996
diff
changeset
|
1727 dsguard = None |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1728 try: |
30489
0ae83ede68c5
mq: refer to dirstateguard by its new name
Augie Fackler <augie@google.com>
parents:
30485
diff
changeset
|
1729 dsguard = dirstateguard.dirstateguard(repo, 'mq.refresh') |
10368 | 1730 if diffopts.git or diffopts.upgrade: |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1731 copies = {} |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1732 for dst in a: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1733 src = repo.dirstate.copied(dst) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1734 # during qfold, the source file for copies may |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1735 # be removed. Treat this as a simple add. |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1736 if src is not None and src in repo.dirstate: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1737 copies.setdefault(src, []).append(dst) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1738 repo.dirstate.add(dst) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1739 # remember the copies between patchparent and qtip |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1740 for dst in aaa: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1741 f = repo.file(dst) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1742 src = f.renamed(man[dst]) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1743 if src: |
10368 | 1744 copies.setdefault(src[0], []).extend( |
1745 copies.get(dst, [])) | |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1746 if dst in a: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1747 copies[src[0]].append(dst) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1748 # we can't copy a file created by the patch itself |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1749 if dst in copies: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1750 del copies[dst] |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1751 for src, dsts in copies.iteritems(): |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1752 for dst in dsts: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1753 repo.dirstate.copy(src, dst) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1754 else: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1755 for dst in a: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1756 repo.dirstate.add(dst) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1757 # Drop useless copy information |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1758 for f in list(repo.dirstate.copies()): |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1759 repo.dirstate.copy(None, f) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1760 for f in r: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1761 repo.dirstate.remove(f) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1762 # if the patch excludes a modified file, mark that |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1763 # file with mtime=0 so status can see it. |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1764 mm = [] |
18054
b35e3364f94a
check-code: there must also be whitespace between ')' and operator
Mads Kiilerich <madski@unity3d.com>
parents:
18011
diff
changeset
|
1765 for i in xrange(len(m) - 1, -1, -1): |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1766 if not matchfn(m[i]): |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1767 mm.append(m[i]) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1768 del m[i] |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1769 for f in m: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1770 repo.dirstate.normal(f) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1771 for f in mm: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1772 repo.dirstate.normallookup(f) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1773 for f in forget: |
14434
cc8c09855d19
dirstate: rename forget to drop
Matt Mackall <mpm@selenic.com>
parents:
14424
diff
changeset
|
1774 repo.dirstate.drop(f) |
1808 | 1775 |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1776 user = ph.user or changes[1] |
5673
dd3ce7515f4d
mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents:
5645
diff
changeset
|
1777 |
16026
31c02546e6de
qrefresh: keep changeset phase during refresh
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16017
diff
changeset
|
1778 oldphase = repo[top].phase() |
31c02546e6de
qrefresh: keep changeset phase during refresh
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16017
diff
changeset
|
1779 |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1780 # assumes strip can roll itself back if interrupted |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16428
diff
changeset
|
1781 repo.setparents(*cparents) |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1782 self.applied.pop() |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
1783 self.applieddirty = True |
22057
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22049
diff
changeset
|
1784 strip(self.ui, repo, [top], update=False, backup=False) |
24997
12f3c7144a39
mq: use dirstateguard instead of dirstate.invalidate (qrefresh)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24996
diff
changeset
|
1785 dsguard.close() |
12f3c7144a39
mq: use dirstateguard instead of dirstate.invalidate (qrefresh)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24996
diff
changeset
|
1786 finally: |
12f3c7144a39
mq: use dirstateguard instead of dirstate.invalidate (qrefresh)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24996
diff
changeset
|
1787 release(dsguard) |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1788 |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1789 try: |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1790 # might be nice to attempt to roll back strip after this |
16100
24df9338aa01
mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents:
16064
diff
changeset
|
1791 |
21236
49148d7868df
qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21235
diff
changeset
|
1792 defaultmsg = "[mq]: %s" % patchfn |
22003
cbbd957358ff
mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
1793 editor = cmdutil.getcommiteditor(editform=editform) |
21422
edc6ced48d2d
mq: fold the code paths to invoke editor into specific logic (qrefresh/qfold)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21421
diff
changeset
|
1794 if edit: |
21423
7d408720453d
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qrefresh/qfold)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21422
diff
changeset
|
1795 def finishdesc(desc): |
21236
49148d7868df
qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21235
diff
changeset
|
1796 if desc.rstrip(): |
49148d7868df
qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21235
diff
changeset
|
1797 ph.setmessage(desc) |
49148d7868df
qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21235
diff
changeset
|
1798 return desc |
49148d7868df
qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21235
diff
changeset
|
1799 return defaultmsg |
21423
7d408720453d
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qrefresh/qfold)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21422
diff
changeset
|
1800 # i18n: this message is shown in editor with "HG: " prefix |
7d408720453d
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qrefresh/qfold)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21422
diff
changeset
|
1801 extramsg = _('Leave message empty to use default message.') |
7d408720453d
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qrefresh/qfold)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21422
diff
changeset
|
1802 editor = cmdutil.getcommiteditor(finishdesc=finishdesc, |
22003
cbbd957358ff
mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
1803 extramsg=extramsg, |
cbbd957358ff
mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
1804 editform=editform) |
21236
49148d7868df
qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21235
diff
changeset
|
1805 message = msg or "\n".join(ph.message) |
49148d7868df
qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21235
diff
changeset
|
1806 elif not msg: |
21235
51069bf6366b
qrefresh: relocate message/patch-header handling to delay message determination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21234
diff
changeset
|
1807 if not ph.message: |
21236
49148d7868df
qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21235
diff
changeset
|
1808 message = defaultmsg |
21235
51069bf6366b
qrefresh: relocate message/patch-header handling to delay message determination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21234
diff
changeset
|
1809 else: |
51069bf6366b
qrefresh: relocate message/patch-header handling to delay message determination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21234
diff
changeset
|
1810 message = "\n".join(ph.message) |
51069bf6366b
qrefresh: relocate message/patch-header handling to delay message determination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21234
diff
changeset
|
1811 else: |
51069bf6366b
qrefresh: relocate message/patch-header handling to delay message determination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21234
diff
changeset
|
1812 message = msg |
51069bf6366b
qrefresh: relocate message/patch-header handling to delay message determination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21234
diff
changeset
|
1813 ph.setmessage(msg) |
51069bf6366b
qrefresh: relocate message/patch-header handling to delay message determination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21234
diff
changeset
|
1814 |
16100
24df9338aa01
mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents:
16064
diff
changeset
|
1815 # Ensure we create a new changeset in the same phase than |
24df9338aa01
mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents:
16064
diff
changeset
|
1816 # the old one. |
27001
c07a2fd31970
mq: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
27000
diff
changeset
|
1817 lock = tr = None |
c07a2fd31970
mq: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
27000
diff
changeset
|
1818 try: |
c07a2fd31970
mq: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
27000
diff
changeset
|
1819 lock = repo.lock() |
c07a2fd31970
mq: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
27000
diff
changeset
|
1820 tr = repo.transaction('mq') |
27000
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1821 n = newcommit(repo, oldphase, message, user, ph.date, |
21236
49148d7868df
qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21235
diff
changeset
|
1822 match=match, force=True, editor=editor) |
27000
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1823 # only write patch after a successful commit |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1824 c = [list(x) for x in refreshchanges] |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1825 if inclsubs: |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1826 self.putsubstate2changes(substatestate, c) |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1827 chunks = patchmod.diff(repo, patchparent, |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1828 changes=c, opts=diffopts) |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1829 comments = str(ph) |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1830 if comments: |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1831 patchf.write(comments) |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1832 for chunk in chunks: |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1833 patchf.write(chunk) |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1834 patchf.close() |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1835 |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1836 marks = repo._bookmarks |
33489
870560c759ed
bookmark: use 'applychanges' in the mq extension
Boris Feld <boris.feld@octobus.net>
parents:
32375
diff
changeset
|
1837 marks.applychanges(repo, tr, [(bm, n) for bm in bmlist]) |
27001
c07a2fd31970
mq: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
27000
diff
changeset
|
1838 tr.close() |
27000
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1839 |
05d8db5d2116
mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26943
diff
changeset
|
1840 self.applied.append(statusentry(n, patchfn)) |
27001
c07a2fd31970
mq: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
27000
diff
changeset
|
1841 finally: |
30070
3006d0d26ad3
mq: release lock after transaction in qrefresh
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29968
diff
changeset
|
1842 lockmod.release(tr, lock) |
16705
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16699
diff
changeset
|
1843 except: # re-raises |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1844 ctx = repo[cparents[0]] |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1845 repo.dirstate.rebuild(ctx.node(), ctx.manifest()) |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
1846 self.savedirty() |
26780 | 1847 self.ui.warn(_('qrefresh interrupted while patch was popped! ' |
10366
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1848 '(revert --all, qpush to recover)\n')) |
d355cebde5e6
mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10274
diff
changeset
|
1849 raise |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4906
diff
changeset
|
1850 finally: |
8112
6ee71f78497c
switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8076
diff
changeset
|
1851 wlock.release() |
7401
41e87b4d0c9d
mq: recover more gracefully from interrupted qrefresh (issue1216)
Brendan Cully <brendan@kublai.com>
parents:
7400
diff
changeset
|
1852 self.removeundo(repo) |
1808 | 1853 |
1854 def init(self, repo, create=False): | |
4071
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
1855 if not create and os.path.isdir(self.path): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1856 raise error.Abort(_("patch queue directory already exists")) |
4071
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
1857 try: |
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
1858 os.mkdir(self.path) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25469
diff
changeset
|
1859 except OSError as inst: |
4071
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
1860 if inst.errno != errno.EEXIST or not create: |
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
1861 raise |
1808 | 1862 if create: |
1863 return self.qrepo(create=True) | |
1864 | |
1865 def unapplied(self, repo, patch=None): | |
1866 if patch and patch not in self.series: | |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
1867 raise error.Abort(_("patch %s is not in series file") % patch) |
1808 | 1868 if not patch: |
14586
af91cb281975
mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents:
14585
diff
changeset
|
1869 start = self.seriesend() |
1808 | 1870 else: |
1871 start = self.series.index(patch) + 1 | |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
1872 unapplied = [] |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
1873 for i in xrange(start, len(self.series)): |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
1874 pushable, reason = self.pushable(i) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
1875 if pushable: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
1876 unapplied.append((i, self.series[i])) |
14579
f7b25764d974
mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents:
14578
diff
changeset
|
1877 self.explainpushable(i) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
1878 return unapplied |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
1879 |
4239
417c2068cb92
Simplified qseries and hg qapplied to fix some bugs caused by optimization:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4238
diff
changeset
|
1880 def qseries(self, repo, missing=None, start=0, length=None, status=None, |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
1881 summary=False): |
10824
18def0d5692d
qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10823
diff
changeset
|
1882 def displayname(pfx, patchname, state): |
10932
29c39fe2491b
mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10890
diff
changeset
|
1883 if pfx: |
29c39fe2491b
mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10890
diff
changeset
|
1884 self.ui.write(pfx) |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
1885 if summary: |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
1886 ph = patchheader(self.join(patchname), self.plainmode) |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
1887 if ph.message: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
1888 msg = ph.message[0] |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
1889 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
1890 msg = '' |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
1891 |
11327
6c469f2f9f12
mq: use ui.formatted() instead of ui.plain().
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11321
diff
changeset
|
1892 if self.ui.formatted(): |
12689
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12682
diff
changeset
|
1893 width = self.ui.termwidth() - len(pfx) - len(patchname) - 2 |
9874
c51494c53841
qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9867
diff
changeset
|
1894 if width > 0: |
c51494c53841
qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9867
diff
changeset
|
1895 msg = util.ellipsis(msg, width) |
c51494c53841
qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9867
diff
changeset
|
1896 else: |
c51494c53841
qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9867
diff
changeset
|
1897 msg = '' |
10932
29c39fe2491b
mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10890
diff
changeset
|
1898 self.ui.write(patchname, label='qseries.' + state) |
29c39fe2491b
mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10890
diff
changeset
|
1899 self.ui.write(': ') |
29c39fe2491b
mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10890
diff
changeset
|
1900 self.ui.write(msg, label='qseries.message.' + state) |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
1901 else: |
10932
29c39fe2491b
mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10890
diff
changeset
|
1902 self.ui.write(patchname, label='qseries.' + state) |
29c39fe2491b
mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
10890
diff
changeset
|
1903 self.ui.write('\n') |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
1904 |
8152
08e1baf924ca
replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
1905 applied = set([p.name for p in self.applied]) |
4239
417c2068cb92
Simplified qseries and hg qapplied to fix some bugs caused by optimization:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4238
diff
changeset
|
1906 if length is None: |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
1907 length = len(self.series) - start |
1808 | 1908 if not missing: |
9016
894c5b4be275
mq: align columns in verbose qseries output.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
8948
diff
changeset
|
1909 if self.ui.verbose: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
1910 idxwidth = len(str(start + length - 1)) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
1911 for i in xrange(start, start + length): |
4239
417c2068cb92
Simplified qseries and hg qapplied to fix some bugs caused by optimization:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4238
diff
changeset
|
1912 patch = self.series[i] |
417c2068cb92
Simplified qseries and hg qapplied to fix some bugs caused by optimization:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4238
diff
changeset
|
1913 if patch in applied: |
10824
18def0d5692d
qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10823
diff
changeset
|
1914 char, state = 'A', 'applied' |
4239
417c2068cb92
Simplified qseries and hg qapplied to fix some bugs caused by optimization:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4238
diff
changeset
|
1915 elif self.pushable(i)[0]: |
10824
18def0d5692d
qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10823
diff
changeset
|
1916 char, state = 'U', 'unapplied' |
4239
417c2068cb92
Simplified qseries and hg qapplied to fix some bugs caused by optimization:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4238
diff
changeset
|
1917 else: |
10824
18def0d5692d
qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10823
diff
changeset
|
1918 char, state = 'G', 'guarded' |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
1919 pfx = '' |
1808 | 1920 if self.ui.verbose: |
10824
18def0d5692d
qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10823
diff
changeset
|
1921 pfx = '%*d %s ' % (idxwidth, i, char) |
18def0d5692d
qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10823
diff
changeset
|
1922 elif status and status != char: |
4238
ce6c364ebb2a
Fix issue443: inconsistent output of "hg qunapplied -v"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4173
diff
changeset
|
1923 continue |
10824
18def0d5692d
qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10823
diff
changeset
|
1924 displayname(pfx, patch, state) |
1808 | 1925 else: |
2794
86c54b7cd331
mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2792
diff
changeset
|
1926 msng_list = [] |
1808 | 1927 for root, dirs, files in os.walk(self.path): |
1928 d = root[len(self.path) + 1:] | |
1929 for f in files: | |
1930 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
|
1931 if (fl not in self.series and |
14588
bd3d75a03f80
mq: rename status_path to statuspath
Adrian Buehlmann <adrian@cadifra.com>
parents:
14587
diff
changeset
|
1932 fl not in (self.statuspath, self.seriespath, |
14589
7d59ee9e711b
mq: rename guards_path to guardspath
Adrian Buehlmann <adrian@cadifra.com>
parents:
14588
diff
changeset
|
1933 self.guardspath) |
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
|
1934 and not fl.startswith('.')): |
2794
86c54b7cd331
mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2792
diff
changeset
|
1935 msng_list.append(fl) |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8188
diff
changeset
|
1936 for x in sorted(msng_list): |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
1937 pfx = self.ui.verbose and ('D ') or '' |
10824
18def0d5692d
qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10823
diff
changeset
|
1938 displayname(pfx, x, 'missing') |
1808 | 1939 |
1940 def issaveline(self, l): | |
2816
52516e48e3f3
Update qsave to use StatusEntry; don't throw exception on bad status lines.
Brendan Cully <brendan@kublai.com>
parents:
2804
diff
changeset
|
1941 if l.name == '.hg.patches.save.line': |
1808 | 1942 return True |
1943 | |
1944 def qrepo(self, create=False): | |
19064
743daa601445
mq: do not inherit settings form base repo in mqrepo (Fixes issue2358)
Simon Heimberg <simohe@besonet.ch>
parents:
18958
diff
changeset
|
1945 ui = self.baseui.copy() |
2819 | 1946 if create or os.path.isdir(self.join(".hg")): |
11965
77f1f206e135
mq: don't inherit default and default-push paths with --mq (issue2333)
Mads Kiilerich <mads@kiilerich.com>
parents:
11715
diff
changeset
|
1947 return hg.repository(ui, path=self.path, create=create) |
1808 | 1948 |
1949 def restore(self, repo, rev, delete=None, qupdate=None): | |
10681
3f6a6407a3c7
mq: use context API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10680
diff
changeset
|
1950 desc = repo[rev].description().strip() |
1808 | 1951 lines = desc.splitlines() |
1952 i = 0 | |
1953 datastart = None | |
1954 series = [] | |
1955 applied = [] | |
1956 qpp = None | |
8632
9e055cfdd620
replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
1957 for i, line in enumerate(lines): |
9e055cfdd620
replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
1958 if line == 'Patch Data:': |
1808 | 1959 datastart = i + 1 |
8632
9e055cfdd620
replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
1960 elif line.startswith('Dirstate:'): |
9e055cfdd620
replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
1961 l = line.rstrip() |
1808 | 1962 l = l[10:].split(' ') |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
1963 qpp = [bin(x) for x in l] |
13031
3da456d0c885
code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents:
13005
diff
changeset
|
1964 elif datastart is not None: |
8632
9e055cfdd620
replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
1965 l = line.rstrip() |
10683
cfbf064f0069
mq: qsave creates entries with the left part empty (':patchname')
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10682
diff
changeset
|
1966 n, name = l.split(':', 1) |
cfbf064f0069
mq: qsave creates entries with the left part empty (':patchname')
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10682
diff
changeset
|
1967 if n: |
cfbf064f0069
mq: qsave creates entries with the left part empty (':patchname')
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10682
diff
changeset
|
1968 applied.append(statusentry(bin(n), name)) |
3185
b3e103c388fc
mq: don't write applied patches into series twice in restore
Brendan Cully <brendan@kublai.com>
parents:
3184
diff
changeset
|
1969 else: |
10682
8ed350051896
mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10681
diff
changeset
|
1970 series.append(l) |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8525
diff
changeset
|
1971 if datastart is None: |
16929
4b02d7006169
mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents:
16867
diff
changeset
|
1972 self.ui.warn(_("no saved patch data found\n")) |
1808 | 1973 return 1 |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
1974 self.ui.warn(_("restoring status: %s\n") % lines[0]) |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
1975 self.fullseries = series |
1808 | 1976 self.applied = applied |
14575
845c864200d0
mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14574
diff
changeset
|
1977 self.parseseries() |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
1978 self.seriesdirty = True |
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
1979 self.applieddirty = True |
1808 | 1980 heads = repo.changelog.heads() |
1981 if delete: | |
1982 if rev not in heads: | |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
1983 self.ui.warn(_("save entry has children, leaving it alone\n")) |
1808 | 1984 else: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
1985 self.ui.warn(_("removing save entry %s\n") % short(rev)) |
1808 | 1986 pp = repo.dirstate.parents() |
1987 if rev in pp: | |
1988 update = True | |
1989 else: | |
1990 update = False | |
22057
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22049
diff
changeset
|
1991 strip(self.ui, repo, [rev], update=update, backup=False) |
1808 | 1992 if qpp: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
1993 self.ui.warn(_("saved queue repository parents: %s %s\n") % |
6217
fe8dbbe9520d
Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents:
6195
diff
changeset
|
1994 (short(qpp[0]), short(qpp[1]))) |
1808 | 1995 if qupdate: |
12848
f7f1a146f407
qrestore: trying to improve the English
timeless <timeless@gmail.com>
parents:
12775
diff
changeset
|
1996 self.ui.status(_("updating queue directory\n")) |
1808 | 1997 r = self.qrepo() |
1998 if not r: | |
16929
4b02d7006169
mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents:
16867
diff
changeset
|
1999 self.ui.warn(_("unable to load queue repository\n")) |
1808 | 2000 return 1 |
2808
30f59f4a327e
Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents:
2804
diff
changeset
|
2001 hg.clean(r, qpp[0]) |
1808 | 2002 |
2003 def save(self, repo, msg=None): | |
10686
0c68c2c36ed8
mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10685
diff
changeset
|
2004 if not self.applied: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
2005 self.ui.warn(_("save: no patches applied, exiting\n")) |
1808 | 2006 return 1 |
2007 if self.issaveline(self.applied[-1]): | |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
2008 self.ui.warn(_("status is already saved\n")) |
1808 | 2009 return 1 |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
2010 |
1808 | 2011 if not msg: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
2012 msg = _("hg patches saved state") |
1808 | 2013 else: |
2014 msg = "hg patches: " + msg.rstrip('\r\n') | |
2015 r = self.qrepo() | |
2016 if r: | |
2017 pp = r.dirstate.parents() | |
6217
fe8dbbe9520d
Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents:
6195
diff
changeset
|
2018 msg += "\nDirstate: %s %s" % (hex(pp[0]), hex(pp[1])) |
1808 | 2019 msg += "\n\nPatch Data:\n" |
10679
35abaea778dc
mq: simplify commit message generation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10678
diff
changeset
|
2020 msg += ''.join('%s\n' % x for x in self.applied) |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
2021 msg += ''.join(':%s\n' % x for x in self.fullseries) |
10679
35abaea778dc
mq: simplify commit message generation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10678
diff
changeset
|
2022 n = repo.commit(msg, force=True) |
1808 | 2023 if not n: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
2024 self.ui.warn(_("repo commit failed\n")) |
1808 | 2025 return 1 |
10684
485c1d7f8a77
mq: fix coding style (missing space)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10683
diff
changeset
|
2026 self.applied.append(statusentry(n, '.hg.patches.save.line')) |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
2027 self.applieddirty = True |
4209
dbc3846c09a1
Merge with -stable, fix small test failure
Matt Mackall <mpm@selenic.com>
parents:
4207
diff
changeset
|
2028 self.removeundo(repo) |
1808 | 2029 |
14585
74bf9c84cfd0
mq: rename full_series_end to fullseriesend
Adrian Buehlmann <adrian@cadifra.com>
parents:
14584
diff
changeset
|
2030 def fullseriesend(self): |
10686
0c68c2c36ed8
mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10685
diff
changeset
|
2031 if self.applied: |
2780
ee48e5ef8753
Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents:
2765
diff
changeset
|
2032 p = self.applied[-1].name |
14574
12fba7bcb4f1
mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14573
diff
changeset
|
2033 end = self.findseries(p) |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8525
diff
changeset
|
2034 if end is None: |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
2035 return len(self.fullseries) |
2698
c1123e83c8e2
mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents:
2697
diff
changeset
|
2036 return end + 1 |
c1123e83c8e2
mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents:
2697
diff
changeset
|
2037 return 0 |
c1123e83c8e2
mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents:
2697
diff
changeset
|
2038 |
14586
af91cb281975
mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents:
14585
diff
changeset
|
2039 def seriesend(self, all_patches=False): |
4406
f700ea2b0689
mq: fix qtop failure when the series ends with guarded patches.
Patrick Mezard <pmezard@gmail.com>
parents:
4341
diff
changeset
|
2040 """If all_patches is False, return the index of the next pushable patch |
f700ea2b0689
mq: fix qtop failure when the series ends with guarded patches.
Patrick Mezard <pmezard@gmail.com>
parents:
4341
diff
changeset
|
2041 in the series, or the series length. If all_patches is True, return the |
f700ea2b0689
mq: fix qtop failure when the series ends with guarded patches.
Patrick Mezard <pmezard@gmail.com>
parents:
4341
diff
changeset
|
2042 index of the first patch past the last applied one. |
f700ea2b0689
mq: fix qtop failure when the series ends with guarded patches.
Patrick Mezard <pmezard@gmail.com>
parents:
4341
diff
changeset
|
2043 """ |
1808 | 2044 end = 0 |
19500
a96565abbd59
mq: rename next() to nextpatch() to avoid confusing a future check-code patch
Augie Fackler <raf@durin42.com>
parents:
19481
diff
changeset
|
2045 def nextpatch(start): |
10687
583adcf63f80
mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10686
diff
changeset
|
2046 if all_patches or start >= len(self.series): |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2047 return start |
10687
583adcf63f80
mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10686
diff
changeset
|
2048 for i in xrange(start, len(self.series)): |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2049 p, reason = self.pushable(i) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2050 if p: |
16063
c36db39b3fee
mq: fix qnext when all remaining patches are guarded
Patrick Mezard <pmezard@gmail.com>
parents:
16048
diff
changeset
|
2051 return i |
14579
f7b25764d974
mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents:
14578
diff
changeset
|
2052 self.explainpushable(i) |
16063
c36db39b3fee
mq: fix qnext when all remaining patches are guarded
Patrick Mezard <pmezard@gmail.com>
parents:
16048
diff
changeset
|
2053 return len(self.series) |
10686
0c68c2c36ed8
mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10685
diff
changeset
|
2054 if self.applied: |
2780
ee48e5ef8753
Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents:
2765
diff
changeset
|
2055 p = self.applied[-1].name |
1808 | 2056 try: |
2057 end = self.series.index(p) | |
2058 except ValueError: | |
2059 return 0 | |
19500
a96565abbd59
mq: rename next() to nextpatch() to avoid confusing a future check-code patch
Augie Fackler <raf@durin42.com>
parents:
19481
diff
changeset
|
2060 return nextpatch(end + 1) |
a96565abbd59
mq: rename next() to nextpatch() to avoid confusing a future check-code patch
Augie Fackler <raf@durin42.com>
parents:
19481
diff
changeset
|
2061 return nextpatch(end) |
1808 | 2062 |
2063 def appliedname(self, index): | |
2780
ee48e5ef8753
Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents:
2765
diff
changeset
|
2064 pname = self.applied[index].name |
1808 | 2065 if not self.ui.verbose: |
2677
ec05ce9cbf47
mq: uniform verbose display of patche[s].
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents:
2664
diff
changeset
|
2066 p = pname |
ec05ce9cbf47
mq: uniform verbose display of patche[s].
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents:
2664
diff
changeset
|
2067 else: |
2941 | 2068 p = str(self.series.index(pname)) + " " + pname |
1808 | 2069 return p |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
2070 |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2071 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
|
2072 force=None, git=False): |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2073 def checkseries(patchname): |
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2074 if patchname in self.series: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2075 raise error.Abort(_('patch %s is already in the series file') |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2076 % patchname) |
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2077 |
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2078 if rev: |
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2079 if files: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2080 raise error.Abort(_('option "-r" not valid when importing ' |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2081 'files')) |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14298
diff
changeset
|
2082 rev = scmutil.revrange(repo, rev) |
9032
1fa80c5428b8
compat: use 'key' argument instead of 'cmp' when sorting a list
Alejandro Santos <alejolp@alejolp.com>
parents:
9016
diff
changeset
|
2083 rev.sort(reverse=True) |
16987
54295c87eefc
mq: abort if no files or revisions are specified for qimport
Thomas Arendsen Hein <thomas@intevation.de>
parents:
16929
diff
changeset
|
2084 elif not files: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2085 raise error.Abort(_('no files or revisions specified')) |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2086 if (len(files) > 1 or len(rev) > 1) and patchname: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2087 raise error.Abort(_('option "-n" not valid when importing multiple ' |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2088 'patches')) |
16119
5de83d9ca79c
mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents:
16101
diff
changeset
|
2089 imported = [] |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2090 if rev: |
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2091 # If mq patches are applied, we can only import revisions |
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2092 # that form a linear path to qbase. |
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2093 # Otherwise, they should form a linear path to a head. |
22821
5d4c17d11d7e
qimport: use `first` and `last` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22819
diff
changeset
|
2094 heads = repo.changelog.heads(repo.changelog.node(rev.first())) |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2095 if len(heads) > 1: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2096 raise error.Abort(_('revision %d is the root of more than one ' |
22819
602aa2b98628
mq: use `last` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22803
diff
changeset
|
2097 'branch') % rev.last()) |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2098 if self.applied: |
22821
5d4c17d11d7e
qimport: use `first` and `last` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22819
diff
changeset
|
2099 base = repo.changelog.node(rev.first()) |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
2100 if base in [n.node for n in self.applied]: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2101 raise error.Abort(_('revision %d is already managed') |
23128
b6f7cf47f5d1
mq: do not call [0] on revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22925
diff
changeset
|
2102 % rev.first()) |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
2103 if heads != [self.applied[-1].node]: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2104 raise error.Abort(_('revision %d is not the parent of ' |
22821
5d4c17d11d7e
qimport: use `first` and `last` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22819
diff
changeset
|
2105 'the queue') % rev.first()) |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
2106 base = repo.changelog.rev(self.applied[0].node) |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2107 lastparent = repo.changelog.parentrevs(base)[0] |
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2108 else: |
22821
5d4c17d11d7e
qimport: use `first` and `last` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22819
diff
changeset
|
2109 if heads != [repo.changelog.node(rev.first())]: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2110 raise error.Abort(_('revision %d has unmanaged children') |
22821
5d4c17d11d7e
qimport: use `first` and `last` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22819
diff
changeset
|
2111 % rev.first()) |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2112 lastparent = None |
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2113 |
10184
8a47347d298b
mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents:
10114
diff
changeset
|
2114 diffopts = self.diffopts({'git': git}) |
27865
f6979b8f33c1
with: use context manager for transaction in qimport
Bryan O'Sullivan <bryano@fb.com>
parents:
27864
diff
changeset
|
2115 with repo.transaction('qimport') as tr: |
22049
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2116 for r in rev: |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2117 if not repo[r].mutable(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2118 raise error.Abort(_('revision %d is not mutable') % r, |
29968
0342bf292f73
mq: use single quotes in use warning
timeless <timeless@mozdev.org>
parents:
29841
diff
changeset
|
2119 hint=_("see 'hg help phases' " |
22049
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2120 'for details')) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2121 p1, p2 = repo.changelog.parentrevs(r) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2122 n = repo.changelog.node(r) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2123 if p2 != nullrev: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2124 raise error.Abort(_('cannot import merge revision %d') |
22049
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2125 % r) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2126 if lastparent and lastparent != r: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2127 raise error.Abort(_('revision %d is not the parent of ' |
22049
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2128 '%d') |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2129 % (r, lastparent)) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2130 lastparent = p1 |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2131 |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2132 if not patchname: |
27918
c7cd551f07d0
mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents:
27865
diff
changeset
|
2133 patchname = self.makepatchname( |
27513
707cdf2c3700
mq: use fallback patch name if no alpha-numeric in summary line (issue5025)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26831
diff
changeset
|
2134 repo[r].description().split('\n', 1)[0], |
707cdf2c3700
mq: use fallback patch name if no alpha-numeric in summary line (issue5025)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26831
diff
changeset
|
2135 '%d.diff' % r) |
22049
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2136 checkseries(patchname) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2137 self.checkpatchname(patchname, force) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2138 self.fullseries.insert(0, patchname) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2139 |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2140 patchf = self.opener(patchname, "w") |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2141 cmdutil.export(repo, [n], fp=patchf, opts=diffopts) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2142 patchf.close() |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2143 |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2144 se = statusentry(n, patchname) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2145 self.applied.insert(0, se) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2146 |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2147 self.added.append(patchname) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2148 imported.append(patchname) |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2149 patchname = None |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2150 if rev and repo.ui.configbool('mq', 'secret', False): |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2151 # if we added anything with --rev, move the secret root |
22070
c1ca47204590
phase: add a transaction argument to retractboundary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22069
diff
changeset
|
2152 phases.retractboundary(repo, tr, phases.secret, [n]) |
22049
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2153 self.parseseries() |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2154 self.applieddirty = True |
86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22048
diff
changeset
|
2155 self.seriesdirty = True |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2156 |
10687
583adcf63f80
mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10686
diff
changeset
|
2157 for i, filename in enumerate(files): |
1808 | 2158 if existing: |
3547 | 2159 if filename == '-': |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2160 raise error.Abort(_('-e is incompatible with import from -') |
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2161 ) |
11699
da0b9109186d
mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11644
diff
changeset
|
2162 filename = normname(filename) |
14584
3343a74eea4e
mq: rename check_reserved_name to checkreservedname
Adrian Buehlmann <adrian@cadifra.com>
parents:
14583
diff
changeset
|
2163 self.checkreservedname(filename) |
20402 | 2164 if util.url(filename).islocal(): |
20394
a817964e7fdf
qimport: allow importing URLs
Matt Mackall <mpm@selenic.com>
parents:
20119
diff
changeset
|
2165 originpath = self.join(filename) |
a817964e7fdf
qimport: allow importing URLs
Matt Mackall <mpm@selenic.com>
parents:
20119
diff
changeset
|
2166 if not os.path.isfile(originpath): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2167 raise error.Abort( |
20402 | 2168 _("patch %s does not exist") % filename) |
11699
da0b9109186d
mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11644
diff
changeset
|
2169 |
da0b9109186d
mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11644
diff
changeset
|
2170 if patchname: |
14423 | 2171 self.checkpatchname(patchname, force) |
11699
da0b9109186d
mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11644
diff
changeset
|
2172 |
da0b9109186d
mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11644
diff
changeset
|
2173 self.ui.write(_('renaming %s to %s\n') |
da0b9109186d
mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11644
diff
changeset
|
2174 % (filename, patchname)) |
11701
84fb29f5e0d2
mq: fix qimport --name --existing --force on win32
Patrick Mezard <pmezard@gmail.com>
parents:
11700
diff
changeset
|
2175 util.rename(originpath, self.join(patchname)) |
11699
da0b9109186d
mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11644
diff
changeset
|
2176 else: |
da0b9109186d
mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11644
diff
changeset
|
2177 patchname = filename |
da0b9109186d
mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11644
diff
changeset
|
2178 |
1808 | 2179 else: |
14395
dc961471efde
mq: check patch name is valid before reading imported file
Idan Kamara <idankk86@gmail.com>
parents:
14382
diff
changeset
|
2180 if filename == '-' and not patchname: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2181 raise error.Abort(_('need --name to import a patch from -')) |
14395
dc961471efde
mq: check patch name is valid before reading imported file
Idan Kamara <idankk86@gmail.com>
parents:
14382
diff
changeset
|
2182 elif not patchname: |
14396
170747a3e139
mq: strip all leading slashes from url when importing
Idan Kamara <idankk86@gmail.com>
parents:
14395
diff
changeset
|
2183 patchname = normname(os.path.basename(filename.rstrip('/'))) |
14423 | 2184 self.checkpatchname(patchname, force) |
1808 | 2185 try: |
3547 | 2186 if filename == '-': |
14636
b98063487a6f
mq: use ui.fin when importing patch from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14635
diff
changeset
|
2187 text = self.ui.fin.read() |
3547 | 2188 else: |
17887
0e2846b2482c
url: use open and not url.open for local files (issue3624)
Siddharth Agarwal <sid0@fb.com>
parents:
17773
diff
changeset
|
2189 fp = hg.openpath(self.ui, filename) |
13400
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13373
diff
changeset
|
2190 text = fp.read() |
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13373
diff
changeset
|
2191 fp.close() |
7421
4c4324476be6
Catch both IOError and OSError, fix regression introduced by 8046f0a070a6
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7414
diff
changeset
|
2192 except (OSError, IOError): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2193 raise error.Abort(_("unable to read file %s") % filename) |
3133
15fde1970003
qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents:
3091
diff
changeset
|
2194 patchf = self.opener(patchname, "w") |
1808 | 2195 patchf.write(text) |
13400
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13373
diff
changeset
|
2196 patchf.close() |
7160
1b7b21b634f2
mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents:
7158
diff
changeset
|
2197 if not force: |
1b7b21b634f2
mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents:
7158
diff
changeset
|
2198 checkseries(patchname) |
1b7b21b634f2
mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents:
7158
diff
changeset
|
2199 if patchname not in self.series: |
14585
74bf9c84cfd0
mq: rename full_series_end to fullseriesend
Adrian Buehlmann <adrian@cadifra.com>
parents:
14584
diff
changeset
|
2200 index = self.fullseriesend() + i |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
2201 self.fullseries[index:index] = [patchname] |
14575
845c864200d0
mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14574
diff
changeset
|
2202 self.parseseries() |
14593
599a72895c0d
mq: rename series_dirty to seriesdirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14592
diff
changeset
|
2203 self.seriesdirty = True |
7597
81f68565281c
mq, i18n: mark strings for translation
Martin Geisler <mg@daimi.au.dk>
parents:
7454
diff
changeset
|
2204 self.ui.warn(_("adding %s to series file\n") % patchname) |
11462
1b82a26635d7
mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents:
11439
diff
changeset
|
2205 self.added.append(patchname) |
16119
5de83d9ca79c
mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents:
16101
diff
changeset
|
2206 imported.append(patchname) |
3133
15fde1970003
qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents:
3091
diff
changeset
|
2207 patchname = None |
1808 | 2208 |
13409
9e5df8719ad4
mq: remove undo after a qimport
André Sintzoff <andre.sintzoff@gmail.com>
parents:
13400
diff
changeset
|
2209 self.removeundo(repo) |
16119
5de83d9ca79c
mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents:
16101
diff
changeset
|
2210 return imported |
13409
9e5df8719ad4
mq: remove undo after a qimport
André Sintzoff <andre.sintzoff@gmail.com>
parents:
13400
diff
changeset
|
2211 |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2212 def fixkeepchangesopts(ui, opts): |
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2213 if (not ui.configbool('mq', 'keepchanges') or opts.get('force') |
16656
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
2214 or opts.get('exact')): |
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
2215 return opts |
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
2216 opts = dict(opts) |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2217 opts['keep_changes'] = True |
16656
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
2218 return opts |
4ae3ba9e4d7a
mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents:
16655
diff
changeset
|
2219 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2220 @command("qdelete|qremove|qrm", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2221 [('k', 'keep', None, _('keep patch file')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2222 ('r', 'rev', [], |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2223 _('stop managing a revision (DEPRECATED)'), _('REV'))], |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2224 _('hg qdelete [-k] [PATCH]...')) |
3373
9851f46d6ecc
mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents:
3243
diff
changeset
|
2225 def delete(ui, repo, *patches, **opts): |
2905
790fd342b6c7
Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents:
2904
diff
changeset
|
2226 """remove patches from queue |
2752
5dfeda163bb7
Add -f option to qdelete, to remove patch file.
Brendan Cully <brendan@kublai.com>
parents:
2751
diff
changeset
|
2227 |
15798
e6c44dbe902f
mq: Document that qdel requires exact patch identifiers
Olav Reinert <seroton10@gmail.com>
parents:
15322
diff
changeset
|
2228 The patches must not be applied, and at least one patch is required. Exact |
e6c44dbe902f
mq: Document that qdel requires exact patch identifiers
Olav Reinert <seroton10@gmail.com>
parents:
15322
diff
changeset
|
2229 patch identifiers must be given. With -k/--keep, the patch files are |
e6c44dbe902f
mq: Document that qdel requires exact patch identifiers
Olav Reinert <seroton10@gmail.com>
parents:
15322
diff
changeset
|
2230 preserved in the patch directory. |
8904
8be38b624902
mq: no longer mention the deprecated qdelete's --revision option
Cédric Duval <cedricduval@free.fr>
parents:
8894
diff
changeset
|
2231 |
8be38b624902
mq: no longer mention the deprecated qdelete's --revision option
Cédric Duval <cedricduval@free.fr>
parents:
8894
diff
changeset
|
2232 To stop managing a patch and move it into permanent history, |
11307
7f72031d4047
mq: use hg reST role some more
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
2233 use the :hg:`qfinish` command.""" |
2724
9c41ae1908c7
mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents:
2723
diff
changeset
|
2234 q = repo.mq |
3373
9851f46d6ecc
mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents:
3243
diff
changeset
|
2235 q.delete(repo, patches, opts) |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
2236 q.savedirty() |
1808 | 2237 return 0 |
2238 | |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2239 @command("qapplied", |
16188
6b52963ced73
mq: fix qapplied --last and qprev documentation (issue3282)
Patrick Mezard <patrick@mezard.eu>
parents:
16119
diff
changeset
|
2240 [('1', 'last', None, _('show only the preceding applied patch')) |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2241 ] + seriesopts, |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2242 _('hg qapplied [-1] [-s] [PATCH]')) |
1808 | 2243 def applied(ui, repo, patch=None, **opts): |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2244 """print the patches already applied |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2245 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2246 Returns 0 on success.""" |
9364
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2247 |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2248 q = repo.mq |
9364
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2249 |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2250 if patch: |
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2251 if patch not in q.series: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2252 raise error.Abort(_("patch %s is not in series file") % patch) |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2253 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
|
2254 else: |
14586
af91cb281975
mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents:
14585
diff
changeset
|
2255 end = q.seriesend(True) |
9364
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2256 |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2257 if opts.get('last') and not end: |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2258 ui.write(_("no patches applied\n")) |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2259 return 1 |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2260 elif opts.get('last') and end == 1: |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2261 ui.write(_("only one patch applied\n")) |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2262 return 1 |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2263 elif opts.get('last'): |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2264 start = end - 2 |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2265 end = 1 |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2266 else: |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2267 start = 0 |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2268 |
12539
dece1f46f7a2
mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents:
12538
diff
changeset
|
2269 q.qseries(repo, length=end, start=start, status='A', |
dece1f46f7a2
mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents:
12538
diff
changeset
|
2270 summary=opts.get('summary')) |
dece1f46f7a2
mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents:
12538
diff
changeset
|
2271 |
1808 | 2272 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2273 @command("qunapplied", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2274 [('1', 'first', None, _('show only the first patch'))] + seriesopts, |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2275 _('hg qunapplied [-1] [-s] [PATCH]')) |
1808 | 2276 def unapplied(ui, repo, patch=None, **opts): |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2277 """print the patches not yet applied |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2278 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2279 Returns 0 on success.""" |
9364
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2280 |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2281 q = repo.mq |
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2282 if patch: |
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2283 if patch not in q.series: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2284 raise error.Abort(_("patch %s is not in series file") % patch) |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2285 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
|
2286 else: |
14586
af91cb281975
mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents:
14585
diff
changeset
|
2287 start = q.seriesend(True) |
9364
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2288 |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2289 if start == len(q.series) and opts.get('first'): |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2290 ui.write(_("all patches applied\n")) |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2291 return 1 |
c7c2dd7524dd
mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9338
diff
changeset
|
2292 |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
2293 if opts.get('first'): |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
2294 length = 1 |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
2295 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
2296 length = None |
12539
dece1f46f7a2
mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents:
12538
diff
changeset
|
2297 q.qseries(repo, start=start, length=length, status='U', |
dece1f46f7a2
mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents:
12538
diff
changeset
|
2298 summary=opts.get('summary')) |
1808 | 2299 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2300 @command("qimport", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2301 [('e', 'existing', None, _('import file in patch directory')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2302 ('n', 'name', '', |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2303 _('name of patch file'), _('NAME')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2304 ('f', 'force', None, _('overwrite existing files')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2305 ('r', 'rev', [], |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2306 _('place existing revisions under mq control'), _('REV')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2307 ('g', 'git', None, _('use git extended diff format')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2308 ('P', 'push', None, _('qpush after importing'))], |
16988
f2dbe7ba11e2
qimport: use [FILE]... because if -r is used no file is needed
Thomas Arendsen Hein <thomas@intevation.de>
parents:
16987
diff
changeset
|
2309 _('hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... [FILE]...')) |
1808 | 2310 def qimport(ui, repo, *filename, **opts): |
16152
816211dfa3a5
mq: expand qimport summary
Matt Mackall <mpm@selenic.com>
parents:
16128
diff
changeset
|
2311 """import a patch or existing changeset |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2312 |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2313 The patch is inserted into the series after the last applied |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2314 patch. If no patches have been applied, qimport prepends the patch |
6634
d6caebe9c293
mq: qimport: explain insertion point in doc string
Adrian Buehlmann <adrian@cadifra.com>
parents:
6627
diff
changeset
|
2315 to the series. |
d6caebe9c293
mq: qimport: explain insertion point in doc string
Adrian Buehlmann <adrian@cadifra.com>
parents:
6627
diff
changeset
|
2316 |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2317 The patch will have the same name as its source file unless you |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2318 give it a new one with -n/--name. |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2319 |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2320 You can register an existing patch inside the patch directory with |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2321 the -e/--existing flag. |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2322 |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2323 With -f/--force, an existing patch of the same name will be |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2324 overwritten. |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2325 |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2326 An existing changeset may be placed under mq control with -r/--rev |
19397
42fc6c7c4ad5
mq: remove reference to tip
Matt Mackall <mpm@selenic.com>
parents:
19395
diff
changeset
|
2327 (e.g. qimport --rev . -n patch will place the current revision |
42fc6c7c4ad5
mq: remove reference to tip
Matt Mackall <mpm@selenic.com>
parents:
19395
diff
changeset
|
2328 under mq control). With -g/--git, patches imported with --rev will |
42fc6c7c4ad5
mq: remove reference to tip
Matt Mackall <mpm@selenic.com>
parents:
19395
diff
changeset
|
2329 use the git diff format. See the diffs help topic for information |
42fc6c7c4ad5
mq: remove reference to tip
Matt Mackall <mpm@selenic.com>
parents:
19395
diff
changeset
|
2330 on why this is important for preserving rename/copy information |
42fc6c7c4ad5
mq: remove reference to tip
Matt Mackall <mpm@selenic.com>
parents:
19395
diff
changeset
|
2331 and permission changes. Use :hg:`qfinish` to remove changesets |
42fc6c7c4ad5
mq: remove reference to tip
Matt Mackall <mpm@selenic.com>
parents:
19395
diff
changeset
|
2332 from mq control. |
8075
1f0a5a5fff43
Update qimport help explaining how to read a patch from stdin (Issue371)
David Frey <dpfrey@shaw.ca>
parents:
8028
diff
changeset
|
2333 |
1f0a5a5fff43
Update qimport help explaining how to read a patch from stdin (Issue371)
David Frey <dpfrey@shaw.ca>
parents:
8028
diff
changeset
|
2334 To import a patch from standard input, pass - as the patch file. |
1f0a5a5fff43
Update qimport help explaining how to read a patch from stdin (Issue371)
David Frey <dpfrey@shaw.ca>
parents:
8028
diff
changeset
|
2335 When importing from standard input, a patch name must be specified |
1f0a5a5fff43
Update qimport help explaining how to read a patch from stdin (Issue371)
David Frey <dpfrey@shaw.ca>
parents:
8028
diff
changeset
|
2336 using the --name flag. |
11700
52c863295754
mq: document possible combination of -e and -n for qimport
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11699
diff
changeset
|
2337 |
11706
5fdf08b6b50c
mq: correct qimport documentation
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11701
diff
changeset
|
2338 To import an existing patch while renaming it:: |
11700
52c863295754
mq: document possible combination of -e and -n for qimport
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11699
diff
changeset
|
2339 |
52c863295754
mq: document possible combination of -e and -n for qimport
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11699
diff
changeset
|
2340 hg qimport -e existing-patch -n new-name |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2341 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2342 Returns 0 if import succeeded. |
3141
e21337e06952
mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents:
3133
diff
changeset
|
2343 """ |
27832
1e38b9d731c4
with: use context manager for lock in qimport
Bryan O'Sullivan <bryano@fb.com>
parents:
27831
diff
changeset
|
2344 with repo.lock(): # cause this may move phase |
16027
29ea059be33c
qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16026
diff
changeset
|
2345 q = repo.mq |
29ea059be33c
qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16026
diff
changeset
|
2346 try: |
16119
5de83d9ca79c
mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents:
16101
diff
changeset
|
2347 imported = q.qimport( |
5de83d9ca79c
mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents:
16101
diff
changeset
|
2348 repo, filename, patchname=opts.get('name'), |
5de83d9ca79c
mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents:
16101
diff
changeset
|
2349 existing=opts.get('existing'), force=opts.get('force'), |
5de83d9ca79c
mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents:
16101
diff
changeset
|
2350 rev=opts.get('rev'), git=opts.get('git')) |
16027
29ea059be33c
qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16026
diff
changeset
|
2351 finally: |
29ea059be33c
qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16026
diff
changeset
|
2352 q.savedirty() |
16681
0128cdb846d9
mq: qimport need wlock for --push - do that after releasing lock
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16635
diff
changeset
|
2353 |
0128cdb846d9
mq: qimport need wlock for --push - do that after releasing lock
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16635
diff
changeset
|
2354 if imported and opts.get('push') and not opts.get('rev'): |
0128cdb846d9
mq: qimport need wlock for --push - do that after releasing lock
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16635
diff
changeset
|
2355 return q.push(repo, imported[-1]) |
1808 | 2356 return 0 |
2357 | |
10480
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2358 def qinit(ui, repo, create): |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2359 """initialize a new queue repository |
2754
19041b8cbc86
Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents:
2753
diff
changeset
|
2360 |
10480
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2361 This command also creates a series file for ordering patches, and |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2362 an mq-specific .hgignore file in the queue repository, to exclude |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2363 the status and guards files (these contain mostly transient state). |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2364 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2365 Returns 0 if initialization succeeded.""" |
2724
9c41ae1908c7
mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents:
2723
diff
changeset
|
2366 q = repo.mq |
10480
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2367 r = q.init(repo, create) |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
2368 q.savedirty() |
1808 | 2369 if r: |
4071
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
2370 if not os.path.exists(r.wjoin('.hgignore')): |
23879
b88278a308c6
localrepo: remove all external users of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23877
diff
changeset
|
2371 fp = r.wvfs('.hgignore', 'w') |
6034
83633602e2c5
qinit -c: add ^\.hg and ^\.mq to .hgignore
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6027
diff
changeset
|
2372 fp.write('^\\.hg\n') |
83633602e2c5
qinit -c: add ^\.hg and ^\.mq to .hgignore
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6027
diff
changeset
|
2373 fp.write('^\\.mq\n') |
4071
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
2374 fp.write('syntax: glob\n') |
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
2375 fp.write('status\n') |
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
2376 fp.write('guards\n') |
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
2377 fp.close() |
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
2378 if not os.path.exists(r.wjoin('series')): |
23879
b88278a308c6
localrepo: remove all external users of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23877
diff
changeset
|
2379 r.wvfs('series', 'w').close() |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11302
diff
changeset
|
2380 r[None].add(['.hgignore', 'series']) |
4071
165abe554c80
mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4068
diff
changeset
|
2381 commands.add(ui, r) |
1808 | 2382 return 0 |
2383 | |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2384 @command("^qinit", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2385 [('c', 'create-repo', None, _('create queue repository'))], |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2386 _('hg qinit [-c]')) |
10480
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2387 def init(ui, repo, **opts): |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2388 """init a new queue repository (DEPRECATED) |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2389 |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2390 The queue repository is unversioned by default. If |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2391 -c/--create-repo is specified, qinit will create a separate nested |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2392 repository for patches (qinit -c may also be run later to convert |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2393 an unversioned patch repository into a versioned one). You can use |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2394 qcommit to commit changes to this queue repository. |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2395 |
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2396 This command is deprecated. Without -c, it's implied by other relevant |
11193
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
11121
diff
changeset
|
2397 commands. With -c, use :hg:`init --mq` instead.""" |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2398 return qinit(ui, repo, create=opts.get('create_repo')) |
10480
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
2399 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2400 @command("qclone", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2401 [('', 'pull', None, _('use pull protocol to copy metadata')), |
16683 | 2402 ('U', 'noupdate', None, |
2403 _('do not update the new working directories')), | |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2404 ('', 'uncompressed', None, |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2405 _('use uncompressed transfer (fast over LAN)')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2406 ('p', 'patches', '', |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2407 _('location of source patch repository'), _('REPO')), |
32375
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32347
diff
changeset
|
2408 ] + cmdutil.remoteopts, |
21771
0f3353776038
mq: define norepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21714
diff
changeset
|
2409 _('hg qclone [OPTION]... SOURCE [DEST]'), |
0f3353776038
mq: define norepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21714
diff
changeset
|
2410 norepo=True) |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2411 def clone(ui, source, dest=None, **opts): |
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2412 '''clone main and patch repository at same time |
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2413 |
7983
7b813bdbd5d0
Change double spaces to single spaces in help texts.
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
2414 If source is local, destination will have no patches applied. If |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2415 source is remote, this command can not check if patches are |
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2416 applied in source, so cannot guarantee that patches are not |
7983
7b813bdbd5d0
Change double spaces to single spaces in help texts.
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
2417 applied in destination. If you clone remote repository, be sure |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2418 before that it has no patches applied. |
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2419 |
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2420 Source patch repository is looked for in <src>/.hg/patches by |
7983
7b813bdbd5d0
Change double spaces to single spaces in help texts.
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
2421 default. Use -p <url> to change. |
4862
cba10652a901
mq: improve qclone error handling when patch directory is not a repository.
Brendan Cully <brendan@kublai.com>
parents:
4737
diff
changeset
|
2422 |
8760
bf17aeafb869
Spell Mercurial as a proper noun
timeless <timeless@gmail.com>
parents:
8711
diff
changeset
|
2423 The patch directory must be a nested Mercurial repository, as |
11193
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
11121
diff
changeset
|
2424 would be created by :hg:`init --mq`. |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2425 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2426 Return 0 on success. |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2427 ''' |
5226
438ff951df70
avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5180
diff
changeset
|
2428 def patchdir(repo): |
15921
92e455f2866c
qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15920
diff
changeset
|
2429 """compute a patch repo url from a repo object""" |
5226
438ff951df70
avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5180
diff
changeset
|
2430 url = repo.url() |
438ff951df70
avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5180
diff
changeset
|
2431 if url.endswith('/'): |
438ff951df70
avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5180
diff
changeset
|
2432 url = url[:-1] |
438ff951df70
avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5180
diff
changeset
|
2433 return url + '/.hg/patches' |
15921
92e455f2866c
qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15920
diff
changeset
|
2434 |
92e455f2866c
qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15920
diff
changeset
|
2435 # main repo (destination and sources) |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2436 if dest is None: |
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2437 dest = hg.defaultdest(source) |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17153
diff
changeset
|
2438 sr = hg.peer(ui, opts, ui.expandpath(source)) |
15921
92e455f2866c
qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15920
diff
changeset
|
2439 |
92e455f2866c
qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15920
diff
changeset
|
2440 # patches repo (source only) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2441 if opts.get('patches'): |
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2442 patchespath = ui.expandpath(opts.get('patches')) |
7729
dd08e1e0cea1
mq: allow qclone's -p option to use path alias
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7639
diff
changeset
|
2443 else: |
dd08e1e0cea1
mq: allow qclone's -p option to use path alias
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7639
diff
changeset
|
2444 patchespath = patchdir(sr) |
4862
cba10652a901
mq: improve qclone error handling when patch directory is not a repository.
Brendan Cully <brendan@kublai.com>
parents:
4737
diff
changeset
|
2445 try: |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17153
diff
changeset
|
2446 hg.peer(ui, opts, patchespath) |
7637 | 2447 except error.RepoError: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2448 raise error.Abort(_('versioned patch repository not found' |
10690
ea85c01c7835
mq: no longer refer to deprecated qinit -c command
Cédric Duval <cedricduval@free.fr>
parents:
10689
diff
changeset
|
2449 ' (see init --mq)')) |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2450 qbase, destrev = None, None |
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2451 if sr.local(): |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17153
diff
changeset
|
2452 repo = sr.local() |
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17153
diff
changeset
|
2453 if repo.mq.applied and repo[qbase].phase() != phases.secret: |
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17153
diff
changeset
|
2454 qbase = repo.mq.applied[0].node |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2455 if not hg.islocal(dest): |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17153
diff
changeset
|
2456 heads = set(repo.heads()) |
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17153
diff
changeset
|
2457 destrev = list(heads.difference(repo.heads(qbase))) |
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17153
diff
changeset
|
2458 destrev.append(repo.changelog.parents(qbase)[0]) |
6164
0c2b443fb3c3
mq: make qclone ask remote source repo for qbase using lookup protocol
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6139
diff
changeset
|
2459 elif sr.capable('lookup'): |
6380
a632a9a57821
qclone: do not abort if remote hasn't enabled mq (issue1040)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6340
diff
changeset
|
2460 try: |
a632a9a57821
qclone: do not abort if remote hasn't enabled mq (issue1040)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6340
diff
changeset
|
2461 qbase = sr.lookup('qbase') |
7637 | 2462 except error.RepoError: |
6380
a632a9a57821
qclone: do not abort if remote hasn't enabled mq (issue1040)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6340
diff
changeset
|
2463 pass |
15921
92e455f2866c
qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15920
diff
changeset
|
2464 |
8027
9c7ca86fc658
expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents:
8026
diff
changeset
|
2465 ui.note(_('cloning main repository\n')) |
14553
d976542986d2
hg: add opts argument to clone for internal remoteui
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14529
diff
changeset
|
2466 sr, dr = hg.clone(ui, opts, sr.url(), dest, |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2467 pull=opts.get('pull'), |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2468 rev=destrev, |
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2469 update=False, |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2470 stream=opts.get('uncompressed')) |
15921
92e455f2866c
qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15920
diff
changeset
|
2471 |
8027
9c7ca86fc658
expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents:
8026
diff
changeset
|
2472 ui.note(_('cloning patch repository\n')) |
14553
d976542986d2
hg: add opts argument to clone for internal remoteui
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14529
diff
changeset
|
2473 hg.clone(ui, opts, opts.get('patches') or patchdir(sr), patchdir(dr), |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2474 pull=opts.get('pull'), update=not opts.get('noupdate'), |
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2475 stream=opts.get('uncompressed')) |
15921
92e455f2866c
qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15920
diff
changeset
|
2476 |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2477 if dr.local(): |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17153
diff
changeset
|
2478 repo = dr.local() |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2479 if qbase: |
8027
9c7ca86fc658
expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents:
8026
diff
changeset
|
2480 ui.note(_('stripping applied patches from destination ' |
9c7ca86fc658
expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents:
8026
diff
changeset
|
2481 'repository\n')) |
19819
f0fc4d5797e1
mq: extract `mq.queue.strip`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19818
diff
changeset
|
2482 strip(ui, repo, [qbase], update=False, backup=None) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2483 if not opts.get('noupdate'): |
8027
9c7ca86fc658
expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents:
8026
diff
changeset
|
2484 ui.note(_('updating destination repository\n')) |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17153
diff
changeset
|
2485 hg.update(repo, repo.changelog.tip()) |
2720
c91ca61c8953
mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2713
diff
changeset
|
2486 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2487 @command("qcommit|qci", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2488 commands.table["^commit|ci"][1], |
21786
c85a0c3537b2
mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21771
diff
changeset
|
2489 _('hg qcommit [OPTION]... [FILE]...'), |
c85a0c3537b2
mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21771
diff
changeset
|
2490 inferrepo=True) |
1808 | 2491 def commit(ui, repo, *pats, **opts): |
10361
49cd2e7fd91c
mq: deprecate qinit and qcommit
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10360
diff
changeset
|
2492 """commit changes in the queue repository (DEPRECATED) |
49cd2e7fd91c
mq: deprecate qinit and qcommit
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10360
diff
changeset
|
2493 |
11193
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
11121
diff
changeset
|
2494 This command is deprecated; use :hg:`commit --mq` instead.""" |
2724
9c41ae1908c7
mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents:
2723
diff
changeset
|
2495 q = repo.mq |
1808 | 2496 r = q.qrepo() |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
2497 if not r: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2498 raise error.Abort('no queue repository') |
1808 | 2499 commands.commit(r.ui, r, *pats, **opts) |
2500 | |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2501 @command("qseries", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2502 [('m', 'missing', None, _('print patches not in series')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2503 ] + seriesopts, |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2504 _('hg qseries [-ms]')) |
1808 | 2505 def series(ui, repo, **opts): |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2506 """print the entire series file |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2507 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2508 Returns 0 on success.""" |
16683 | 2509 repo.mq.qseries(repo, missing=opts.get('missing'), |
2510 summary=opts.get('summary')) | |
1808 | 2511 return 0 |
2512 | |
14468
755aabb3eada
mq: no need to make a copy of seriesopts
Idan Kamara <idankk86@gmail.com>
parents:
14464
diff
changeset
|
2513 @command("qtop", seriesopts, _('hg qtop [-s]')) |
1808 | 2514 def top(ui, repo, **opts): |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2515 """print the name of the current patch |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2516 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2517 Returns 0 on success.""" |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2518 q = repo.mq |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
2519 if q.applied: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
2520 t = q.seriesend(True) |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
2521 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
2522 t = 0 |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23879
diff
changeset
|
2523 |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2524 if t: |
12539
dece1f46f7a2
mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents:
12538
diff
changeset
|
2525 q.qseries(repo, start=t - 1, length=1, status='A', |
dece1f46f7a2
mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents:
12538
diff
changeset
|
2526 summary=opts.get('summary')) |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2527 else: |
7627 | 2528 ui.write(_("no patches applied\n")) |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2529 return 1 |
1808 | 2530 |
14468
755aabb3eada
mq: no need to make a copy of seriesopts
Idan Kamara <idankk86@gmail.com>
parents:
14464
diff
changeset
|
2531 @command("qnext", seriesopts, _('hg qnext [-s]')) |
1808 | 2532 def next(ui, repo, **opts): |
16063
c36db39b3fee
mq: fix qnext when all remaining patches are guarded
Patrick Mezard <pmezard@gmail.com>
parents:
16048
diff
changeset
|
2533 """print the name of the next pushable patch |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2534 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2535 Returns 0 on success.""" |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2536 q = repo.mq |
14586
af91cb281975
mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents:
14585
diff
changeset
|
2537 end = q.seriesend() |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2538 if end == len(q.series): |
7627 | 2539 ui.write(_("all patches applied\n")) |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2540 return 1 |
12539
dece1f46f7a2
mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents:
12538
diff
changeset
|
2541 q.qseries(repo, start=end, length=1, summary=opts.get('summary')) |
1808 | 2542 |
14468
755aabb3eada
mq: no need to make a copy of seriesopts
Idan Kamara <idankk86@gmail.com>
parents:
14464
diff
changeset
|
2543 @command("qprev", seriesopts, _('hg qprev [-s]')) |
1808 | 2544 def prev(ui, repo, **opts): |
16188
6b52963ced73
mq: fix qapplied --last and qprev documentation (issue3282)
Patrick Mezard <patrick@mezard.eu>
parents:
16119
diff
changeset
|
2545 """print the name of the preceding applied patch |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2546 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2547 Returns 0 on success.""" |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2548 q = repo.mq |
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2549 l = len(q.applied) |
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2550 if l == 1: |
7627 | 2551 ui.write(_("only one patch applied\n")) |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2552 return 1 |
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2553 if not l: |
7627 | 2554 ui.write(_("no patches applied\n")) |
3183
0e6b58c7beea
mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents:
3141
diff
changeset
|
2555 return 1 |
16064
7e5a281a082c
mq: make qprev return the previous applied patch (issue3245)
Patrick Mezard <pmezard@gmail.com>
parents:
16063
diff
changeset
|
2556 idx = q.series.index(q.applied[-2].name) |
7e5a281a082c
mq: make qprev return the previous applied patch (issue3245)
Patrick Mezard <pmezard@gmail.com>
parents:
16063
diff
changeset
|
2557 q.qseries(repo, start=idx, length=1, status='A', |
12539
dece1f46f7a2
mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents:
12538
diff
changeset
|
2558 summary=opts.get('summary')) |
1808 | 2559 |
5673
dd3ce7515f4d
mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents:
5645
diff
changeset
|
2560 def setupheaderopts(ui, opts): |
9733
f16ec85f125c
mq: do not call ui.username unless it is necessary
Martin Geisler <mg@lazybytes.net>
parents:
9725
diff
changeset
|
2561 if not opts.get('user') and opts.get('currentuser'): |
f16ec85f125c
mq: do not call ui.username unless it is necessary
Martin Geisler <mg@lazybytes.net>
parents:
9725
diff
changeset
|
2562 opts['user'] = ui.username() |
f16ec85f125c
mq: do not call ui.username unless it is necessary
Martin Geisler <mg@lazybytes.net>
parents:
9725
diff
changeset
|
2563 if not opts.get('date') and opts.get('currentdate'): |
f16ec85f125c
mq: do not call ui.username unless it is necessary
Martin Geisler <mg@lazybytes.net>
parents:
9725
diff
changeset
|
2564 opts['date'] = "%d %d" % util.makedate() |
5673
dd3ce7515f4d
mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents:
5645
diff
changeset
|
2565 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2566 @command("^qnew", |
21952
3838b910fa6b
doc: unify help text for "--edit" option
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21786
diff
changeset
|
2567 [('e', 'edit', None, _('invoke editor on commit messages')), |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2568 ('f', 'force', None, _('import uncommitted changes (DEPRECATED)')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2569 ('g', 'git', None, _('use git extended diff format')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2570 ('U', 'currentuser', None, _('add "From: <current user>" to patch')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2571 ('u', 'user', '', |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2572 _('add "From: <USER>" to patch'), _('USER')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2573 ('D', 'currentdate', None, _('add "Date: <current date>" to patch')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2574 ('d', 'date', '', |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2575 _('add "Date: <DATE>" to patch'), _('DATE')) |
32375
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32347
diff
changeset
|
2576 ] + cmdutil.walkopts + cmdutil.commitopts, |
21786
c85a0c3537b2
mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21771
diff
changeset
|
2577 _('hg qnew [-e] [-m TEXT] [-l FILE] PATCH [FILE]...'), |
c85a0c3537b2
mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21771
diff
changeset
|
2578 inferrepo=True) |
4713
c29ee52e0b68
mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents:
4712
diff
changeset
|
2579 def new(ui, repo, patch, *args, **opts): |
2754
19041b8cbc86
Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents:
2753
diff
changeset
|
2580 """create a new patch |
19041b8cbc86
Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents:
2753
diff
changeset
|
2581 |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2582 qnew creates a new patch on top of the currently-applied patch (if |
10808
1ebba857b371
mq: remove reference for deprecated -f option
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
10770
diff
changeset
|
2583 any). The patch will be initialized with any outstanding changes |
1ebba857b371
mq: remove reference for deprecated -f option
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
10770
diff
changeset
|
2584 in the working directory. You may also use -I/--include, |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2585 -X/--exclude, and/or a list of files after the patch name to add |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2586 only changes to matching files to the new patch, leaving the rest |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2587 as uncommitted modifications. |
2754
19041b8cbc86
Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents:
2753
diff
changeset
|
2588 |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2589 -u/--user and -d/--date can be used to set the (given) user and |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2590 date, respectively. -U/--currentuser and -D/--currentdate set user |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2591 to current user and date to current date. |
7306
8e46e59aaf4c
mq: reflow qnew help, add help for options
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7297
diff
changeset
|
2592 |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2593 -e/--edit, -m/--message or -l/--logfile set the patch header as |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2594 well as the commit message. If none is specified, the header is |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2595 empty and the commit message is '[mq]: PATCH'. |
7307
56380212d630
help: commands supporting --git point to the gitdiffs topic (issue1352)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7306
diff
changeset
|
2596 |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2597 Use the -g/--git option to keep the patch in the git extended diff |
7387 | 2598 format. Read the diffs help topic for more information on why this |
2599 is important for preserving permission changes and copy/rename | |
2600 information. | |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2601 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2602 Returns 0 on successful creation of a new patch. |
7306
8e46e59aaf4c
mq: reflow qnew help, add help for options
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7297
diff
changeset
|
2603 """ |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14620
diff
changeset
|
2604 msg = cmdutil.logmessage(ui, opts) |
2724
9c41ae1908c7
mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents:
2723
diff
changeset
|
2605 q = repo.mq |
7157
fd3cba5e73ae
mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents:
7142
diff
changeset
|
2606 opts['msg'] = msg |
5673
dd3ce7515f4d
mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents:
5645
diff
changeset
|
2607 setupheaderopts(ui, opts) |
4713
c29ee52e0b68
mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents:
4712
diff
changeset
|
2608 q.new(repo, patch, *args, **opts) |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
2609 q.savedirty() |
1808 | 2610 return 0 |
2611 | |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2612 @command("^qrefresh", |
21952
3838b910fa6b
doc: unify help text for "--edit" option
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21786
diff
changeset
|
2613 [('e', 'edit', None, _('invoke editor on commit messages')), |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2614 ('g', 'git', None, _('use git extended diff format')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2615 ('s', 'short', None, |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2616 _('refresh only files already in the patch and specified files')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2617 ('U', 'currentuser', None, |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2618 _('add/update author field in patch with current user')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2619 ('u', 'user', '', |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2620 _('add/update author field in patch with given user'), _('USER')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2621 ('D', 'currentdate', None, |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2622 _('add/update date field in patch with current date')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2623 ('d', 'date', '', |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2624 _('add/update date field in patch with given date'), _('DATE')) |
32375
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32347
diff
changeset
|
2625 ] + cmdutil.walkopts + cmdutil.commitopts, |
21786
c85a0c3537b2
mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21771
diff
changeset
|
2626 _('hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...'), |
c85a0c3537b2
mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21771
diff
changeset
|
2627 inferrepo=True) |
2938
5b7a118f5b6c
allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents:
2937
diff
changeset
|
2628 def refresh(ui, repo, *pats, **opts): |
2940
b1e6d701a03a
mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents:
2939
diff
changeset
|
2629 """update the current patch |
b1e6d701a03a
mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents:
2939
diff
changeset
|
2630 |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2631 If any file patterns are provided, the refreshed patch will |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2632 contain only the modifications that match those patterns; the |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2633 remaining modifications will remain in the working directory. |
4048
5d6b3fa62736
mq: Mention usage of hg add/remove/copy/rename in qrefresh help text.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4040
diff
changeset
|
2634 |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2635 If -s/--short is specified, files currently included in the patch |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2636 will be refreshed just like matched files and remain in the patch. |
7113
f7fc5f5ecd62
mq: Allow qrefresh --silent to take parameters
Mads Kiilerich <mads@kiilerich.com>
parents:
7002
diff
changeset
|
2637 |
11947
59ec12093261
mq: save qrefresh message for easy recovery in case it fails (issue2062)
Renato Cunha <renatoc@gmail.com>
parents:
11939
diff
changeset
|
2638 If -e/--edit is specified, Mercurial will start your configured editor for |
59ec12093261
mq: save qrefresh message for easy recovery in case it fails (issue2062)
Renato Cunha <renatoc@gmail.com>
parents:
11939
diff
changeset
|
2639 you to enter a message. In case qrefresh fails, you will find a backup of |
59ec12093261
mq: save qrefresh message for easy recovery in case it fails (issue2062)
Renato Cunha <renatoc@gmail.com>
parents:
11939
diff
changeset
|
2640 your message in ``.hg/last-message.txt``. |
59ec12093261
mq: save qrefresh message for easy recovery in case it fails (issue2062)
Renato Cunha <renatoc@gmail.com>
parents:
11939
diff
changeset
|
2641 |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2642 hg add/remove/copy/rename work as usual, though you might want to |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2643 use git-style patches (-g/--git or [diff] git=1) to track copies |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2644 and renames. See the diffs help topic for more information on the |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
2645 git diff format. |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2646 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2647 Returns 0 on success. |
2940
b1e6d701a03a
mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents:
2939
diff
changeset
|
2648 """ |
2724
9c41ae1908c7
mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents:
2723
diff
changeset
|
2649 q = repo.mq |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14620
diff
changeset
|
2650 message = cmdutil.logmessage(ui, opts) |
5673
dd3ce7515f4d
mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents:
5645
diff
changeset
|
2651 setupheaderopts(ui, opts) |
27830
1c5941542f24
with: use context manager for wlock in qrefresh
Bryan O'Sullivan <bryano@fb.com>
parents:
27829
diff
changeset
|
2652 with repo.wlock(): |
21422
edc6ced48d2d
mq: fold the code paths to invoke editor into specific logic (qrefresh/qfold)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21421
diff
changeset
|
2653 ret = q.refresh(repo, pats, msg=message, **opts) |
14620
2b9c32929e62
mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents:
14600
diff
changeset
|
2654 q.savedirty() |
2b9c32929e62
mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents:
14600
diff
changeset
|
2655 return ret |
1808 | 2656 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2657 @command("^qdiff", |
32375
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32347
diff
changeset
|
2658 cmdutil.diffopts + cmdutil.diffopts2 + cmdutil.walkopts, |
21786
c85a0c3537b2
mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21771
diff
changeset
|
2659 _('hg qdiff [OPTION]... [FILE]...'), |
c85a0c3537b2
mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21771
diff
changeset
|
2660 inferrepo=True) |
2937
9dc568f5e03d
Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents:
2936
diff
changeset
|
2661 def diff(ui, repo, *pats, **opts): |
6606
088ba40585b9
mq: expand help text for qdiff
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6561
diff
changeset
|
2662 """diff of the current patch and subsequent modifications |
6621
d5cbbe2c49ce
mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6611
diff
changeset
|
2663 |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2664 Shows a diff which includes the current patch as well as any |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2665 changes which have been made in the working directory since the |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2666 last refresh (thus showing what the current patch would become |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2667 after a qrefresh). |
6621
d5cbbe2c49ce
mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6611
diff
changeset
|
2668 |
10973
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10962
diff
changeset
|
2669 Use :hg:`diff` if you only want to see the changes made since the |
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10962
diff
changeset
|
2670 last qrefresh, or :hg:`export qtip` if you want to see changes |
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10962
diff
changeset
|
2671 made by the current patch without including changes made since the |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2672 qrefresh. |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2673 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2674 Returns 0 on success. |
6606
088ba40585b9
mq: expand help text for qdiff
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6561
diff
changeset
|
2675 """ |
31033
861b070d92da
qdiff: migrate to modern pager API
Augie Fackler <augie@google.com>
parents:
31024
diff
changeset
|
2676 ui.pager('qdiff') |
2937
9dc568f5e03d
Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents:
2936
diff
changeset
|
2677 repo.mq.diff(repo, pats, opts) |
1808 | 2678 return 0 |
2679 | |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2680 @command('qfold', |
21952
3838b910fa6b
doc: unify help text for "--edit" option
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21786
diff
changeset
|
2681 [('e', 'edit', None, _('invoke editor on commit messages')), |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2682 ('k', 'keep', None, _('keep folded patch files')), |
32375
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32347
diff
changeset
|
2683 ] + cmdutil.commitopts, |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2684 _('hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH...')) |
2753
84218111e80f
Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2685 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
|
2686 """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
|
2687 |
2771
519bf0cd28d2
Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents:
2770
diff
changeset
|
2688 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
|
2689 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
|
2690 patches apply successfully, the current patch will be refreshed |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2691 with the new cumulative patch, and the folded patches will be |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2692 deleted. With -k/--keep, the folded patch files will not be |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2693 removed afterwards. |
2771
519bf0cd28d2
Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents:
2770
diff
changeset
|
2694 |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
2695 The header for each folded patch will be concatenated with the |
12755
db79d3627872
mq: switched to `` around * * *
Erik Zielke <ez@aragost.com>
parents:
12689
diff
changeset
|
2696 current patch header, separated by a line of ``* * *``. |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2697 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2698 Returns 0 on success.""" |
2748
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
2699 q = repo.mq |
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
2700 if not files: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2701 raise error.Abort(_('qfold requires at least one patch name')) |
14581
da40ee1adc2b
mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents:
14580
diff
changeset
|
2702 if not q.checktoppatch(repo)[0]: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2703 raise error.Abort(_('no patches applied')) |
14583
28f87e14d923
mq: rename check_localchanges to checklocalchanges
Adrian Buehlmann <adrian@cadifra.com>
parents:
14582
diff
changeset
|
2704 q.checklocalchanges(repo) |
2748
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
2705 |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14620
diff
changeset
|
2706 message = cmdutil.logmessage(ui, opts) |
2753
84218111e80f
Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2707 |
2748
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
2708 parent = q.lookup('qtip') |
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
2709 patches = [] |
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
2710 messages = [] |
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
2711 for f in files: |
2936
21bf8929efc8
Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents:
2934
diff
changeset
|
2712 p = q.lookup(f) |
21bf8929efc8
Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents:
2934
diff
changeset
|
2713 if p in patches or p == parent: |
16929
4b02d7006169
mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents:
16867
diff
changeset
|
2714 ui.warn(_('skipping already folded patch %s\n') % p) |
2936
21bf8929efc8
Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents:
2934
diff
changeset
|
2715 if q.isapplied(p): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2716 raise error.Abort(_('qfold cannot fold already applied patch %s') |
16683 | 2717 % p) |
2936
21bf8929efc8
Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents:
2934
diff
changeset
|
2718 patches.append(p) |
2748
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
2719 |
2936
21bf8929efc8
Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents:
2934
diff
changeset
|
2720 for p in patches: |
2753
84218111e80f
Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2721 if not message: |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
2722 ph = patchheader(q.join(p), q.plainmode) |
7454
1d5ecaa47abb
mq: filter out empty commit messages in qfold
Brendan Cully <brendan@kublai.com>
parents:
7453
diff
changeset
|
2723 if ph.message: |
1d5ecaa47abb
mq: filter out empty commit messages in qfold
Brendan Cully <brendan@kublai.com>
parents:
7453
diff
changeset
|
2724 messages.append(ph.message) |
2936
21bf8929efc8
Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents:
2934
diff
changeset
|
2725 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
|
2726 (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
|
2727 if not patchsuccess: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2728 raise error.Abort(_('error folding patch %s') % p) |
2748
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
2729 |
2753
84218111e80f
Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2730 if not message: |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
2731 ph = patchheader(q.join(parent), q.plainmode) |
21270
8fd982139740
mq: eliminate unused variable for test-check-pyflakes.t
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21236
diff
changeset
|
2732 message = ph.message |
2753
84218111e80f
Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2733 for msg in messages: |
20053
2455e96ec73b
mq: don't add '* * *' separators when there is no commit message
Mads Kiilerich <madski@unity3d.com>
parents:
19997
diff
changeset
|
2734 if msg: |
2455e96ec73b
mq: don't add '* * *' separators when there is no commit message
Mads Kiilerich <madski@unity3d.com>
parents:
19997
diff
changeset
|
2735 if message: |
2455e96ec73b
mq: don't add '* * *' separators when there is no commit message
Mads Kiilerich <madski@unity3d.com>
parents:
19997
diff
changeset
|
2736 message.append('* * *') |
2455e96ec73b
mq: don't add '* * *' separators when there is no commit message
Mads Kiilerich <madski@unity3d.com>
parents:
19997
diff
changeset
|
2737 message.extend(msg) |
2753
84218111e80f
Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2738 message = '\n'.join(message) |
84218111e80f
Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2739 |
10186
296a0b14a686
mq: preserve --git flag when folding patches
Patrick Mezard <pmezard@gmail.com>
parents:
10185
diff
changeset
|
2740 diffopts = q.patchopts(q.diffopts(), *patches) |
27831
62f3126ef678
with: use context manager for wlock in qfold
Bryan O'Sullivan <bryano@fb.com>
parents:
27830
diff
changeset
|
2741 with repo.wlock(): |
22003
cbbd957358ff
mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
2742 q.refresh(repo, msg=message, git=diffopts.git, edit=opts.get('edit'), |
cbbd957358ff
mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
2743 editform='mq.qfold') |
14620
2b9c32929e62
mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents:
14600
diff
changeset
|
2744 q.delete(repo, patches, opts) |
2b9c32929e62
mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents:
14600
diff
changeset
|
2745 q.savedirty() |
2748
752b9475a700
New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents:
2747
diff
changeset
|
2746 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2747 @command("qgoto", |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2748 [('', 'keep-changes', None, |
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2749 _('tolerate non-conflicting local changes')), |
16655
6ca125af882f
mq: introduce qgoto --check
Patrick Mezard <patrick@mezard.eu>
parents:
16654
diff
changeset
|
2750 ('f', 'force', None, _('overwrite any local changes')), |
16635
9d76320d8b99
mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents:
16634
diff
changeset
|
2751 ('', 'no-backup', None, _('do not save backup copies of files'))], |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2752 _('hg qgoto [OPTION]... PATCH')) |
4432
905397be7688
mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4430
diff
changeset
|
2753 def goto(ui, repo, patch, **opts): |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2754 '''push or pop patches until named patch is at top of stack |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2755 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2756 Returns 0 on success.''' |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2757 opts = fixkeepchangesopts(ui, opts) |
4432
905397be7688
mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4430
diff
changeset
|
2758 q = repo.mq |
905397be7688
mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4430
diff
changeset
|
2759 patch = q.lookup(patch) |
16635
9d76320d8b99
mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents:
16634
diff
changeset
|
2760 nobackup = opts.get('no_backup') |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2761 keepchanges = opts.get('keep_changes') |
4432
905397be7688
mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4430
diff
changeset
|
2762 if q.isapplied(patch): |
16655
6ca125af882f
mq: introduce qgoto --check
Patrick Mezard <patrick@mezard.eu>
parents:
16654
diff
changeset
|
2763 ret = q.pop(repo, patch, force=opts.get('force'), nobackup=nobackup, |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2764 keepchanges=keepchanges) |
4432
905397be7688
mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4430
diff
changeset
|
2765 else: |
16655
6ca125af882f
mq: introduce qgoto --check
Patrick Mezard <patrick@mezard.eu>
parents:
16654
diff
changeset
|
2766 ret = q.push(repo, patch, force=opts.get('force'), nobackup=nobackup, |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2767 keepchanges=keepchanges) |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
2768 q.savedirty() |
4432
905397be7688
mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4430
diff
changeset
|
2769 return ret |
905397be7688
mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4430
diff
changeset
|
2770 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2771 @command("qguard", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2772 [('l', 'list', None, _('list all patches and guards')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2773 ('n', 'none', None, _('drop all guards'))], |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2774 _('hg qguard [-l] [-n] [PATCH] [-- [+GUARD]... [-GUARD]...]')) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2775 def guard(ui, repo, *args, **opts): |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2776 '''set or print guards for a patch |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2777 |
2940
b1e6d701a03a
mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents:
2939
diff
changeset
|
2778 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
|
2779 guards is always pushed. A patch with a positive guard ("+foo") is |
11307
7f72031d4047
mq: use hg reST role some more
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
2780 pushed only if the :hg:`qselect` command has activated it. A patch with |
7f72031d4047
mq: use hg reST role some more
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
2781 a negative guard ("-foo") is never pushed if the :hg:`qselect` command |
2940
b1e6d701a03a
mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents:
2939
diff
changeset
|
2782 has activated it. |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2783 |
2940
b1e6d701a03a
mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents:
2939
diff
changeset
|
2784 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
|
2785 With arguments, set guards for the named patch. |
12389 | 2786 |
2787 .. note:: | |
19997
de16c673455b
documentation: add an extra newline after note directive
Simon Heimberg <simohe@besonet.ch>
parents:
19951
diff
changeset
|
2788 |
12389 | 2789 Specifying negative guards now requires '--'. |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2790 |
9824
87c92b260710
mq: fix literal blocks in docstrings
Martin Geisler <mg@lazybytes.net>
parents:
9733
diff
changeset
|
2791 To set guards on another patch:: |
87c92b260710
mq: fix literal blocks in docstrings
Martin Geisler <mg@lazybytes.net>
parents:
9733
diff
changeset
|
2792 |
10476
3113736dbac5
mq: more instructive use of "--" in qguard help (issue2040)
Martin Geisler <mg@lazybytes.net>
parents:
10413
diff
changeset
|
2793 hg qguard other.patch -- +2.6.17 -stable |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2794 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2795 Returns 0 on success. |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2796 ''' |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2797 def status(idx): |
14573
d590ff1f22b2
mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14572
diff
changeset
|
2798 guards = q.seriesguards[idx] or ['unguarded'] |
11819
1c00577b0298
qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11789
diff
changeset
|
2799 if q.series[idx] in applied: |
1c00577b0298
qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11789
diff
changeset
|
2800 state = 'applied' |
1c00577b0298
qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11789
diff
changeset
|
2801 elif q.pushable(idx)[0]: |
1c00577b0298
qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11789
diff
changeset
|
2802 state = 'unapplied' |
1c00577b0298
qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11789
diff
changeset
|
2803 else: |
1c00577b0298
qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11789
diff
changeset
|
2804 state = 'guarded' |
1c00577b0298
qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11789
diff
changeset
|
2805 label = 'qguard.patch qguard.%s qseries.%s' % (state, state) |
1c00577b0298
qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11789
diff
changeset
|
2806 ui.write('%s: ' % ui.label(q.series[idx], label)) |
1c00577b0298
qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11789
diff
changeset
|
2807 |
10822
4c63f8e787b8
qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10814
diff
changeset
|
2808 for i, guard in enumerate(guards): |
4c63f8e787b8
qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10814
diff
changeset
|
2809 if guard.startswith('+'): |
11310
ac873ecfc3c2
Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents:
11302
diff
changeset
|
2810 ui.write(guard, label='qguard.positive') |
10822
4c63f8e787b8
qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10814
diff
changeset
|
2811 elif guard.startswith('-'): |
11310
ac873ecfc3c2
Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents:
11302
diff
changeset
|
2812 ui.write(guard, label='qguard.negative') |
10822
4c63f8e787b8
qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10814
diff
changeset
|
2813 else: |
11310
ac873ecfc3c2
Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents:
11302
diff
changeset
|
2814 ui.write(guard, label='qguard.unguarded') |
10822
4c63f8e787b8
qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10814
diff
changeset
|
2815 if i != len(guards) - 1: |
11310
ac873ecfc3c2
Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents:
11302
diff
changeset
|
2816 ui.write(' ') |
ac873ecfc3c2
Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents:
11302
diff
changeset
|
2817 ui.write('\n') |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2818 q = repo.mq |
11819
1c00577b0298
qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11789
diff
changeset
|
2819 applied = set(p.name for p in q.applied) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2820 patch = None |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2821 args = list(args) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2822 if opts.get('list'): |
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2823 if args or opts.get('none'): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2824 raise error.Abort(_('cannot mix -l/--list with options or ' |
16683 | 2825 'arguments')) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2826 for i in xrange(len(q.series)): |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2827 status(i) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2828 return |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2829 if not args or args[0][0:1] in '-+': |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2830 if not q.applied: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2831 raise error.Abort(_('no patches applied')) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2832 patch = q.applied[-1].name |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2833 if patch is None and args[0][0:1] not in '-+': |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2834 patch = args.pop(0) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2835 if patch is None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2836 raise error.Abort(_('no patch to work with')) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2837 if args or opts.get('none'): |
14574
12fba7bcb4f1
mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14573
diff
changeset
|
2838 idx = q.findseries(patch) |
4133
a9ee6c53af8d
mq: abort cleanly when invalid patch name is given to qguard
Christian Ebert <blacktrash@gmx.net>
parents:
4090
diff
changeset
|
2839 if idx is None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
2840 raise error.Abort(_('no patch named %s') % patch) |
14577
76357276662e
mq: rename set_guards to setguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14576
diff
changeset
|
2841 q.setguards(idx, args) |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
2842 q.savedirty() |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2843 else: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2844 status(q.series.index(q.lookup(patch))) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
2845 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2846 @command("qheader", [], _('hg qheader [PATCH]')) |
2747
0016fc748f61
Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents:
2746
diff
changeset
|
2847 def header(ui, repo, patch=None): |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2848 """print the header of the topmost or specified patch |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2849 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2850 Returns 0 on success.""" |
2747
0016fc748f61
Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents:
2746
diff
changeset
|
2851 q = repo.mq |
0016fc748f61
Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents:
2746
diff
changeset
|
2852 |
0016fc748f61
Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents:
2746
diff
changeset
|
2853 if patch: |
0016fc748f61
Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents:
2746
diff
changeset
|
2854 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
|
2855 else: |
0016fc748f61
Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents:
2746
diff
changeset
|
2856 if not q.applied: |
10510
f77f3383c666
i18n: mark more strings for translation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10498
diff
changeset
|
2857 ui.write(_('no patches applied\n')) |
3008
c203ccd7d838
qheader: exit withh meaningful error code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
3006
diff
changeset
|
2858 return 1 |
2747
0016fc748f61
Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents:
2746
diff
changeset
|
2859 patch = q.lookup('qtip') |
10397
8cb81d75730c
mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents:
10382
diff
changeset
|
2860 ph = patchheader(q.join(patch), q.plainmode) |
2747
0016fc748f61
Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents:
2746
diff
changeset
|
2861 |
7399
e71bda2d2087
mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents:
7398
diff
changeset
|
2862 ui.write('\n'.join(ph.message) + '\n') |
2747
0016fc748f61
Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents:
2746
diff
changeset
|
2863 |
1808 | 2864 def lastsavename(path): |
2794
86c54b7cd331
mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2792
diff
changeset
|
2865 (directory, base) = os.path.split(path) |
86c54b7cd331
mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2792
diff
changeset
|
2866 names = os.listdir(directory) |
1808 | 2867 namere = re.compile("%s.([0-9]+)" % base) |
2794
86c54b7cd331
mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2792
diff
changeset
|
2868 maxindex = None |
1808 | 2869 maxname = None |
2870 for f in names: | |
2871 m = namere.match(f) | |
2872 if m: | |
2873 index = int(m.group(1)) | |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8525
diff
changeset
|
2874 if maxindex is None or index > maxindex: |
2794
86c54b7cd331
mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2792
diff
changeset
|
2875 maxindex = index |
1808 | 2876 maxname = f |
2877 if maxname: | |
2794
86c54b7cd331
mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2792
diff
changeset
|
2878 return (os.path.join(directory, maxname), maxindex) |
1808 | 2879 return (None, None) |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
2880 |
1808 | 2881 def savename(path): |
2882 (last, index) = lastsavename(path) | |
2883 if last is None: | |
2884 index = 0 | |
2885 newpath = path + ".%d" % (index + 1) | |
2886 return newpath | |
2887 | |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2888 @command("^qpush", |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2889 [('', 'keep-changes', None, |
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2890 _('tolerate non-conflicting local changes')), |
16654
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
2891 ('f', 'force', None, _('apply on top of local changes')), |
16683 | 2892 ('e', 'exact', None, |
2893 _('apply the target patch to its recorded parent')), | |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2894 ('l', 'list', None, _('list patch name in commit text')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2895 ('a', 'all', None, _('apply all patches')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2896 ('m', 'merge', None, _('merge from another queue (DEPRECATED)')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2897 ('n', 'name', '', |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2898 _('merge queue name (DEPRECATED)'), _('NAME')), |
16635
9d76320d8b99
mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents:
16634
diff
changeset
|
2899 ('', 'move', None, |
9d76320d8b99
mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents:
16634
diff
changeset
|
2900 _('reorder patch series and apply only the patch')), |
9d76320d8b99
mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents:
16634
diff
changeset
|
2901 ('', 'no-backup', None, _('do not save backup copies of files'))], |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2902 _('hg qpush [-f] [-l] [-a] [--move] [PATCH | INDEX]')) |
1808 | 2903 def push(ui, repo, patch=None, **opts): |
6552
315b36ce6251
mq: add a little documentation on qpush -f
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6382
diff
changeset
|
2904 """push the next patch onto the stack |
6553
0bb76d168437
remove trailing spaces
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6552
diff
changeset
|
2905 |
16654
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
2906 By default, abort if the working directory contains uncommitted |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2907 changes. With --keep-changes, abort only if the uncommitted files |
16654
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
2908 overlap with patched files. With -f/--force, backup and patch over |
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
2909 uncommitted changes. |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2910 |
13725
6783f47d90dd
mq: fix typo in docstring
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
13632
diff
changeset
|
2911 Return 0 on success. |
6552
315b36ce6251
mq: add a little documentation on qpush -f
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6382
diff
changeset
|
2912 """ |
2724
9c41ae1908c7
mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents:
2723
diff
changeset
|
2913 q = repo.mq |
1808 | 2914 mergeq = None |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
2915 |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2916 opts = fixkeepchangesopts(ui, opts) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2917 if opts.get('merge'): |
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2918 if opts.get('name'): |
31333
f897a088377c
mq: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31312
diff
changeset
|
2919 newpath = repo.vfs.join(opts.get('name')) |
1808 | 2920 else: |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
2921 newpath, i = lastsavename(q.path) |
1808 | 2922 if not newpath: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
2923 ui.warn(_("no saved queues found, please use -n\n")) |
1808 | 2924 return 1 |
19064
743daa601445
mq: do not inherit settings form base repo in mqrepo (Fixes issue2358)
Simon Heimberg <simohe@besonet.ch>
parents:
18958
diff
changeset
|
2925 mergeq = queue(ui, repo.baseui, repo.path, newpath) |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
2926 ui.warn(_("merging with queue at: %s\n") % mergeq.path) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2927 ret = q.push(repo, patch, force=opts.get('force'), list=opts.get('list'), |
13033
026053f691a4
mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents:
13031
diff
changeset
|
2928 mergeq=mergeq, all=opts.get('all'), move=opts.get('move'), |
16654
490ed8972f1b
mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents:
16653
diff
changeset
|
2929 exact=opts.get('exact'), nobackup=opts.get('no_backup'), |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2930 keepchanges=opts.get('keep_changes')) |
1808 | 2931 return ret |
2932 | |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2933 @command("^qpop", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2934 [('a', 'all', None, _('pop all patches')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2935 ('n', 'name', '', |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2936 _('queue name to pop (DEPRECATED)'), _('NAME')), |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2937 ('', 'keep-changes', None, |
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2938 _('tolerate non-conflicting local changes')), |
16635
9d76320d8b99
mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents:
16634
diff
changeset
|
2939 ('f', 'force', None, _('forget any local changes to patched files')), |
9d76320d8b99
mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents:
16634
diff
changeset
|
2940 ('', 'no-backup', None, _('do not save backup copies of files'))], |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2941 _('hg qpop [-a] [-f] [PATCH | INDEX]')) |
1808 | 2942 def pop(ui, repo, patch=None, **opts): |
6611
f4c612da788d
mq: add correct documentation for qpop
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6610
diff
changeset
|
2943 """pop the current patch off the stack |
6621
d5cbbe2c49ce
mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6611
diff
changeset
|
2944 |
16653
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
2945 Without argument, pops off the top of the patch stack. If given a |
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
2946 patch name, keeps popping off patches until the named patch is at |
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
2947 the top of the stack. |
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
2948 |
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
2949 By default, abort if the working directory contains uncommitted |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2950 changes. With --keep-changes, abort only if the uncommitted files |
16653
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
2951 overlap with patched files. With -f/--force, backup and discard |
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
2952 changes made to such files. |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2953 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2954 Return 0 on success. |
6611
f4c612da788d
mq: add correct documentation for qpop
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6610
diff
changeset
|
2955 """ |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2956 opts = fixkeepchangesopts(ui, opts) |
1808 | 2957 localupdate = True |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2958 if opts.get('name'): |
31333
f897a088377c
mq: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31312
diff
changeset
|
2959 q = queue(ui, repo.baseui, repo.path, repo.vfs.join(opts.get('name'))) |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
2960 ui.warn(_('using patch queue: %s\n') % q.path) |
1808 | 2961 localupdate = False |
2962 else: | |
2724
9c41ae1908c7
mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents:
2723
diff
changeset
|
2963 q = repo.mq |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
2964 ret = q.pop(repo, patch, force=opts.get('force'), update=localupdate, |
16653
73b8c2554be8
mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents:
16635
diff
changeset
|
2965 all=opts.get('all'), nobackup=opts.get('no_backup'), |
16733
4da10c00a20c
mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents:
16718
diff
changeset
|
2966 keepchanges=opts.get('keep_changes')) |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
2967 q.savedirty() |
4099
cf5580c16b13
mq: propagate the return error of pop
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4096
diff
changeset
|
2968 return ret |
1808 | 2969 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
2970 @command("qrename|qmv", [], _('hg qrename PATCH1 [PATCH2]')) |
2750
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2971 def rename(ui, repo, patch, name=None, **opts): |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2972 """rename a patch |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2973 |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2974 With one argument, renames the current patch to PATCH1. |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2975 With two arguments, renames PATCH1 to PATCH2. |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2976 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
2977 Returns 0 on success.""" |
2750
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2978 q = repo.mq |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2979 if not name: |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2980 name = patch |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2981 patch = None |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2982 |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2983 if patch: |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2984 patch = q.lookup(patch) |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2985 else: |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2986 if not q.applied: |
7627 | 2987 ui.write(_('no patches applied\n')) |
2750
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2988 return |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2989 patch = q.lookup('qtip') |
3083
82c9d1aac308
Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents:
3082
diff
changeset
|
2990 absdest = q.join(name) |
82c9d1aac308
Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents:
3082
diff
changeset
|
2991 if os.path.isdir(absdest): |
4037
bbdba01cce28
Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents:
4016
diff
changeset
|
2992 name = normname(os.path.join(name, os.path.basename(patch))) |
3083
82c9d1aac308
Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents:
3082
diff
changeset
|
2993 absdest = q.join(name) |
14423 | 2994 q.checkpatchname(name) |
2750
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
2995 |
10510
f77f3383c666
i18n: mark more strings for translation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10498
diff
changeset
|
2996 ui.note(_('renaming %s to %s\n') % (patch, name)) |
14574
12fba7bcb4f1
mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14573
diff
changeset
|
2997 i = q.findseries(patch) |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
2998 guards = q.guard_re.findall(q.fullseries[i]) |
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14564
diff
changeset
|
2999 q.fullseries[i] = name + ''.join([' #' + g for g in guards]) |
14575
845c864200d0
mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14574
diff
changeset
|
3000 q.parseseries() |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
3001 q.seriesdirty = True |
2750
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
3002 |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
3003 info = q.isapplied(patch) |
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
3004 if info: |
2818
bdc067ff6cf5
Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents:
2816
diff
changeset
|
3005 q.applied[info[0]] = statusentry(info[1], name) |
15879
710e6bf15538
mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents:
15878
diff
changeset
|
3006 q.applieddirty = True |
2750
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
3007 |
11513
0c944b7af564
mq: fixed ENOENT when qrename to new/directory.patch
Yuya Nishihara <yuya@tcha.org>
parents:
11462
diff
changeset
|
3008 destdir = os.path.dirname(absdest) |
0c944b7af564
mq: fixed ENOENT when qrename to new/directory.patch
Yuya Nishihara <yuya@tcha.org>
parents:
11462
diff
changeset
|
3009 if not os.path.isdir(destdir): |
0c944b7af564
mq: fixed ENOENT when qrename to new/directory.patch
Yuya Nishihara <yuya@tcha.org>
parents:
11462
diff
changeset
|
3010 os.makedirs(destdir) |
2819 | 3011 util.rename(q.join(patch), absdest) |
2750
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
3012 r = q.qrepo() |
12875
b59b5193d4d0
mq: qrename should not touch the dirstate if src is untracked (issue2460)
Patrick Mezard <pmezard@gmail.com>
parents:
12850
diff
changeset
|
3013 if r and patch in r.dirstate: |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11302
diff
changeset
|
3014 wctx = r[None] |
27848
9bda75a0c783
with: use context manager in qrename
Bryan O'Sullivan <bryano@fb.com>
parents:
27847
diff
changeset
|
3015 with r.wlock(): |
6648
2519976a998b
mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents:
6635
diff
changeset
|
3016 if r.dirstate[patch] == 'a': |
14434
cc8c09855d19
dirstate: rename forget to drop
Matt Mackall <mpm@selenic.com>
parents:
14424
diff
changeset
|
3017 r.dirstate.drop(patch) |
6648
2519976a998b
mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents:
6635
diff
changeset
|
3018 r.dirstate.add(name) |
2519976a998b
mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents:
6635
diff
changeset
|
3019 else: |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11302
diff
changeset
|
3020 wctx.copy(patch, name) |
14435
5f6090e559fa
context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents:
14434
diff
changeset
|
3021 wctx.forget([patch]) |
2750
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
3022 |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
3023 q.savedirty() |
2750
8c814c1ab31e
New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents:
2748
diff
changeset
|
3024 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3025 @command("qrestore", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3026 [('d', 'delete', None, _('delete save entry')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3027 ('u', 'update', None, _('update queue working directory'))], |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3028 _('hg qrestore [-d] [-u] REV')) |
1808 | 3029 def restore(ui, repo, rev, **opts): |
10360
bcf90e712dc3
mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10359
diff
changeset
|
3030 """restore the queue state saved by a revision (DEPRECATED) |
bcf90e712dc3
mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10359
diff
changeset
|
3031 |
12352
5be733b20bd1
mq: fix the deprecation comment for qsave & qrestore.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12344
diff
changeset
|
3032 This command is deprecated, use :hg:`rebase` instead.""" |
1808 | 3033 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
|
3034 q = repo.mq |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3035 q.restore(repo, rev, delete=opts.get('delete'), |
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3036 qupdate=opts.get('update')) |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
3037 q.savedirty() |
1808 | 3038 return 0 |
3039 | |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3040 @command("qsave", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3041 [('c', 'copy', None, _('copy patch directory')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3042 ('n', 'name', '', |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3043 _('copy directory name'), _('NAME')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3044 ('e', 'empty', None, _('clear queue status file')), |
32375
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32347
diff
changeset
|
3045 ('f', 'force', None, _('force copy'))] + cmdutil.commitopts, |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3046 _('hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]')) |
1808 | 3047 def save(ui, repo, **opts): |
10360
bcf90e712dc3
mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10359
diff
changeset
|
3048 """save current queue state (DEPRECATED) |
bcf90e712dc3
mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10359
diff
changeset
|
3049 |
12352
5be733b20bd1
mq: fix the deprecation comment for qsave & qrestore.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12344
diff
changeset
|
3050 This command is deprecated, use :hg:`rebase` instead.""" |
2724
9c41ae1908c7
mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents:
2723
diff
changeset
|
3051 q = repo.mq |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14620
diff
changeset
|
3052 message = cmdutil.logmessage(ui, opts) |
2694
0fb28dbf0dc7
MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents:
2682
diff
changeset
|
3053 ret = q.save(repo, msg=message) |
1808 | 3054 if ret: |
3055 return ret | |
15880
02b135558756
mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents:
15879
diff
changeset
|
3056 q.savedirty() # save to .hg/patches before copying |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3057 if opts.get('copy'): |
1808 | 3058 path = q.path |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3059 if opts.get('name'): |
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3060 newpath = os.path.join(q.basepath, opts.get('name')) |
1808 | 3061 if os.path.exists(newpath): |
3062 if not os.path.isdir(newpath): | |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3063 raise error.Abort(_('destination %s exists and is not ' |
2712
8e5cd8d11b51
mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2711
diff
changeset
|
3064 'a directory') % newpath) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3065 if not opts.get('force'): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3066 raise error.Abort(_('destination %s exists, ' |
2712
8e5cd8d11b51
mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2711
diff
changeset
|
3067 'use -f to force') % newpath) |
1808 | 3068 else: |
3069 newpath = savename(path) | |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
3070 ui.warn(_("copy %s to %s\n") % (path, newpath)) |
1808 | 3071 util.copyfiles(path, newpath) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3072 if opts.get('empty'): |
15880
02b135558756
mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents:
15879
diff
changeset
|
3073 del q.applied[:] |
02b135558756
mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents:
15879
diff
changeset
|
3074 q.applieddirty = True |
02b135558756
mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents:
15879
diff
changeset
|
3075 q.savedirty() |
1808 | 3076 return 0 |
1810
7596611ab3d5
Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1808
diff
changeset
|
3077 |
1808 | 3078 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3079 @command("qselect", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3080 [('n', 'none', None, _('disable all guards')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3081 ('s', 'series', None, _('list all guards in series file')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3082 ('', 'pop', None, _('pop to before first guarded applied patch')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3083 ('', 'reapply', None, _('pop, then reapply patches'))], |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3084 _('hg qselect [OPTION]... [GUARD]...')) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3085 def select(ui, repo, *args, **opts): |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3086 '''set or print guarded patches to push |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3087 |
11307
7f72031d4047
mq: use hg reST role some more
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
3088 Use the :hg:`qguard` command to set or print guards on patch, then use |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3089 qselect to tell mq which guards to use. A patch will be pushed if |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3090 it has no guards or any positive guards match the currently |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3091 selected guard, but will not be pushed if any negative guards |
9824
87c92b260710
mq: fix literal blocks in docstrings
Martin Geisler <mg@lazybytes.net>
parents:
9733
diff
changeset
|
3092 match the current guard. For example:: |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3093 |
13791 | 3094 qguard foo.patch -- -stable (negative guard) |
3095 qguard bar.patch +stable (positive guard) | |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3096 qselect stable |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3097 |
2940
b1e6d701a03a
mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents:
2939
diff
changeset
|
3098 This activates the "stable" guard. mq will skip foo.patch (because |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3099 it has a negative match) but push bar.patch (because it has a |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3100 positive match). |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3101 |
2940
b1e6d701a03a
mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents:
2939
diff
changeset
|
3102 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
|
3103 With one argument, sets the active guard. |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3186
diff
changeset
|
3104 |
2940
b1e6d701a03a
mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents:
2939
diff
changeset
|
3105 Use -n/--none to deactivate guards (no other arguments needed). |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3106 When no guards are active, patches with positive guards are |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3107 skipped and patches with negative guards are pushed. |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3108 |
2940
b1e6d701a03a
mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents:
2939
diff
changeset
|
3109 qselect can change the guards on applied patches. It does not pop |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3110 guarded patches by default. Use --pop to pop back to the last |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3111 applied patch that is not guarded. Use --reapply (which implies |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3112 --pop) to push back to the current patch afterwards, but skip |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3113 guarded patches. |
2844
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3114 |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3115 Use -s/--series to print a list of all guards in the series file |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
3116 (no other arguments needed). Use -v for more information. |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
3117 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
3118 Returns 0 on success.''' |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3119 |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3120 q = repo.mq |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3121 guards = q.active() |
22453
fd0f0b0d316d
mq: report correct numbers for changing "number of guarded, applied patches"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
3122 pushable = lambda i: q.pushable(q.applied[i].name)[0] |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3123 if args or opts.get('none'): |
2844
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3124 old_unapplied = q.unapplied(repo) |
22453
fd0f0b0d316d
mq: report correct numbers for changing "number of guarded, applied patches"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
3125 old_guarded = [i for i in xrange(len(q.applied)) if not pushable(i)] |
14578
28a2646f3b81
mq: rename set_active to setactive
Adrian Buehlmann <adrian@cadifra.com>
parents:
14577
diff
changeset
|
3126 q.setactive(args) |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
3127 q.savedirty() |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3128 if not args: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3129 ui.status(_('guards deactivated\n')) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3130 if not opts.get('pop') and not opts.get('reapply'): |
2844
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3131 unapplied = q.unapplied(repo) |
22453
fd0f0b0d316d
mq: report correct numbers for changing "number of guarded, applied patches"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21965
diff
changeset
|
3132 guarded = [i for i in xrange(len(q.applied)) if not pushable(i)] |
2844
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3133 if len(unapplied) != len(old_unapplied): |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3134 ui.status(_('number of unguarded, unapplied patches has ' |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3135 'changed from %d to %d\n') % |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3136 (len(old_unapplied), len(unapplied))) |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3137 if len(guarded) != len(old_guarded): |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3138 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
|
3139 'from %d to %d\n') % |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3140 (len(old_guarded), len(guarded))) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3141 elif opts.get('series'): |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3142 guards = {} |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3143 noguards = 0 |
14573
d590ff1f22b2
mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents:
14572
diff
changeset
|
3144 for gs in q.seriesguards: |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3145 if not gs: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3146 noguards += 1 |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3147 for g in gs: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3148 guards.setdefault(g, 0) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3149 guards[g] += 1 |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3150 if ui.verbose: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3151 guards['NONE'] = noguards |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3152 guards = guards.items() |
9032
1fa80c5428b8
compat: use 'key' argument instead of 'cmp' when sorting a list
Alejandro Santos <alejolp@alejolp.com>
parents:
9016
diff
changeset
|
3153 guards.sort(key=lambda x: x[0][1:]) |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3154 if guards: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3155 ui.note(_('guards in series file:\n')) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3156 for guard, count in guards: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3157 ui.note('%2d ' % count) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3158 ui.write(guard, '\n') |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3159 else: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3160 ui.note(_('no guards in series file\n')) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3161 else: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3162 if guards: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3163 ui.note(_('active guards:\n')) |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3164 for g in guards: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3165 ui.write(g, '\n') |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3166 else: |
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3167 ui.write(_('no active guards\n')) |
22454
ac31d87608d6
mq: use "mq.applied[i].name" instead of "mq.appliedname(i)" for safety
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22453
diff
changeset
|
3168 reapply = opts.get('reapply') and q.applied and q.applied[-1].name |
2844
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3169 popped = False |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3170 if opts.get('pop') or opts.get('reapply'): |
2844
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3171 for i in xrange(len(q.applied)): |
22456
4bbcee186fc6
mq: examine "pushable" of already applied patch correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22455
diff
changeset
|
3172 if not pushable(i): |
2844
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3173 ui.status(_('popping guarded patches\n')) |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3174 popped = True |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3175 if i == 0: |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3176 q.pop(repo, all=True) |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3177 else: |
22455
c89379d47e95
mq: pop correct patches when changing pushable-ness of already applied ones
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22454
diff
changeset
|
3178 q.pop(repo, q.applied[i - 1].name) |
2844
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3179 break |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3180 if popped: |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3181 try: |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3182 if reapply: |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3183 ui.status(_('reapplying unguarded patches\n')) |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3184 q.push(repo, reapply) |
582cbc4392cb
qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2830
diff
changeset
|
3185 finally: |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14579
diff
changeset
|
3186 q.savedirty() |
2821
2e4ace008c94
mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2819
diff
changeset
|
3187 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3188 @command("qfinish", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3189 [('a', 'applied', None, _('finish all applied changesets'))], |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3190 _('hg qfinish [-a] [REV]...')) |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3191 def finish(ui, repo, *revrange, **opts): |
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3192 """move applied patches into repository history |
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3193 |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3194 Finishes the specified revisions (corresponding to applied |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3195 patches) by moving them out of mq control into regular repository |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3196 history. |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3197 |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
3198 Accepts a revision range or the -a/--applied option. If --applied |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
3199 is specified, all applied mq revisions are removed from mq |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
3200 control. Otherwise, the given revisions must be at the base of the |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8075
diff
changeset
|
3201 stack of applied patches. |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3202 |
7994
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3203 This can be especially useful if your changes have been applied to |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3204 an upstream repository, or if you are about to push your changes |
3c22fdc741d8
mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
3205 to upstream. |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
3206 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
3207 Returns 0 on success. |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3208 """ |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3209 if not opts.get('applied') and not revrange: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3210 raise error.Abort(_('no revisions specified')) |
12281
d9cf0d1d0d0f
mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents:
12266
diff
changeset
|
3211 elif opts.get('applied'): |
11730
7469ff872122
qfinish: fix range logic for --applied
Matt Mackall <mpm@selenic.com>
parents:
11717
diff
changeset
|
3212 revrange = ('qbase::qtip',) + revrange |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3213 |
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3214 q = repo.mq |
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3215 if not q.applied: |
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3216 ui.status(_('no patches applied\n')) |
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3217 return 0 |
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3218 |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14298
diff
changeset
|
3219 revs = scmutil.revrange(repo, revrange) |
15476
7c06e9c35f2f
mq: add a warning about uncommitted changes for qfinish
Matt Mackall <mpm@selenic.com>
parents:
15322
diff
changeset
|
3220 if repo['.'].rev() in revs and repo[None].files(): |
7c06e9c35f2f
mq: add a warning about uncommitted changes for qfinish
Matt Mackall <mpm@selenic.com>
parents:
15322
diff
changeset
|
3221 ui.warn(_('warning: uncommitted changes in the working directory\n')) |
17512 | 3222 # queue.finish may changes phases but leave the responsibility to lock the |
15920
885e0c71db9b
mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15883
diff
changeset
|
3223 # repo to the caller to avoid deadlock with wlock. This command code is |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17191
diff
changeset
|
3224 # responsibility for this locking. |
27847
71853c0ba592
with: use context manager in qfinish
Bryan O'Sullivan <bryano@fb.com>
parents:
27832
diff
changeset
|
3225 with repo.lock(): |
15920
885e0c71db9b
mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15883
diff
changeset
|
3226 q.finish(repo, revs) |
885e0c71db9b
mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15883
diff
changeset
|
3227 q.savedirty() |
6645
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3228 return 0 |
37eedb1a1848
mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6644
diff
changeset
|
3229 |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3230 @command("qqueue", |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3231 [('l', 'list', False, _('list all available queues')), |
14987
3709cca378ff
mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14943
diff
changeset
|
3232 ('', 'active', False, _('print name of active queue')), |
14298
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3233 ('c', 'create', False, _('create new queue')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3234 ('', 'rename', False, _('rename active queue')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3235 ('', 'delete', False, _('delete reference to queue')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3236 ('', 'purge', False, _('delete queue, and remove patch dir')), |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3237 ], |
21719639276d
mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14267
diff
changeset
|
3238 _('[OPTION] [QUEUE]')) |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3239 def qqueue(ui, repo, name=None, **opts): |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3240 '''manage multiple patch queues |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3241 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3242 Supports switching between different patch queues, as well as creating |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3243 new patch queues and deleting existing ones. |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3244 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3245 Omitting a queue name or specifying -l/--list will show you the registered |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3246 queues - by default the "normal" patches queue is registered. The currently |
14987
3709cca378ff
mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14943
diff
changeset
|
3247 active queue will be marked with "(active)". Specifying --active will print |
3709cca378ff
mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14943
diff
changeset
|
3248 only the name of the active queue. |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3249 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3250 To create a new queue, use -c/--create. The queue is automatically made |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3251 active, except in the case where there are applied patches from the |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3252 currently active queue in the repository. Then the queue will only be |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3253 created and switching will fail. |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3254 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3255 To delete an existing queue, use --delete. You cannot delete the currently |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3256 active queue. |
12538
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
3257 |
c87216e5e43e
mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents:
12508
diff
changeset
|
3258 Returns 0 on success. |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3259 ''' |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3260 q = repo.mq |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3261 _defaultqueue = 'patches' |
11270
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3262 _allqueues = 'patches.queues' |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3263 _activequeue = 'patches.queue' |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3264 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3265 def _getcurrent(): |
11270
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3266 cur = os.path.basename(q.path) |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3267 if cur.startswith('patches-'): |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3268 cur = cur[8:] |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3269 return cur |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3270 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3271 def _noqueues(): |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3272 try: |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23443
diff
changeset
|
3273 fh = repo.vfs(_allqueues, 'r') |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3274 fh.close() |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3275 except IOError: |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3276 return True |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3277 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3278 return False |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3279 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3280 def _getqueues(): |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3281 current = _getcurrent() |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3282 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3283 try: |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23443
diff
changeset
|
3284 fh = repo.vfs(_allqueues, 'r') |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3285 queues = [queue.strip() for queue in fh if queue.strip()] |
13400
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13373
diff
changeset
|
3286 fh.close() |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3287 if current not in queues: |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3288 queues.append(current) |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3289 except IOError: |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3290 queues = [_defaultqueue] |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3291 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3292 return sorted(queues) |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3293 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3294 def _setactive(name): |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3295 if q.applied: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3296 raise error.Abort(_('new queue created, but cannot make active ' |
17708
4f2f0f367ef6
mq: improve qqueue message with patches applied (issue3036)
Bryan O'Sullivan <bryano@fb.com>
parents:
17537
diff
changeset
|
3297 'as patches are applied')) |
11938
b8b1e6e78486
mq/qqueue: split _setactive
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11819
diff
changeset
|
3298 _setactivenocheck(name) |
b8b1e6e78486
mq/qqueue: split _setactive
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11819
diff
changeset
|
3299 |
b8b1e6e78486
mq/qqueue: split _setactive
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11819
diff
changeset
|
3300 def _setactivenocheck(name): |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23443
diff
changeset
|
3301 fh = repo.vfs(_activequeue, 'w') |
11270
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3302 if name != 'patches': |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3303 fh.write(name) |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3304 fh.close() |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3305 |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3306 def _addqueue(name): |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23443
diff
changeset
|
3307 fh = repo.vfs(_allqueues, 'a') |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3308 fh.write('%s\n' % (name,)) |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3309 fh.close() |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3310 |
11939
7d2ea5ce4aac
mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11938
diff
changeset
|
3311 def _queuedir(name): |
7d2ea5ce4aac
mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11938
diff
changeset
|
3312 if name == 'patches': |
31333
f897a088377c
mq: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31312
diff
changeset
|
3313 return repo.vfs.join('patches') |
11939
7d2ea5ce4aac
mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11938
diff
changeset
|
3314 else: |
31333
f897a088377c
mq: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31312
diff
changeset
|
3315 return repo.vfs.join('patches-' + name) |
11939
7d2ea5ce4aac
mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11938
diff
changeset
|
3316 |
11270
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3317 def _validname(name): |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3318 for n in name: |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3319 if n in ':\\/.': |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3320 return False |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3321 return True |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3322 |
11966
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3323 def _delete(name): |
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3324 if name not in existing: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3325 raise error.Abort(_('cannot delete queue that does not exist')) |
11966
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3326 |
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3327 current = _getcurrent() |
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3328 |
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3329 if name == current: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3330 raise error.Abort(_('cannot delete currently active queue')) |
11966
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3331 |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23443
diff
changeset
|
3332 fh = repo.vfs('patches.queues.new', 'w') |
11966
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3333 for queue in existing: |
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3334 if queue == name: |
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3335 continue |
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3336 fh.write('%s\n' % (queue,)) |
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3337 fh.close() |
31312
7eb53603744b
vfs: use repo.vfs.rename
Mads Kiilerich <mads@kiilerich.com>
parents:
31309
diff
changeset
|
3338 repo.vfs.rename('patches.queues.new', _allqueues) |
11966
22f1994fb669
mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11947
diff
changeset
|
3339 |
14987
3709cca378ff
mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14943
diff
changeset
|
3340 if not name or opts.get('list') or opts.get('active'): |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3341 current = _getcurrent() |
14987
3709cca378ff
mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14943
diff
changeset
|
3342 if opts.get('active'): |
3709cca378ff
mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14943
diff
changeset
|
3343 ui.write('%s\n' % (current,)) |
3709cca378ff
mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
14943
diff
changeset
|
3344 return |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3345 for queue in _getqueues(): |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3346 ui.write('%s' % (queue,)) |
11767
9b771b4ce2f3
mq/qqueue: --list does not print (active) with --quiet
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11730
diff
changeset
|
3347 if queue == current and not ui.quiet: |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3348 ui.write(_(' (active)\n')) |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3349 else: |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3350 ui.write('\n') |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3351 return |
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3352 |
11270
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3353 if not _validname(name): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3354 raise error.Abort( |
11270
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3355 _('invalid queue name, may not contain the characters ":\\/."')) |
457813cb3024
mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents:
11234
diff
changeset
|
3356 |
29752
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3357 with repo.wlock(): |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3358 existing = _getqueues() |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3359 |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3360 if opts.get('create'): |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3361 if name in existing: |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3362 raise error.Abort(_('queue "%s" already exists') % name) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3363 if _noqueues(): |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3364 _addqueue(_defaultqueue) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3365 _addqueue(name) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3366 _setactive(name) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3367 elif opts.get('rename'): |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3368 current = _getcurrent() |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3369 if name == current: |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3370 raise error.Abort(_('can\'t rename "%s" to its current name') |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3371 % name) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3372 if name in existing: |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3373 raise error.Abort(_('queue "%s" already exists') % name) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3374 |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3375 olddir = _queuedir(current) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3376 newdir = _queuedir(name) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3377 |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3378 if os.path.exists(newdir): |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3379 raise error.Abort(_('non-queue directory "%s" already exists') % |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3380 newdir) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3381 |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3382 fh = repo.vfs('patches.queues.new', 'w') |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3383 for queue in existing: |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3384 if queue == current: |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3385 fh.write('%s\n' % (name,)) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3386 if os.path.exists(olddir): |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3387 util.rename(olddir, newdir) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3388 else: |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3389 fh.write('%s\n' % (queue,)) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3390 fh.close() |
31312
7eb53603744b
vfs: use repo.vfs.rename
Mads Kiilerich <mads@kiilerich.com>
parents:
31309
diff
changeset
|
3391 repo.vfs.rename('patches.queues.new', _allqueues) |
29752
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3392 _setactivenocheck(name) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3393 elif opts.get('delete'): |
11967
6e3875a80533
mq/qqueue: add --purge option to delete a queue and its patch dir
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
11966
diff
changeset
|
3394 _delete(name) |
29752
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3395 elif opts.get('purge'): |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3396 if name in existing: |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3397 _delete(name) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3398 qdir = _queuedir(name) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3399 if os.path.exists(qdir): |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3400 shutil.rmtree(qdir) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3401 else: |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3402 if name not in existing: |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3403 raise error.Abort(_('use --create to create a new queue')) |
8a8c1c4b8f24
mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29127
diff
changeset
|
3404 _setactive(name) |
11229
1e701ffd9df4
mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents:
11216
diff
changeset
|
3405 |
15928
3a51eb88046a
mq: ensure mq changesets are set to secret when no phase data are found
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15927
diff
changeset
|
3406 def mqphasedefaults(repo, roots): |
3a51eb88046a
mq: ensure mq changesets are set to secret when no phase data are found
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15927
diff
changeset
|
3407 """callback used to set mq changeset as secret when no phase data exists""" |
3a51eb88046a
mq: ensure mq changesets are set to secret when no phase data are found
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15927
diff
changeset
|
3408 if repo.mq.applied: |
16028
922c0e9b40be
mq: take mq.secret configuration into account when picking the default phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16027
diff
changeset
|
3409 if repo.ui.configbool('mq', 'secret', False): |
922c0e9b40be
mq: take mq.secret configuration into account when picking the default phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16027
diff
changeset
|
3410 mqphase = phases.secret |
922c0e9b40be
mq: take mq.secret configuration into account when picking the default phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16027
diff
changeset
|
3411 else: |
922c0e9b40be
mq: take mq.secret configuration into account when picking the default phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16027
diff
changeset
|
3412 mqphase = phases.draft |
15972
341c58282b25
mq: pass qbase node instead of mq statusentry in phasedefaults
Augie Fackler <durin42@gmail.com>
parents:
15952
diff
changeset
|
3413 qbase = repo[repo.mq.applied[0].node] |
16028
922c0e9b40be
mq: take mq.secret configuration into account when picking the default phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16027
diff
changeset
|
3414 roots[mqphase].add(qbase.node()) |
15928
3a51eb88046a
mq: ensure mq changesets are set to secret when no phase data are found
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15927
diff
changeset
|
3415 return roots |
3a51eb88046a
mq: ensure mq changesets are set to secret when no phase data are found
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15927
diff
changeset
|
3416 |
1808 | 3417 def reposetup(ui, repo): |
2818
bdc067ff6cf5
Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents:
2816
diff
changeset
|
3418 class mqrepo(repo.__class__): |
19395
19622224559b
mq: use an unfiltered property cache for the queue object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19212
diff
changeset
|
3419 @localrepo.unfilteredpropertycache |
8524
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
3420 def mq(self): |
19064
743daa601445
mq: do not inherit settings form base repo in mqrepo (Fixes issue2358)
Simon Heimberg <simohe@besonet.ch>
parents:
18958
diff
changeset
|
3421 return queue(self.ui, self.baseui, self.path) |
8524
21c87b299a04
mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents:
8484
diff
changeset
|
3422 |
20628
e3d1df48fcc6
cmdserver: reload mq on each runcommand request to avoid corruption
Yuya Nishihara <yuya@tcha.org>
parents:
20442
diff
changeset
|
3423 def invalidateall(self): |
e3d1df48fcc6
cmdserver: reload mq on each runcommand request to avoid corruption
Yuya Nishihara <yuya@tcha.org>
parents:
20442
diff
changeset
|
3424 super(mqrepo, self).invalidateall() |
e3d1df48fcc6
cmdserver: reload mq on each runcommand request to avoid corruption
Yuya Nishihara <yuya@tcha.org>
parents:
20442
diff
changeset
|
3425 if localrepo.hasunfilteredcache(self, 'mq'): |
20629
277dc5f27310
cmdserver: recreate mq object on runcommand in case queue path was changed
Yuya Nishihara <yuya@tcha.org>
parents:
20628
diff
changeset
|
3426 # recreate mq in case queue path was changed |
277dc5f27310
cmdserver: recreate mq object on runcommand in case queue path was changed
Yuya Nishihara <yuya@tcha.org>
parents:
20628
diff
changeset
|
3427 delattr(self.unfiltered(), 'mq') |
20628
e3d1df48fcc6
cmdserver: reload mq on each runcommand request to avoid corruption
Yuya Nishihara <yuya@tcha.org>
parents:
20442
diff
changeset
|
3428 |
14596
6a0070d00bc8
mq: rename abort_if_wdir_patched to abortifwdirpatched
Adrian Buehlmann <adrian@cadifra.com>
parents:
14595
diff
changeset
|
3429 def abortifwdirpatched(self, errmsg, force=False): |
19856
28b1b7b9b4a9
shelve: allow shelving of a change with an mq patch applied
David Soria Parra <dsp@experimentalworks.net>
parents:
19826
diff
changeset
|
3430 if self.mq.applied and self.mq.checkapplied and not force: |
13520
9510ddf87c43
mq: forbid commit of merge involving mq patches
Martin Geisler <mg@aragost.com>
parents:
13508
diff
changeset
|
3431 parents = self.dirstate.parents() |
9510ddf87c43
mq: forbid commit of merge involving mq patches
Martin Geisler <mg@aragost.com>
parents:
13508
diff
changeset
|
3432 patches = [s.node for s in self.mq.applied] |
9510ddf87c43
mq: forbid commit of merge involving mq patches
Martin Geisler <mg@aragost.com>
parents:
13508
diff
changeset
|
3433 if parents[0] in patches or parents[1] in patches: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3434 raise error.Abort(errmsg) |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3186
diff
changeset
|
3435 |
8711 | 3436 def commit(self, text="", user=None, date=None, match=None, |
31407
b8848750a3c1
mq: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31394
diff
changeset
|
3437 force=False, editor=False, extra=None): |
b8848750a3c1
mq: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31394
diff
changeset
|
3438 if extra is None: |
b8848750a3c1
mq: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31394
diff
changeset
|
3439 extra = {} |
14596
6a0070d00bc8
mq: rename abort_if_wdir_patched to abortifwdirpatched
Adrian Buehlmann <adrian@cadifra.com>
parents:
14595
diff
changeset
|
3440 self.abortifwdirpatched( |
2848
307439d6fede
mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2845
diff
changeset
|
3441 _('cannot commit over an applied mq patch'), |
307439d6fede
mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2845
diff
changeset
|
3442 force) |
2845
addd03c7fbfa
Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents:
2844
diff
changeset
|
3443 |
8711 | 3444 return super(mqrepo, self).commit(text, user, date, match, force, |
3445 editor, extra) | |
2845
addd03c7fbfa
Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents:
2844
diff
changeset
|
3446 |
20924
e10000369b47
push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20827
diff
changeset
|
3447 def checkpush(self, pushop): |
e10000369b47
push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20827
diff
changeset
|
3448 if self.mq.applied and self.mq.checkapplied and not pushop.force: |
15952
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3449 outapplied = [e.node for e in self.mq.applied] |
20924
e10000369b47
push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20827
diff
changeset
|
3450 if pushop.revs: |
15952
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3451 # Assume applied patches have no non-patch descendants and |
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3452 # are not on remote already. Filtering any changeset not |
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3453 # pushed. |
20924
e10000369b47
push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20827
diff
changeset
|
3454 heads = set(pushop.revs) |
15952
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3455 for node in reversed(outapplied): |
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3456 if node in heads: |
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3457 break |
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3458 else: |
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3459 outapplied.pop() |
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3460 # looking for pushed and shared changeset |
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3461 for node in outapplied: |
17954
4dc438ddd246
mq: don't refer to a random name-captured repo object
Bryan O'Sullivan <bryano@fb.com>
parents:
17922
diff
changeset
|
3462 if self[node].phase() < phases.secret: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3463 raise error.Abort(_('source has mq patches applied')) |
15952
ec8a9e06cf05
mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15934
diff
changeset
|
3464 # no non-secret patches pushed |
20924
e10000369b47
push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20827
diff
changeset
|
3465 super(mqrepo, self).checkpush(pushop) |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3186
diff
changeset
|
3466 |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9111
diff
changeset
|
3467 def _findtags(self): |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9111
diff
changeset
|
3468 '''augment tags from base class with patch tags''' |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9111
diff
changeset
|
3469 result = super(mqrepo, self)._findtags() |
2682
4e2dc5c16e61
Add mq patch names to tagscache instead of overriding lookup.
Brendan Cully <brendan@kublai.com>
parents:
2677
diff
changeset
|
3470 |
2724
9c41ae1908c7
mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents:
2723
diff
changeset
|
3471 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
|
3472 if not q.applied: |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9111
diff
changeset
|
3473 return result |
2663
96950d39171d
Mq: modify repo.lookup to resolve applied patches too.
Brendan Cully <brendan@kublai.com>
parents:
2554
diff
changeset
|
3474 |
10678
da2a0c9c895d
mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10663
diff
changeset
|
3475 mqtags = [(patch.node, patch.name) for patch in q.applied] |
5979
b4858eb4b58f
mqrepo: don't abort if the status file has an unknown node
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5534
diff
changeset
|
3476 |
13508
0396ca8015be
mq: fix qpush recursion in _findtags when status file is wrong (issue2664)
Matt Mackall <mpm@selenic.com>
parents:
13507
diff
changeset
|
3477 try: |
18011
4908197d7422
clfilter: mq should not warn about filtered mq patches
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18010
diff
changeset
|
3478 # for now ignore filtering business |
4908197d7422
clfilter: mq should not warn about filtered mq patches
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18010
diff
changeset
|
3479 self.unfiltered().changelog.rev(mqtags[-1][0]) |
14600
17c16bcf6926
mq: catch correct exception when calling changelog.rev()
Idan Kamara <idankk86@gmail.com>
parents:
14596
diff
changeset
|
3480 except error.LookupError: |
6960
46da38eef1b0
i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents:
6940
diff
changeset
|
3481 self.ui.warn(_('mq status file refers to unknown node %s\n') |
7639
ae7a614a6a57
mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
3482 % short(mqtags[-1][0])) |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9111
diff
changeset
|
3483 return result |
5979
b4858eb4b58f
mqrepo: don't abort if the status file has an unknown node
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5534
diff
changeset
|
3484 |
18662
c5f7e83d47cd
mq: comply with filtering when injecting fake tags (issue3812)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18644
diff
changeset
|
3485 # do not add fake tags for filtered revisions |
c5f7e83d47cd
mq: comply with filtering when injecting fake tags (issue3812)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18644
diff
changeset
|
3486 included = self.changelog.hasnode |
c5f7e83d47cd
mq: comply with filtering when injecting fake tags (issue3812)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18644
diff
changeset
|
3487 mqtags = [mqt for mqt in mqtags if included(mqt[0])] |
c5f7e83d47cd
mq: comply with filtering when injecting fake tags (issue3812)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18644
diff
changeset
|
3488 if not mqtags: |
c5f7e83d47cd
mq: comply with filtering when injecting fake tags (issue3812)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18644
diff
changeset
|
3489 return result |
c5f7e83d47cd
mq: comply with filtering when injecting fake tags (issue3812)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18644
diff
changeset
|
3490 |
2723
04d9b31faeca
mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents:
2720
diff
changeset
|
3491 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
|
3492 mqtags.append((mqtags[0][0], 'qbase')) |
4219
6cb5be6bd70f
mq: add qparent tag (first parent of qbase)
Brendan Cully <brendan@kublai.com>
parents:
4209
diff
changeset
|
3493 mqtags.append((self.changelog.parents(mqtags[0][0])[0], 'qparent')) |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9111
diff
changeset
|
3494 tags = result[0] |
2723
04d9b31faeca
mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents:
2720
diff
changeset
|
3495 for patch in mqtags: |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9111
diff
changeset
|
3496 if patch[1] in tags: |
16929
4b02d7006169
mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents:
16867
diff
changeset
|
3497 self.ui.warn(_('tag %s overrides mq patch of the same ' |
16683 | 3498 'name\n') % patch[1]) |
2723
04d9b31faeca
mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents:
2720
diff
changeset
|
3499 else: |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9111
diff
changeset
|
3500 tags[patch[1]] = patch[0] |
2682
4e2dc5c16e61
Add mq patch names to tagscache instead of overriding lookup.
Brendan Cully <brendan@kublai.com>
parents:
2677
diff
changeset
|
3501 |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9111
diff
changeset
|
3502 return result |
2664
9b8df8dceeed
Add qtip and qbase to mq qlookup.
Brendan Cully <brendan@kublai.com>
parents:
2663
diff
changeset
|
3503 |
2851
82f50658c72b
mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2850
diff
changeset
|
3504 if repo.local(): |
82f50658c72b
mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2850
diff
changeset
|
3505 repo.__class__ = mqrepo |
1808 | 3506 |
15928
3a51eb88046a
mq: ensure mq changesets are set to secret when no phase data are found
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15927
diff
changeset
|
3507 repo._phasedefaults.append(mqphasedefaults) |
3a51eb88046a
mq: ensure mq changesets are set to secret when no phase data are found
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15927
diff
changeset
|
3508 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
3509 def mqimport(orig, ui, repo, *args, **kwargs): |
16416
c3aedd526d53
mq: replace hasattr() with util.safehasattr(), update check-code.py
Patrick Mezard <patrick@mezard.eu>
parents:
16303
diff
changeset
|
3510 if (util.safehasattr(repo, 'abortifwdirpatched') |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10276
diff
changeset
|
3511 and not kwargs.get('no_commit', False)): |
14596
6a0070d00bc8
mq: rename abort_if_wdir_patched to abortifwdirpatched
Adrian Buehlmann <adrian@cadifra.com>
parents:
14595
diff
changeset
|
3512 repo.abortifwdirpatched(_('cannot import over an applied patch'), |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
3513 kwargs.get('force')) |
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
3514 return orig(ui, repo, *args, **kwargs) |
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
3515 |
10402
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3516 def mqinit(orig, ui, *args, **kwargs): |
10558
6505773080e4
mq: simplify --mq handling / keep compatibility with other extensions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10510
diff
changeset
|
3517 mq = kwargs.pop('mq', None) |
10402
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3518 |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3519 if not mq: |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3520 return orig(ui, *args, **kwargs) |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3521 |
10691
a778a367c20b
mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents:
10690
diff
changeset
|
3522 if args: |
a778a367c20b
mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents:
10690
diff
changeset
|
3523 repopath = args[0] |
a778a367c20b
mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents:
10690
diff
changeset
|
3524 if not hg.islocal(repopath): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3525 raise error.Abort(_('only a local queue repository ' |
10691
a778a367c20b
mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents:
10690
diff
changeset
|
3526 'may be initialized')) |
a778a367c20b
mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents:
10690
diff
changeset
|
3527 else: |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30489
diff
changeset
|
3528 repopath = cmdutil.findrepo(pycompat.getcwd()) |
10691
a778a367c20b
mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents:
10690
diff
changeset
|
3529 if not repopath: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3530 raise error.Abort(_('there is no Mercurial repository here ' |
10691
a778a367c20b
mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents:
10690
diff
changeset
|
3531 '(.hg not found)')) |
10402
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3532 repo = hg.repository(ui, repopath) |
10480
3076b39d7f3e
mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents:
10476
diff
changeset
|
3533 return qinit(ui, repo, True) |
10402
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3534 |
10359
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3535 def mqcommand(orig, ui, repo, *args, **kwargs): |
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3536 """Add --mq option to operate on patch repository instead of main""" |
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3537 |
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3538 # some commands do not like getting unknown options |
32193
c6cbd0b66465
py3: convert key to str to make kwargs.pop work in mq
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31556
diff
changeset
|
3539 mq = kwargs.pop(r'mq', None) |
10359
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3540 |
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3541 if not mq: |
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3542 return orig(ui, repo, *args, **kwargs) |
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3543 |
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3544 q = repo.mq |
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3545 r = q.qrepo() |
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3546 if not r: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26578
diff
changeset
|
3547 raise error.Abort(_('no queue repository')) |
10407
2e8926e9cc32
mq: incorporate mq repo config when using --mq
Brendan Cully <brendan@kublai.com>
parents:
10402
diff
changeset
|
3548 return orig(r.ui, r, *args, **kwargs) |
10359
ec02cf8d1628
mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents:
10282
diff
changeset
|
3549 |
19212
d0ba7022c13b
mq: switch to new summary hook mechanism
Bryan O'Sullivan <bryano@fb.com>
parents:
19064
diff
changeset
|
3550 def summaryhook(ui, repo): |
11107
9c72c5c094aa
mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents:
11078
diff
changeset
|
3551 q = repo.mq |
9c72c5c094aa
mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents:
11078
diff
changeset
|
3552 m = [] |
9c72c5c094aa
mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents:
11078
diff
changeset
|
3553 a, u = len(q.applied), len(q.unapplied(repo)) |
9c72c5c094aa
mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents:
11078
diff
changeset
|
3554 if a: |
11121
d061ef1d781c
mq: make use of output labeling for summary
Eric Eisner <ede@mit.edu>
parents:
11120
diff
changeset
|
3555 m.append(ui.label(_("%d applied"), 'qseries.applied') % a) |
11107
9c72c5c094aa
mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents:
11078
diff
changeset
|
3556 if u: |
11121
d061ef1d781c
mq: make use of output labeling for summary
Eric Eisner <ede@mit.edu>
parents:
11120
diff
changeset
|
3557 m.append(ui.label(_("%d unapplied"), 'qseries.unapplied') % u) |
11107
9c72c5c094aa
mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents:
11078
diff
changeset
|
3558 if m: |
17893
4d1da97aa7e7
i18n: make column positioning message of MQ summary output translatable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17892
diff
changeset
|
3559 # i18n: column positioning for "hg summary" |
4d1da97aa7e7
i18n: make column positioning message of MQ summary output translatable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17892
diff
changeset
|
3560 ui.write(_("mq: %s\n") % ', '.join(m)) |
11107
9c72c5c094aa
mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents:
11078
diff
changeset
|
3561 else: |
17892
ba0a1701c81a
i18n: add "i18n" comment to column positioning messages of "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17888
diff
changeset
|
3562 # i18n: column positioning for "hg summary" |
11119
2e270443a2c6
mq: mark string for translation
Martin Geisler <mg@lazybytes.net>
parents:
11107
diff
changeset
|
3563 ui.note(_("mq: (empty queue)\n")) |
11107
9c72c5c094aa
mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents:
11078
diff
changeset
|
3564 |
28394
dcb4209bd30d
revset: replace extpredicate by revsetpredicate of registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28313
diff
changeset
|
3565 revsetpredicate = registrar.revsetpredicate() |
27586
42910f9fffeb
revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27533
diff
changeset
|
3566 |
42910f9fffeb
revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27533
diff
changeset
|
3567 @revsetpredicate('mq()') |
14210
68ade2a6b30a
mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents:
14191
diff
changeset
|
3568 def revsetmq(repo, subset, x): |
27586
42910f9fffeb
revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27533
diff
changeset
|
3569 """Changesets managed by MQ. |
14210
68ade2a6b30a
mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents:
14191
diff
changeset
|
3570 """ |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31023
diff
changeset
|
3571 revsetlang.getargs(x, 0, 0, _("mq takes no arguments")) |
14210
68ade2a6b30a
mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents:
14191
diff
changeset
|
3572 applied = set([repo[r.node].rev() for r in repo.mq.applied]) |
31023
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30879
diff
changeset
|
3573 return smartset.baseset([r for r in subset if r in applied]) |
14210
68ade2a6b30a
mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents:
14191
diff
changeset
|
3574 |
68ade2a6b30a
mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents:
14191
diff
changeset
|
3575 # tell hggettext to extract docstrings from these functions: |
68ade2a6b30a
mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents:
14191
diff
changeset
|
3576 i18nfunctions = [revsetmq] |
68ade2a6b30a
mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents:
14191
diff
changeset
|
3577 |
17101
6bc275593d07
mq: defer command wrapping to extsetup (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17059
diff
changeset
|
3578 def extsetup(ui): |
6bc275593d07
mq: defer command wrapping to extsetup (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17059
diff
changeset
|
3579 # Ensure mq wrappers are called first, regardless of extension load order by |
6bc275593d07
mq: defer command wrapping to extsetup (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17059
diff
changeset
|
3580 # NOT wrapping in uisetup() and instead deferring to init stage two here. |
10591
ff2704a8ded3
mq: drop -Q in favor of --mq only
Matt Mackall <mpm@selenic.com>
parents:
10589
diff
changeset
|
3581 mqopt = [('', 'mq', None, _("operate on patch repository"))] |
10402
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3582 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
3583 extensions.wrapcommand(commands.table, 'import', mqimport) |
19212
d0ba7022c13b
mq: switch to new summary hook mechanism
Bryan O'Sullivan <bryano@fb.com>
parents:
19064
diff
changeset
|
3584 cmdutil.summaryhooks.add('mq', summaryhook) |
10402
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3585 |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3586 entry = extensions.wrapcommand(commands.table, 'init', mqinit) |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3587 entry[1].extend(mqopt) |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
3588 |
12036
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3589 def dotable(cmdtable): |
28313
aa73d6a5d9ea
dispatch: store norepo/optionalrepo/inferrepo attributes in function (API)
Yuya Nishihara <yuya@tcha.org>
parents:
27919
diff
changeset
|
3590 for cmd, entry in cmdtable.iteritems(): |
12036
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3591 cmd = cmdutil.parsealiases(cmd)[0] |
28313
aa73d6a5d9ea
dispatch: store norepo/optionalrepo/inferrepo attributes in function (API)
Yuya Nishihara <yuya@tcha.org>
parents:
27919
diff
changeset
|
3592 func = entry[0] |
30485
acd30a959980
dispatch: stop supporting non-use of @command
Augie Fackler <augie@google.com>
parents:
30369
diff
changeset
|
3593 if func.norepo: |
12036
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3594 continue |
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3595 entry = extensions.wrapcommand(cmdtable, cmd, mqcommand) |
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3596 entry[1].extend(mqopt) |
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3597 |
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3598 dotable(commands.table) |
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3599 |
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3600 for extname, extmodule in extensions.extensions(): |
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3601 if extmodule.__file__ != __file__: |
31f02288bbc4
mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
11970
diff
changeset
|
3602 dotable(getattr(extmodule, 'cmdtable', {})) |
7142
88f1b8081f1c
Prevent import over an applied patch (closes issue795)
Brendan Cully <brendan@kublai.com>
parents:
7113
diff
changeset
|
3603 |
10826
717c35d55fb3
color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents:
10824
diff
changeset
|
3604 colortable = {'qguard.negative': 'red', |
717c35d55fb3
color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents:
10824
diff
changeset
|
3605 'qguard.positive': 'yellow', |
717c35d55fb3
color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents:
10824
diff
changeset
|
3606 'qguard.unguarded': 'green', |
717c35d55fb3
color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents:
10824
diff
changeset
|
3607 'qseries.applied': 'blue bold underline', |
717c35d55fb3
color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents:
10824
diff
changeset
|
3608 'qseries.guarded': 'black bold', |
717c35d55fb3
color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents:
10824
diff
changeset
|
3609 'qseries.missing': 'red bold', |
717c35d55fb3
color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents:
10824
diff
changeset
|
3610 'qseries.unapplied': 'black bold'} |