annotate hgext/mq.py @ 32751:627eaab1ad07

tests: factor external procedures out for portability Fortunately, "&&" is treated as "execute next, if previous doesn't fail" both on POSIX and Windows. But keeping portability of "dirstaterace.command" manually is troublesome. This patch factors external procedures out as a shell script for portability. "sh SCRIPT" always allows scripting in POSIX style. This change is also for convenience. Fixed script name can reduce command line arguments. "r" prefix is needed for "sh '$TESTTMP/dirstaterace.sh'", because $TESTTMP contains backslash on Windows.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Fri, 09 Jun 2017 13:07:49 +0900
parents 04baab18d60a
children 870560c759ed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2 #
2859
345bac2bc4ec update copyrights.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2856
diff changeset
3 # Copyright 2005, 2006 Chris Mason <mason@suse.com>
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10186
diff changeset
6 # GNU General Public License version 2 or any later version.
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
ce26928cbe41 spelling: behaviour -> behavior
timeless@mozdev.org
parents: 25827
diff changeset
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
2605fc990725 mq: add secret setting
Matt Mackall <mpm@selenic.com>
parents: 15972
diff changeset
42 :hg:`help phases`), which can be enabled with the following setting::
2605fc990725 mq: add secret setting
Matt Mackall <mpm@selenic.com>
parents: 15972
diff changeset
43
2605fc990725 mq: add secret setting
Matt Mackall <mpm@selenic.com>
parents: 15972
diff changeset
44 [mq]
2605fc990725 mq: add secret setting
Matt Mackall <mpm@selenic.com>
parents: 15972
diff changeset
45 secret = True
2605fc990725 mq: add secret setting
Matt Mackall <mpm@selenic.com>
parents: 15972
diff changeset
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
6b4127c7d52a Simplify i18n imports
Matt Mackall <mpm@selenic.com>
parents: 3877
diff changeset
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
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
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
03d99d08147b mq: get rid of ui.backupconfig
Jun Wu <quark@fb.com>
parents: 31432
diff changeset
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
03d99d08147b mq: get rid of ui.backupconfig
Jun Wu <quark@fb.com>
parents: 31432
diff changeset
410 overrides[('phases', 'new-commit')] = phase
03d99d08147b mq: get rid of ui.backupconfig
Jun Wu <quark@fb.com>
parents: 31432
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
914b013d3263 mq: minor cleanup
Mads Kiilerich <mads@kiilerich.com>
parents: 15801
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
537 def join(self, *p):
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
538 return os.path.join(self.path, *p)
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
547 return None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
730
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
731 if err == 0:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
732 return (err, n)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
733
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
738
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
758 if comments:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
774 if rev is None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
788 # each of the patches merged in will have two parents. This
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
789 # can confuse the qrefresh, qdiff, and strip code because it
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
790 # needs to know which parent is actually in the patch queue.
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
791 # so, we insert a merge marker with only one parent. This way
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
792 # the first patch in the queue is never a merge patch
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
793 #
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
794 pname = ".hg.patches.merge.marker"
16102
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
799
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
800 head = self.qparents(repo)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
801
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
802 for patch in series:
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
803 patch = mergeq.lookup(patch, strict=True)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
811 info = mergeq.isapplied(patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
820 if err:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
823 return (0, head)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
878 # TODO unify with commands.py
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
879 if not patchdir:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
880 patchdir = self.path
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
881 err = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
890
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
895 err = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
896 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
902 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
906 message = '\n'.join(message)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
953 n = newcommit(repo, None, message, ph.user, ph.date, match=match,
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
959
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
962
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
967 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
968
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
972 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
973 return (err, n)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
bbf544b5f2e9 mq: consistently use qrefresh
timeless@mozdev.org
parents: 26736
diff changeset
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
bbf544b5f2e9 mq: consistently use qrefresh
timeless@mozdev.org
parents: 26736
diff changeset
1109 _("local changes found, qrefresh first")
bbf544b5f2e9 mq: consistently use qrefresh
timeless@mozdev.org
parents: 26736
diff changeset
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
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1273
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1274 def isapplied(self, patch):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1279 return None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1282 # variations. If strict is passed, we try only #1
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1285 # 2) a unique substring of the patch name was given
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1286 # 3) patchname[-+]num to indicate an offset in the series file
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1289 if s in self.series:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1302 if s == 'qbase':
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1303 return self.series[0]
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1308
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
1309 if not os.path.isfile(self.join(patch)):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1310 try:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1313 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1320 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1325 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1326 i = self.series.index(res)
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1330 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1331 else:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1332 if i - off >= 0:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1337 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1338 i = self.series.index(res)
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1342 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1343 else:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1344 if i + off < len(self.series):
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
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
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
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
bbf544b5f2e9 mq: consistently use qrefresh
timeless@mozdev.org
parents: 26736
diff changeset
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
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
bbf544b5f2e9 mq: consistently use qrefresh
timeless@mozdev.org
parents: 26736
diff changeset
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
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
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
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1600 self.ui.write(_("patch queue now empty\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1604 if not top:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1605 self.ui.write(_("no patches applied\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1606 return
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
bbf544b5f2e9 mq: consistently use qrefresh
timeless@mozdev.org
parents: 26736
diff changeset
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
bbf544b5f2e9 mq: consistently use qrefresh
timeless@mozdev.org
parents: 26736
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
f05e0d54f424 Merge with crew-stable
Patrick Mezard <pmezard@gmail.com>
parents: 10362 10366
diff changeset
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
f05e0d54f424 Merge with crew-stable
Patrick Mezard <pmezard@gmail.com>
parents: 10362 10366
diff changeset
1744 copies.setdefault(src[0], []).extend(
f05e0d54f424 Merge with crew-stable
Patrick Mezard <pmezard@gmail.com>
parents: 10362 10366
diff changeset
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
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
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
05d8db5d2116 mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents: 26943
diff changeset
1837 for bm in bmlist:
05d8db5d2116 mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents: 26943
diff changeset
1838 marks[bm] = n
27001
c07a2fd31970 mq: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents: 27000
diff changeset
1839 marks.recordchange(tr)
c07a2fd31970 mq: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents: 27000
diff changeset
1840 tr.close()
27000
05d8db5d2116 mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents: 26943
diff changeset
1841
05d8db5d2116 mq: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents: 26943
diff changeset
1842 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
1843 finally:
30070
3006d0d26ad3 mq: release lock after transaction in qrefresh
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29968
diff changeset
1844 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
1845 except: # re-raises
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1846 ctx = repo[cparents[0]]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1847 repo.dirstate.rebuild(ctx.node(), ctx.manifest())
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
1848 self.savedirty()
26780
bbf544b5f2e9 mq: consistently use qrefresh
timeless@mozdev.org
parents: 26736
diff changeset
1849 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
1850 '(revert --all, qpush to recover)\n'))
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1851 raise
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1852 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
1853 wlock.release()
7401
41e87b4d0c9d mq: recover more gracefully from interrupted qrefresh (issue1216)
Brendan Cully <brendan@kublai.com>
parents: 7400
diff changeset
1854 self.removeundo(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1855
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1856 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
1857 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
1858 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
1859 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
1860 os.mkdir(self.path)
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25469
diff changeset
1861 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
1862 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
1863 raise
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1864 if create:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1865 return self.qrepo(create=True)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1866
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1867 def unapplied(self, repo, patch=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1868 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
1869 raise error.Abort(_("patch %s is not in series file") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1870 if not patch:
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
1871 start = self.seriesend()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1872 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1873 start = self.series.index(patch) + 1
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1874 unapplied = []
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1875 for i in xrange(start, len(self.series)):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1876 pushable, reason = self.pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1877 if pushable:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1878 unapplied.append((i, self.series[i]))
14579
f7b25764d974 mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents: 14578
diff changeset
1879 self.explainpushable(i)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1880 return unapplied
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1881
4239
417c2068cb92 Simplified qseries and hg qapplied to fix some bugs caused by optimization:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4238
diff changeset
1882 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
1883 summary=False):
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1884 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
1885 if pfx:
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1886 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
1887 if summary:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1888 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
1889 if ph.message:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
1890 msg = ph.message[0]
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
1891 else:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
1892 msg = ''
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
1893
11327
6c469f2f9f12 mq: use ui.formatted() instead of ui.plain().
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11321
diff changeset
1894 if self.ui.formatted():
12689
c52c629ce19e termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents: 12682
diff changeset
1895 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
1896 if width > 0:
c51494c53841 qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9867
diff changeset
1897 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
1898 else:
c51494c53841 qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9867
diff changeset
1899 msg = ''
10932
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1900 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
1901 self.ui.write(': ')
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1902 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
1903 else:
10932
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1904 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
1905 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
1906
8152
08e1baf924ca replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents: 8151
diff changeset
1907 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
1908 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
1909 length = len(self.series) - start
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1910 if not missing:
9016
894c5b4be275 mq: align columns in verbose qseries output.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8948
diff changeset
1911 if self.ui.verbose:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1912 idxwidth = len(str(start + length - 1))
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1913 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
1914 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
1915 if patch in applied:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1916 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
1917 elif self.pushable(i)[0]:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1918 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
1919 else:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1920 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
1921 pfx = ''
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1922 if self.ui.verbose:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1923 pfx = '%*d %s ' % (idxwidth, i, char)
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1924 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
1925 continue
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1926 displayname(pfx, patch, state)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1927 else:
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
1928 msng_list = []
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1929 for root, dirs, files in os.walk(self.path):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1930 d = root[len(self.path) + 1:]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1931 for f in files:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1932 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
1933 if (fl not in self.series and
14588
bd3d75a03f80 mq: rename status_path to statuspath
Adrian Buehlmann <adrian@cadifra.com>
parents: 14587
diff changeset
1934 fl not in (self.statuspath, self.seriespath,
14589
7d59ee9e711b mq: rename guards_path to guardspath
Adrian Buehlmann <adrian@cadifra.com>
parents: 14588
diff changeset
1935 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
1936 and not fl.startswith('.')):
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
1937 msng_list.append(fl)
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8188
diff changeset
1938 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
1939 pfx = self.ui.verbose and ('D ') or ''
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1940 displayname(pfx, x, 'missing')
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1941
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1942 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
1943 if l.name == '.hg.patches.save.line':
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1944 return True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1945
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1946 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
1947 ui = self.baseui.copy()
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
1948 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
1949 return hg.repository(ui, path=self.path, create=create)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1950
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1951 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
1952 desc = repo[rev].description().strip()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1953 lines = desc.splitlines()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1954 i = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1955 datastart = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1956 series = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1957 applied = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1958 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
1959 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
1960 if line == 'Patch Data:':
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1961 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
1962 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
1963 l = line.rstrip()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1964 l = l[10:].split(' ')
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1965 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
1966 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
1967 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
1968 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
1969 if n:
cfbf064f0069 mq: qsave creates entries with the left part empty (':patchname')
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10682
diff changeset
1970 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
1971 else:
10682
8ed350051896 mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10681
diff changeset
1972 series.append(l)
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
1973 if datastart is None:
16929
4b02d7006169 mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents: 16867
diff changeset
1974 self.ui.warn(_("no saved patch data found\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1975 return 1
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1976 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
1977 self.fullseries = series
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1978 self.applied = applied
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
1979 self.parseseries()
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1980 self.seriesdirty = True
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1981 self.applieddirty = True
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1982 heads = repo.changelog.heads()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1983 if delete:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1984 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
1985 self.ui.warn(_("save entry has children, leaving it alone\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1986 else:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1987 self.ui.warn(_("removing save entry %s\n") % short(rev))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1988 pp = repo.dirstate.parents()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1989 if rev in pp:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1990 update = True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1991 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1992 update = False
22057
445472225ccd strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22049
diff changeset
1993 strip(self.ui, repo, [rev], update=update, backup=False)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1994 if qpp:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1995 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
1996 (short(qpp[0]), short(qpp[1])))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1997 if qupdate:
12848
f7f1a146f407 qrestore: trying to improve the English
timeless <timeless@gmail.com>
parents: 12775
diff changeset
1998 self.ui.status(_("updating queue directory\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1999 r = self.qrepo()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2000 if not r:
16929
4b02d7006169 mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents: 16867
diff changeset
2001 self.ui.warn(_("unable to load queue repository\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2002 return 1
2808
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2804
diff changeset
2003 hg.clean(r, qpp[0])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2004
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2005 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
2006 if not self.applied:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2007 self.ui.warn(_("save: no patches applied, exiting\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2008 return 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2009 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
2010 self.ui.warn(_("status is already saved\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2011 return 1
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2012
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2013 if not msg:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2014 msg = _("hg patches saved state")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2015 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2016 msg = "hg patches: " + msg.rstrip('\r\n')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2017 r = self.qrepo()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2018 if r:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2019 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
2020 msg += "\nDirstate: %s %s" % (hex(pp[0]), hex(pp[1]))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2021 msg += "\n\nPatch Data:\n"
10679
35abaea778dc mq: simplify commit message generation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10678
diff changeset
2022 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
2023 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
2024 n = repo.commit(msg, force=True)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2025 if not n:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2026 self.ui.warn(_("repo commit failed\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2027 return 1
10684
485c1d7f8a77 mq: fix coding style (missing space)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10683
diff changeset
2028 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
2029 self.applieddirty = True
4209
dbc3846c09a1 Merge with -stable, fix small test failure
Matt Mackall <mpm@selenic.com>
parents: 4207
diff changeset
2030 self.removeundo(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2031
14585
74bf9c84cfd0 mq: rename full_series_end to fullseriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14584
diff changeset
2032 def fullseriesend(self):
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
2033 if self.applied:
2780
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
2034 p = self.applied[-1].name
14574
12fba7bcb4f1 mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14573
diff changeset
2035 end = self.findseries(p)
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
2036 if end is None:
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
2037 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
2038 return end + 1
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
2039 return 0
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
2040
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
2041 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
2042 """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
2043 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
2044 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
2045 """
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2046 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
2047 def nextpatch(start):
10687
583adcf63f80 mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10686
diff changeset
2048 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
2049 return start
10687
583adcf63f80 mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10686
diff changeset
2050 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
2051 p, reason = self.pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2052 if p:
16063
c36db39b3fee mq: fix qnext when all remaining patches are guarded
Patrick Mezard <pmezard@gmail.com>
parents: 16048
diff changeset
2053 return i
14579
f7b25764d974 mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents: 14578
diff changeset
2054 self.explainpushable(i)
16063
c36db39b3fee mq: fix qnext when all remaining patches are guarded
Patrick Mezard <pmezard@gmail.com>
parents: 16048
diff changeset
2055 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
2056 if self.applied:
2780
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
2057 p = self.applied[-1].name
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2058 try:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2059 end = self.series.index(p)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2060 except ValueError:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2061 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
2062 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
2063 return nextpatch(end)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2064
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2065 def appliedname(self, index):
2780
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
2066 pname = self.applied[index].name
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2067 if not self.ui.verbose:
2677
ec05ce9cbf47 mq: uniform verbose display of patche[s].
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2664
diff changeset
2068 p = pname
ec05ce9cbf47 mq: uniform verbose display of patche[s].
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2664
diff changeset
2069 else:
2941
d32df6452323 mq: fix appliedname
Brendan Cully <brendan@kublai.com>
parents: 2940
diff changeset
2070 p = str(self.series.index(pname)) + " " + pname
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2071 return p
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2072
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2073 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
2074 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
2075 def checkseries(patchname):
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2076 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
2077 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
2078 % patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2079
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2080 if rev:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2081 if files:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26578
diff changeset
2082 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
2083 'files'))
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14298
diff changeset
2084 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
2085 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
2086 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
2087 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
2088 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
2089 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
2090 'patches'))
16119
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
2091 imported = []
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2092 if rev:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2093 # 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
2094 # 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
2095 # 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
2096 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
2097 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
2098 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
2099 'branch') % rev.last())
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2100 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
2101 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
2102 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
2103 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
2104 % 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
2105 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
2106 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
2107 '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
2108 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
2109 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
2110 else:
22821
5d4c17d11d7e qimport: use `first` and `last` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22819
diff changeset
2111 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
2112 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
2113 % rev.first())
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2114 lastparent = None
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2115
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
2116 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
2117 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
2118 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
2119 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
2120 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
2121 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
2122 'for details'))
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2123 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
2124 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
2125 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
2126 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
2127 % r)
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2128 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
2129 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
2130 '%d')
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2131 % (r, lastparent))
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2132 lastparent = p1
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2133
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2134 if not patchname:
27918
c7cd551f07d0 mq: refactor makepatchname into class method
Mads Kiilerich <madski@unity3d.com>
parents: 27865
diff changeset
2135 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
2136 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
2137 '%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
2138 checkseries(patchname)
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2139 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
2140 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
2141
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2142 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
2143 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
2144 patchf.close()
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2145
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2146 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
2147 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
2148
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2149 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
2150 imported.append(patchname)
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2151 patchname = None
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2152 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
2153 # 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
2154 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
2155 self.parseseries()
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2156 self.applieddirty = True
86c5318b8e5b mq: wrap qimport phase movement in a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22048
diff changeset
2157 self.seriesdirty = True
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2158
10687
583adcf63f80 mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10686
diff changeset
2159 for i, filename in enumerate(files):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2160 if existing:
3547
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
2161 if filename == '-':
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26578
diff changeset
2162 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
2163 )
11699
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
2164 filename = normname(filename)
14584
3343a74eea4e mq: rename check_reserved_name to checkreservedname
Adrian Buehlmann <adrian@cadifra.com>
parents: 14583
diff changeset
2165 self.checkreservedname(filename)
20402
a8c0f7b80e00 mq: fix qimport url check
Matt Mackall <mpm@selenic.com>
parents: 20394
diff changeset
2166 if util.url(filename).islocal():
20394
a817964e7fdf qimport: allow importing URLs
Matt Mackall <mpm@selenic.com>
parents: 20119
diff changeset
2167 originpath = self.join(filename)
a817964e7fdf qimport: allow importing URLs
Matt Mackall <mpm@selenic.com>
parents: 20119
diff changeset
2168 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
2169 raise error.Abort(
20402
a8c0f7b80e00 mq: fix qimport url check
Matt Mackall <mpm@selenic.com>
parents: 20394
diff changeset
2170 _("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
2171
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
2172 if patchname:
14423
7230aef66b7c mq: use checkpatchname
Idan Kamara <idankk86@gmail.com>
parents: 14422
diff changeset
2173 self.checkpatchname(patchname, force)
11699
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
2174
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
2175 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
2176 % (filename, patchname))
11701
84fb29f5e0d2 mq: fix qimport --name --existing --force on win32
Patrick Mezard <pmezard@gmail.com>
parents: 11700
diff changeset
2177 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
2178 else:
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
2179 patchname = filename
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
2180
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2181 else:
14395
dc961471efde mq: check patch name is valid before reading imported file
Idan Kamara <idankk86@gmail.com>
parents: 14382
diff changeset
2182 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
2183 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
2184 elif not patchname:
14396
170747a3e139 mq: strip all leading slashes from url when importing
Idan Kamara <idankk86@gmail.com>
parents: 14395
diff changeset
2185 patchname = normname(os.path.basename(filename.rstrip('/')))
14423
7230aef66b7c mq: use checkpatchname
Idan Kamara <idankk86@gmail.com>
parents: 14422
diff changeset
2186 self.checkpatchname(patchname, force)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2187 try:
3547
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
2188 if filename == '-':
14636
b98063487a6f mq: use ui.fin when importing patch from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14635
diff changeset
2189 text = self.ui.fin.read()
3547
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
2190 else:
17887
0e2846b2482c url: use open and not url.open for local files (issue3624)
Siddharth Agarwal <sid0@fb.com>
parents: 17773
diff changeset
2191 fp = hg.openpath(self.ui, filename)
13400
14f3795a5ed7 explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 13373
diff changeset
2192 text = fp.read()
14f3795a5ed7 explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 13373
diff changeset
2193 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
2194 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
2195 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
2196 patchf = self.opener(patchname, "w")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2197 patchf.write(text)
13400
14f3795a5ed7 explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 13373
diff changeset
2198 patchf.close()
7160
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
2199 if not force:
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
2200 checkseries(patchname)
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
2201 if patchname not in self.series:
14585
74bf9c84cfd0 mq: rename full_series_end to fullseriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14584
diff changeset
2202 index = self.fullseriesend() + i
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
2203 self.fullseries[index:index] = [patchname]
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
2204 self.parseseries()
14593
599a72895c0d mq: rename series_dirty to seriesdirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14592
diff changeset
2205 self.seriesdirty = True
7597
81f68565281c mq, i18n: mark strings for translation
Martin Geisler <mg@daimi.au.dk>
parents: 7454
diff changeset
2206 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
2207 self.added.append(patchname)
16119
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
2208 imported.append(patchname)
3133
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3091
diff changeset
2209 patchname = None
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2210
13409
9e5df8719ad4 mq: remove undo after a qimport
André Sintzoff <andre.sintzoff@gmail.com>
parents: 13400
diff changeset
2211 self.removeundo(repo)
16119
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
2212 return imported
13409
9e5df8719ad4 mq: remove undo after a qimport
André Sintzoff <andre.sintzoff@gmail.com>
parents: 13400
diff changeset
2213
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2214 def fixkeepchangesopts(ui, opts):
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2215 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
2216 or opts.get('exact')):
4ae3ba9e4d7a mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents: 16655
diff changeset
2217 return opts
4ae3ba9e4d7a mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents: 16655
diff changeset
2218 opts = dict(opts)
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2219 opts['keep_changes'] = True
16656
4ae3ba9e4d7a mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents: 16655
diff changeset
2220 return opts
4ae3ba9e4d7a mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents: 16655
diff changeset
2221
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2222 @command("qdelete|qremove|qrm",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2223 [('k', 'keep', None, _('keep patch file')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2224 ('r', 'rev', [],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2225 _('stop managing a revision (DEPRECATED)'), _('REV'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2226 _('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
2227 def delete(ui, repo, *patches, **opts):
2905
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
2228 """remove patches from queue
2752
5dfeda163bb7 Add -f option to qdelete, to remove patch file.
Brendan Cully <brendan@kublai.com>
parents: 2751
diff changeset
2229
15798
e6c44dbe902f mq: Document that qdel requires exact patch identifiers
Olav Reinert <seroton10@gmail.com>
parents: 15322
diff changeset
2230 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
2231 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
2232 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
2233
8be38b624902 mq: no longer mention the deprecated qdelete's --revision option
Cédric Duval <cedricduval@free.fr>
parents: 8894
diff changeset
2234 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
2235 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
2236 q = repo.mq
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
2237 q.delete(repo, patches, opts)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2238 q.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2239 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2240
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2241 @command("qapplied",
16188
6b52963ced73 mq: fix qapplied --last and qprev documentation (issue3282)
Patrick Mezard <patrick@mezard.eu>
parents: 16119
diff changeset
2242 [('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
2243 ] + seriesopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2244 _('hg qapplied [-1] [-s] [PATCH]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2245 def applied(ui, repo, patch=None, **opts):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2246 """print the patches already applied
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2247
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2248 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
2249
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2250 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
2251
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2252 if patch:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2253 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
2254 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
2255 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
2256 else:
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
2257 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
2258
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2259 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
2260 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
2261 return 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2262 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
2263 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
2264 return 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2265 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
2266 start = end - 2
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2267 end = 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2268 else:
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2269 start = 0
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2270
12539
dece1f46f7a2 mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents: 12538
diff changeset
2271 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
2272 summary=opts.get('summary'))
dece1f46f7a2 mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents: 12538
diff changeset
2273
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2274
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2275 @command("qunapplied",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2276 [('1', 'first', None, _('show only the first patch'))] + seriesopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2277 _('hg qunapplied [-1] [-s] [PATCH]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2278 def unapplied(ui, repo, patch=None, **opts):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2279 """print the patches not yet applied
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2280
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2281 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
2282
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2283 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2284 if patch:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2285 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
2286 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
2287 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
2288 else:
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
2289 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
2290
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2291 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
2292 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
2293 return 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2294
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
2295 if opts.get('first'):
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
2296 length = 1
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
2297 else:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
2298 length = None
12539
dece1f46f7a2 mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents: 12538
diff changeset
2299 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
2300 summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2301
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2302 @command("qimport",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2303 [('e', 'existing', None, _('import file in patch directory')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2304 ('n', 'name', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2305 _('name of patch file'), _('NAME')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2306 ('f', 'force', None, _('overwrite existing files')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2307 ('r', 'rev', [],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2308 _('place existing revisions under mq control'), _('REV')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2309 ('g', 'git', None, _('use git extended diff format')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2310 ('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
2311 _('hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... [FILE]...'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2312 def qimport(ui, repo, *filename, **opts):
16152
816211dfa3a5 mq: expand qimport summary
Matt Mackall <mpm@selenic.com>
parents: 16128
diff changeset
2313 """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
2314
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2315 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
2316 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
2317 to the series.
d6caebe9c293 mq: qimport: explain insertion point in doc string
Adrian Buehlmann <adrian@cadifra.com>
parents: 6627
diff changeset
2318
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2319 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
2320 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
2321
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2322 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
2323 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
2324
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2325 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
2326 overwritten.
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2327
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2328 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
2329 (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
2330 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
2331 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
2332 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
2333 and permission changes. Use :hg:`qfinish` to remove changesets
42fc6c7c4ad5 mq: remove reference to tip
Matt Mackall <mpm@selenic.com>
parents: 19395
diff changeset
2334 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
2335
1f0a5a5fff43 Update qimport help explaining how to read a patch from stdin (Issue371)
David Frey <dpfrey@shaw.ca>
parents: 8028
diff changeset
2336 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
2337 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
2338 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
2339
11706
5fdf08b6b50c mq: correct qimport documentation
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11701
diff changeset
2340 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
2341
52c863295754 mq: document possible combination of -e and -n for qimport
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11699
diff changeset
2342 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
2343
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2344 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
2345 """
27832
1e38b9d731c4 with: use context manager for lock in qimport
Bryan O'Sullivan <bryano@fb.com>
parents: 27831
diff changeset
2346 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
2347 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
2348 try:
16119
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
2349 imported = q.qimport(
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
2350 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
2351 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
2352 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
2353 finally:
29ea059be33c qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16026
diff changeset
2354 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
2355
0128cdb846d9 mq: qimport need wlock for --push - do that after releasing lock
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16635
diff changeset
2356 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
2357 return q.push(repo, imported[-1])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2358 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2359
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2360 def qinit(ui, repo, create):
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2361 """initialize a new queue repository
2754
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
2362
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2363 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
2364 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
2365 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
2366
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2367 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
2368 q = repo.mq
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2369 r = q.init(repo, create)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2370 q.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2371 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
2372 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
2373 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
2374 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
2375 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
2376 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
2377 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
2378 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
2379 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
2380 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
2381 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
2382 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
2383 commands.add(ui, r)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2384 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2385
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2386 @command("^qinit",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2387 [('c', 'create-repo', None, _('create queue repository'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2388 _('hg qinit [-c]'))
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2389 def init(ui, repo, **opts):
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2390 """init a new queue repository (DEPRECATED)
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2391
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2392 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
2393 -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
2394 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
2395 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
2396 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
2397
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2398 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
2399 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
2400 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
2401
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2402 @command("qclone",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2403 [('', 'pull', None, _('use pull protocol to copy metadata')),
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2404 ('U', 'noupdate', None,
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2405 _('do not update the new working directories')),
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2406 ('', 'uncompressed', None,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2407 _('use uncompressed transfer (fast over LAN)')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2408 ('p', 'patches', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2409 _('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
2410 ] + cmdutil.remoteopts,
21771
0f3353776038 mq: define norepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21714
diff changeset
2411 _('hg qclone [OPTION]... SOURCE [DEST]'),
0f3353776038 mq: define norepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21714
diff changeset
2412 norepo=True)
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2413 def clone(ui, source, dest=None, **opts):
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2414 '''clone main and patch repository at same time
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2415
7983
7b813bdbd5d0 Change double spaces to single spaces in help texts.
Martin Geisler <mg@daimi.au.dk>
parents: 7874
diff changeset
2416 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
2417 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
2418 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
2419 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
2420 before that it has no patches applied.
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2421
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2422 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
2423 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
2424
8760
bf17aeafb869 Spell Mercurial as a proper noun
timeless <timeless@gmail.com>
parents: 8711
diff changeset
2425 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
2426 would be created by :hg:`init --mq`.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2427
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2428 Return 0 on success.
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2429 '''
5226
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
2430 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
2431 """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
2432 url = repo.url()
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
2433 if url.endswith('/'):
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
2434 url = url[:-1]
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
2435 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
2436
92e455f2866c qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15920
diff changeset
2437 # main repo (destination and sources)
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2438 if dest is None:
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2439 dest = hg.defaultdest(source)
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2440 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
2441
92e455f2866c qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15920
diff changeset
2442 # patches repo (source only)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2443 if opts.get('patches'):
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2444 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
2445 else:
dd08e1e0cea1 mq: allow qclone's -p option to use path alias
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7639
diff changeset
2446 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
2447 try:
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2448 hg.peer(ui, opts, patchespath)
7637
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7627
diff changeset
2449 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
2450 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
2451 ' (see init --mq)'))
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2452 qbase, destrev = None, None
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2453 if sr.local():
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2454 repo = sr.local()
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2455 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
2456 qbase = repo.mq.applied[0].node
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2457 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
2458 heads = set(repo.heads())
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2459 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
2460 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
2461 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
2462 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
2463 qbase = sr.lookup('qbase')
7637
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7627
diff changeset
2464 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
2465 pass
15921
92e455f2866c qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15920
diff changeset
2466
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
2467 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
2468 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
2469 pull=opts.get('pull'),
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2470 rev=destrev,
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2471 update=False,
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2472 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
2473
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
2474 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
2475 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
2476 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
2477 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
2478
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2479 if dr.local():
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2480 repo = dr.local()
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2481 if qbase:
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
2482 ui.note(_('stripping applied patches from destination '
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
2483 'repository\n'))
19819
f0fc4d5797e1 mq: extract `mq.queue.strip`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 19818
diff changeset
2484 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
2485 if not opts.get('noupdate'):
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
2486 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
2487 hg.update(repo, repo.changelog.tip())
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2488
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2489 @command("qcommit|qci",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2490 commands.table["^commit|ci"][1],
21786
c85a0c3537b2 mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21771
diff changeset
2491 _('hg qcommit [OPTION]... [FILE]...'),
c85a0c3537b2 mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21771
diff changeset
2492 inferrepo=True)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2493 def commit(ui, repo, *pats, **opts):
10361
49cd2e7fd91c mq: deprecate qinit and qcommit
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10360
diff changeset
2494 """commit changes in the queue repository (DEPRECATED)
49cd2e7fd91c mq: deprecate qinit and qcommit
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10360
diff changeset
2495
11193
687c7d395f20 Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents: 11121
diff changeset
2496 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
2497 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2498 r = q.qrepo()
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2499 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
2500 raise error.Abort('no queue repository')
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2501 commands.commit(r.ui, r, *pats, **opts)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2502
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2503 @command("qseries",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2504 [('m', 'missing', None, _('print patches not in series')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2505 ] + seriesopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2506 _('hg qseries [-ms]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2507 def series(ui, repo, **opts):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2508 """print the entire series file
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2509
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2510 Returns 0 on success."""
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2511 repo.mq.qseries(repo, missing=opts.get('missing'),
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2512 summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2513 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2514
14468
755aabb3eada mq: no need to make a copy of seriesopts
Idan Kamara <idankk86@gmail.com>
parents: 14464
diff changeset
2515 @command("qtop", seriesopts, _('hg qtop [-s]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2516 def top(ui, repo, **opts):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2517 """print the name of the current patch
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2518
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2519 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
2520 q = repo.mq
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
2521 if q.applied:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
2522 t = q.seriesend(True)
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
2523 else:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
2524 t = 0
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 23879
diff changeset
2525
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2526 if t:
12539
dece1f46f7a2 mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents: 12538
diff changeset
2527 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
2528 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
2529 else:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2530 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
2531 return 1
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2532
14468
755aabb3eada mq: no need to make a copy of seriesopts
Idan Kamara <idankk86@gmail.com>
parents: 14464
diff changeset
2533 @command("qnext", seriesopts, _('hg qnext [-s]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2534 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
2535 """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
2536
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2537 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
2538 q = repo.mq
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
2539 end = q.seriesend()
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2540 if end == len(q.series):
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2541 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
2542 return 1
12539
dece1f46f7a2 mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents: 12538
diff changeset
2543 q.qseries(repo, start=end, length=1, summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2544
14468
755aabb3eada mq: no need to make a copy of seriesopts
Idan Kamara <idankk86@gmail.com>
parents: 14464
diff changeset
2545 @command("qprev", seriesopts, _('hg qprev [-s]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2546 def prev(ui, repo, **opts):
16188
6b52963ced73 mq: fix qapplied --last and qprev documentation (issue3282)
Patrick Mezard <patrick@mezard.eu>
parents: 16119
diff changeset
2547 """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
2548
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2549 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
2550 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2551 l = len(q.applied)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2552 if l == 1:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2553 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
2554 return 1
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2555 if not l:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2556 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
2557 return 1
16064
7e5a281a082c mq: make qprev return the previous applied patch (issue3245)
Patrick Mezard <pmezard@gmail.com>
parents: 16063
diff changeset
2558 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
2559 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
2560 summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2561
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
2562 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
2563 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
2564 opts['user'] = ui.username()
f16ec85f125c mq: do not call ui.username unless it is necessary
Martin Geisler <mg@lazybytes.net>
parents: 9725
diff changeset
2565 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
2566 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
2567
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2568 @command("^qnew",
21952
3838b910fa6b doc: unify help text for "--edit" option
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21786
diff changeset
2569 [('e', 'edit', None, _('invoke editor on commit messages')),
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2570 ('f', 'force', None, _('import uncommitted changes (DEPRECATED)')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2571 ('g', 'git', None, _('use git extended diff format')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2572 ('U', 'currentuser', None, _('add "From: <current user>" to patch')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2573 ('u', 'user', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2574 _('add "From: <USER>" to patch'), _('USER')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2575 ('D', 'currentdate', None, _('add "Date: <current date>" to patch')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2576 ('d', 'date', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2577 _('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
2578 ] + cmdutil.walkopts + cmdutil.commitopts,
21786
c85a0c3537b2 mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21771
diff changeset
2579 _('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
2580 inferrepo=True)
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
2581 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
2582 """create a new patch
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
2583
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2584 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
2585 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
2586 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
2587 -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
2588 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
2589 as uncommitted modifications.
2754
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
2590
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2591 -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
2592 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
2593 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
2594
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2595 -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
2596 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
2597 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
2598
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2599 Use the -g/--git option to keep the patch in the git extended diff
7387
7e9a15fa6c8f update help on git diffs
Matt Mackall <mpm@selenic.com>
parents: 7308
diff changeset
2600 format. Read the diffs help topic for more information on why this
7e9a15fa6c8f update help on git diffs
Matt Mackall <mpm@selenic.com>
parents: 7308
diff changeset
2601 is important for preserving permission changes and copy/rename
7e9a15fa6c8f update help on git diffs
Matt Mackall <mpm@selenic.com>
parents: 7308
diff changeset
2602 information.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2603
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2604 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
2605 """
14635
217b7d83afc3 cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14620
diff changeset
2606 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
2607 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
2608 opts['msg'] = msg
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
2609 setupheaderopts(ui, opts)
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
2610 q.new(repo, patch, *args, **opts)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2611 q.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2612 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2613
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2614 @command("^qrefresh",
21952
3838b910fa6b doc: unify help text for "--edit" option
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21786
diff changeset
2615 [('e', 'edit', None, _('invoke editor on commit messages')),
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2616 ('g', 'git', None, _('use git extended diff format')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2617 ('s', 'short', None,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2618 _('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
2619 ('U', 'currentuser', None,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2620 _('add/update author field in patch with current user')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2621 ('u', 'user', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2622 _('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
2623 ('D', 'currentdate', None,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2624 _('add/update date field in patch with current date')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2625 ('d', 'date', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2626 _('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
2627 ] + cmdutil.walkopts + cmdutil.commitopts,
21786
c85a0c3537b2 mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21771
diff changeset
2628 _('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
2629 inferrepo=True)
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
2630 def refresh(ui, repo, *pats, **opts):
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2631 """update the current patch
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2632
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2633 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
2634 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
2635 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
2636
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2637 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
2638 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
2639
11947
59ec12093261 mq: save qrefresh message for easy recovery in case it fails (issue2062)
Renato Cunha <renatoc@gmail.com>
parents: 11939
diff changeset
2640 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
2641 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
2642 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
2643
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2644 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
2645 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
2646 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
2647 git diff format.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2648
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2649 Returns 0 on success.
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2650 """
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2651 q = repo.mq
14635
217b7d83afc3 cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14620
diff changeset
2652 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
2653 setupheaderopts(ui, opts)
27830
1c5941542f24 with: use context manager for wlock in qrefresh
Bryan O'Sullivan <bryano@fb.com>
parents: 27829
diff changeset
2654 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
2655 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
2656 q.savedirty()
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2657 return ret
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2658
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2659 @command("^qdiff",
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32347
diff changeset
2660 cmdutil.diffopts + cmdutil.diffopts2 + cmdutil.walkopts,
21786
c85a0c3537b2 mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21771
diff changeset
2661 _('hg qdiff [OPTION]... [FILE]...'),
c85a0c3537b2 mq: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21771
diff changeset
2662 inferrepo=True)
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
2663 def diff(ui, repo, *pats, **opts):
6606
088ba40585b9 mq: expand help text for qdiff
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6561
diff changeset
2664 """diff of the current patch and subsequent modifications
6621
d5cbbe2c49ce mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6611
diff changeset
2665
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2666 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
2667 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
2668 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
2669 after a qrefresh).
6621
d5cbbe2c49ce mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6611
diff changeset
2670
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10962
diff changeset
2671 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
2672 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
2673 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
2674 qrefresh.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2675
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2676 Returns 0 on success.
6606
088ba40585b9 mq: expand help text for qdiff
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6561
diff changeset
2677 """
31033
861b070d92da qdiff: migrate to modern pager API
Augie Fackler <augie@google.com>
parents: 31024
diff changeset
2678 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
2679 repo.mq.diff(repo, pats, opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2680 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2681
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2682 @command('qfold',
21952
3838b910fa6b doc: unify help text for "--edit" option
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21786
diff changeset
2683 [('e', 'edit', None, _('invoke editor on commit messages')),
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2684 ('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
2685 ] + cmdutil.commitopts,
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2686 _('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
2687 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
2688 """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
2689
2771
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
2690 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
2691 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
2692 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
2693 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
2694 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
2695 removed afterwards.
2771
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
2696
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2697 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
2698 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
2699
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2700 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
2701 q = repo.mq
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2702 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
2703 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
2704 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
2705 raise error.Abort(_('no patches applied'))
14583
28f87e14d923 mq: rename check_localchanges to checklocalchanges
Adrian Buehlmann <adrian@cadifra.com>
parents: 14582
diff changeset
2706 q.checklocalchanges(repo)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2707
14635
217b7d83afc3 cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14620
diff changeset
2708 message = cmdutil.logmessage(ui, opts)
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2709
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2710 parent = q.lookup('qtip')
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2711 patches = []
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2712 messages = []
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2713 for f in files:
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2714 p = q.lookup(f)
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2715 if p in patches or p == parent:
16929
4b02d7006169 mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents: 16867
diff changeset
2716 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
2717 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
2718 raise error.Abort(_('qfold cannot fold already applied patch %s')
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2719 % p)
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2720 patches.append(p)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2721
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2722 for p in patches:
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2723 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
2724 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
2725 if ph.message:
1d5ecaa47abb mq: filter out empty commit messages in qfold
Brendan Cully <brendan@kublai.com>
parents: 7453
diff changeset
2726 messages.append(ph.message)
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2727 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
2728 (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
2729 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
2730 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
2731
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2732 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
2733 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
2734 message = ph.message
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2735 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
2736 if msg:
2455e96ec73b mq: don't add '* * *' separators when there is no commit message
Mads Kiilerich <madski@unity3d.com>
parents: 19997
diff changeset
2737 if message:
2455e96ec73b mq: don't add '* * *' separators when there is no commit message
Mads Kiilerich <madski@unity3d.com>
parents: 19997
diff changeset
2738 message.append('* * *')
2455e96ec73b mq: don't add '* * *' separators when there is no commit message
Mads Kiilerich <madski@unity3d.com>
parents: 19997
diff changeset
2739 message.extend(msg)
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2740 message = '\n'.join(message)
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2741
10186
296a0b14a686 mq: preserve --git flag when folding patches
Patrick Mezard <pmezard@gmail.com>
parents: 10185
diff changeset
2742 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
2743 with repo.wlock():
22003
cbbd957358ff mq: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21965
diff changeset
2744 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
2745 editform='mq.qfold')
14620
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2746 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
2747 q.savedirty()
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2748
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2749 @command("qgoto",
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2750 [('', 'keep-changes', None,
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2751 _('tolerate non-conflicting local changes')),
16655
6ca125af882f mq: introduce qgoto --check
Patrick Mezard <patrick@mezard.eu>
parents: 16654
diff changeset
2752 ('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
2753 ('', '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
2754 _('hg qgoto [OPTION]... PATCH'))
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2755 def goto(ui, repo, patch, **opts):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2756 '''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
2757
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2758 Returns 0 on success.'''
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2759 opts = fixkeepchangesopts(ui, opts)
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2760 q = repo.mq
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2761 patch = q.lookup(patch)
16635
9d76320d8b99 mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents: 16634
diff changeset
2762 nobackup = opts.get('no_backup')
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2763 keepchanges = opts.get('keep_changes')
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2764 if q.isapplied(patch):
16655
6ca125af882f mq: introduce qgoto --check
Patrick Mezard <patrick@mezard.eu>
parents: 16654
diff changeset
2765 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
2766 keepchanges=keepchanges)
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2767 else:
16655
6ca125af882f mq: introduce qgoto --check
Patrick Mezard <patrick@mezard.eu>
parents: 16654
diff changeset
2768 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
2769 keepchanges=keepchanges)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2770 q.savedirty()
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2771 return ret
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2772
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2773 @command("qguard",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2774 [('l', 'list', None, _('list all patches and guards')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2775 ('n', 'none', None, _('drop all guards'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2776 _('hg qguard [-l] [-n] [PATCH] [-- [+GUARD]... [-GUARD]...]'))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2777 def guard(ui, repo, *args, **opts):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2778 '''set or print guards for a patch
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2779
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2780 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
2781 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
2782 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
2783 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
2784 has activated it.
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2785
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2786 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
2787 With arguments, set guards for the named patch.
12389
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 12380
diff changeset
2788
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 12380
diff changeset
2789 .. note::
19997
de16c673455b documentation: add an extra newline after note directive
Simon Heimberg <simohe@besonet.ch>
parents: 19951
diff changeset
2790
12389
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 12380
diff changeset
2791 Specifying negative guards now requires '--'.
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2792
9824
87c92b260710 mq: fix literal blocks in docstrings
Martin Geisler <mg@lazybytes.net>
parents: 9733
diff changeset
2793 To set guards on another patch::
87c92b260710 mq: fix literal blocks in docstrings
Martin Geisler <mg@lazybytes.net>
parents: 9733
diff changeset
2794
10476
3113736dbac5 mq: more instructive use of "--" in qguard help (issue2040)
Martin Geisler <mg@lazybytes.net>
parents: 10413
diff changeset
2795 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
2796
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2797 Returns 0 on success.
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2798 '''
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2799 def status(idx):
14573
d590ff1f22b2 mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14572
diff changeset
2800 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
2801 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
2802 state = 'applied'
1c00577b0298 qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11789
diff changeset
2803 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
2804 state = 'unapplied'
1c00577b0298 qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11789
diff changeset
2805 else:
1c00577b0298 qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11789
diff changeset
2806 state = 'guarded'
1c00577b0298 qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11789
diff changeset
2807 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
2808 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
2809
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2810 for i, guard in enumerate(guards):
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2811 if guard.startswith('+'):
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2812 ui.write(guard, label='qguard.positive')
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2813 elif guard.startswith('-'):
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2814 ui.write(guard, label='qguard.negative')
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2815 else:
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2816 ui.write(guard, label='qguard.unguarded')
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2817 if i != len(guards) - 1:
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2818 ui.write(' ')
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2819 ui.write('\n')
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2820 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
2821 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
2822 patch = None
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2823 args = list(args)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2824 if opts.get('list'):
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2825 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
2826 raise error.Abort(_('cannot mix -l/--list with options or '
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2827 'arguments'))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2828 for i in xrange(len(q.series)):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2829 status(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2830 return
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2831 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
2832 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
2833 raise error.Abort(_('no patches applied'))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2834 patch = q.applied[-1].name
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2835 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
2836 patch = args.pop(0)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2837 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
2838 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
2839 if args or opts.get('none'):
14574
12fba7bcb4f1 mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14573
diff changeset
2840 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
2841 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
2842 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
2843 q.setguards(idx, args)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2844 q.savedirty()
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2845 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2846 status(q.series.index(q.lookup(patch)))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2847
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2848 @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
2849 def header(ui, repo, patch=None):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2850 """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
2851
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2852 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
2853 q = repo.mq
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2854
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2855 if patch:
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2856 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
2857 else:
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2858 if not q.applied:
10510
f77f3383c666 i18n: mark more strings for translation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10498
diff changeset
2859 ui.write(_('no patches applied\n'))
3008
c203ccd7d838 qheader: exit withh meaningful error code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3006
diff changeset
2860 return 1
2747
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2861 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
2862 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
2863
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
2864 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
2865
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2866 def lastsavename(path):
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
2867 (directory, base) = os.path.split(path)
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
2868 names = os.listdir(directory)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2869 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
2870 maxindex = None
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2871 maxname = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2872 for f in names:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2873 m = namere.match(f)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2874 if m:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2875 index = int(m.group(1))
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
2876 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
2877 maxindex = index
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2878 maxname = f
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2879 if maxname:
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
2880 return (os.path.join(directory, maxname), maxindex)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2881 return (None, None)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2882
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2883 def savename(path):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2884 (last, index) = lastsavename(path)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2885 if last is None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2886 index = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2887 newpath = path + ".%d" % (index + 1)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2888 return newpath
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2889
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2890 @command("^qpush",
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2891 [('', 'keep-changes', None,
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2892 _('tolerate non-conflicting local changes')),
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
2893 ('f', 'force', None, _('apply on top of local changes')),
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2894 ('e', 'exact', None,
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2895 _('apply the target patch to its recorded parent')),
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2896 ('l', 'list', None, _('list patch name in commit text')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2897 ('a', 'all', None, _('apply all patches')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2898 ('m', 'merge', None, _('merge from another queue (DEPRECATED)')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2899 ('n', 'name', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2900 _('merge queue name (DEPRECATED)'), _('NAME')),
16635
9d76320d8b99 mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents: 16634
diff changeset
2901 ('', 'move', None,
9d76320d8b99 mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents: 16634
diff changeset
2902 _('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
2903 ('', '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
2904 _('hg qpush [-f] [-l] [-a] [--move] [PATCH | INDEX]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2905 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
2906 """push the next patch onto the stack
6553
0bb76d168437 remove trailing spaces
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6552
diff changeset
2907
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
2908 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
2909 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
2910 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
2911 uncommitted changes.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2912
13725
6783f47d90dd mq: fix typo in docstring
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents: 13632
diff changeset
2913 Return 0 on success.
6552
315b36ce6251 mq: add a little documentation on qpush -f
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6382
diff changeset
2914 """
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2915 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2916 mergeq = None
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2917
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2918 opts = fixkeepchangesopts(ui, opts)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2919 if opts.get('merge'):
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2920 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
2921 newpath = repo.vfs.join(opts.get('name'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2922 else:
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2923 newpath, i = lastsavename(q.path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2924 if not newpath:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2925 ui.warn(_("no saved queues found, please use -n\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2926 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
2927 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
2928 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
2929 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
2930 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
2931 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
2932 keepchanges=opts.get('keep_changes'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2933 return ret
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2934
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2935 @command("^qpop",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2936 [('a', 'all', None, _('pop all patches')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2937 ('n', 'name', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2938 _('queue name to pop (DEPRECATED)'), _('NAME')),
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2939 ('', 'keep-changes', None,
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2940 _('tolerate non-conflicting local changes')),
16635
9d76320d8b99 mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents: 16634
diff changeset
2941 ('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
2942 ('', '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
2943 _('hg qpop [-a] [-f] [PATCH | INDEX]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2944 def pop(ui, repo, patch=None, **opts):
6611
f4c612da788d mq: add correct documentation for qpop
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6610
diff changeset
2945 """pop the current patch off the stack
6621
d5cbbe2c49ce mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6611
diff changeset
2946
16653
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
2947 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
2948 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
2949 the top of the stack.
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
2950
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
2951 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
2952 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
2953 overlap with patched files. With -f/--force, backup and discard
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
2954 changes made to such files.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2955
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2956 Return 0 on success.
6611
f4c612da788d mq: add correct documentation for qpop
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6610
diff changeset
2957 """
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2958 opts = fixkeepchangesopts(ui, opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2959 localupdate = True
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2960 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
2961 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
2962 ui.warn(_('using patch queue: %s\n') % q.path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2963 localupdate = False
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2964 else:
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2965 q = repo.mq
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2966 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
2967 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
2968 keepchanges=opts.get('keep_changes'))
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2969 q.savedirty()
4099
cf5580c16b13 mq: propagate the return error of pop
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4096
diff changeset
2970 return ret
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2971
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2972 @command("qrename|qmv", [], _('hg qrename PATCH1 [PATCH2]'))
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2973 def rename(ui, repo, patch, name=None, **opts):
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2974 """rename a patch
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2975
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2976 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
2977 With two arguments, renames PATCH1 to PATCH2.
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2978
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2979 Returns 0 on success."""
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2980 q = repo.mq
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2981 if not name:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2982 name = patch
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2983 patch = None
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2984
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2985 if patch:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2986 patch = q.lookup(patch)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2987 else:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2988 if not q.applied:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2989 ui.write(_('no patches applied\n'))
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2990 return
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2991 patch = q.lookup('qtip')
3083
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
2992 absdest = q.join(name)
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
2993 if os.path.isdir(absdest):
4037
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
2994 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
2995 absdest = q.join(name)
14423
7230aef66b7c mq: use checkpatchname
Idan Kamara <idankk86@gmail.com>
parents: 14422
diff changeset
2996 q.checkpatchname(name)
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2997
10510
f77f3383c666 i18n: mark more strings for translation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10498
diff changeset
2998 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
2999 i = q.findseries(patch)
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
3000 guards = q.guard_re.findall(q.fullseries[i])
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
3001 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
3002 q.parseseries()
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
3003 q.seriesdirty = True
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
3004
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
3005 info = q.isapplied(patch)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
3006 if info:
2818
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2816
diff changeset
3007 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
3008 q.applieddirty = True
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
3009
11513
0c944b7af564 mq: fixed ENOENT when qrename to new/directory.patch
Yuya Nishihara <yuya@tcha.org>
parents: 11462
diff changeset
3010 destdir = os.path.dirname(absdest)
0c944b7af564 mq: fixed ENOENT when qrename to new/directory.patch
Yuya Nishihara <yuya@tcha.org>
parents: 11462
diff changeset
3011 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
3012 os.makedirs(destdir)
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
3013 util.rename(q.join(patch), absdest)
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
3014 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
3015 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
3016 wctx = r[None]
27848
9bda75a0c783 with: use context manager in qrename
Bryan O'Sullivan <bryano@fb.com>
parents: 27847
diff changeset
3017 with r.wlock():
6648
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
3018 if r.dirstate[patch] == 'a':
14434
cc8c09855d19 dirstate: rename forget to drop
Matt Mackall <mpm@selenic.com>
parents: 14424
diff changeset
3019 r.dirstate.drop(patch)
6648
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
3020 r.dirstate.add(name)
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
3021 else:
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11302
diff changeset
3022 wctx.copy(patch, name)
14435
5f6090e559fa context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents: 14434
diff changeset
3023 wctx.forget([patch])
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
3024
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
3025 q.savedirty()
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
3026
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3027 @command("qrestore",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3028 [('d', 'delete', None, _('delete save entry')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3029 ('u', 'update', None, _('update queue working directory'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3030 _('hg qrestore [-d] [-u] REV'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3031 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
3032 """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
3033
12352
5be733b20bd1 mq: fix the deprecation comment for qsave & qrestore.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12344
diff changeset
3034 This command is deprecated, use :hg:`rebase` instead."""
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3035 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
3036 q = repo.mq
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3037 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
3038 qupdate=opts.get('update'))
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
3039 q.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3040 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3041
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3042 @command("qsave",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3043 [('c', 'copy', None, _('copy patch directory')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3044 ('n', 'name', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3045 _('copy directory name'), _('NAME')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3046 ('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
3047 ('f', 'force', None, _('force copy'))] + cmdutil.commitopts,
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3048 _('hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3049 def save(ui, repo, **opts):
10360
bcf90e712dc3 mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10359
diff changeset
3050 """save current queue state (DEPRECATED)
bcf90e712dc3 mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10359
diff changeset
3051
12352
5be733b20bd1 mq: fix the deprecation comment for qsave & qrestore.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12344
diff changeset
3052 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
3053 q = repo.mq
14635
217b7d83afc3 cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14620
diff changeset
3054 message = cmdutil.logmessage(ui, opts)
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
3055 ret = q.save(repo, msg=message)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3056 if ret:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3057 return ret
15880
02b135558756 mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents: 15879
diff changeset
3058 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
3059 if opts.get('copy'):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3060 path = q.path
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3061 if opts.get('name'):
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3062 newpath = os.path.join(q.basepath, opts.get('name'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3063 if os.path.exists(newpath):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3064 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
3065 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
3066 'a directory') % newpath)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3067 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
3068 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
3069 'use -f to force') % newpath)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3070 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3071 newpath = savename(path)
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
3072 ui.warn(_("copy %s to %s\n") % (path, newpath))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3073 util.copyfiles(path, newpath)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3074 if opts.get('empty'):
15880
02b135558756 mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents: 15879
diff changeset
3075 del q.applied[:]
02b135558756 mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents: 15879
diff changeset
3076 q.applieddirty = True
02b135558756 mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents: 15879
diff changeset
3077 q.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3078 return 0
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
3079
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3080
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3081 @command("qselect",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3082 [('n', 'none', None, _('disable all guards')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3083 ('s', 'series', None, _('list all guards in series file')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3084 ('', 'pop', None, _('pop to before first guarded applied patch')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3085 ('', 'reapply', None, _('pop, then reapply patches'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3086 _('hg qselect [OPTION]... [GUARD]...'))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3087 def select(ui, repo, *args, **opts):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3088 '''set or print guarded patches to push
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3089
11307
7f72031d4047 mq: use hg reST role some more
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
3090 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
3091 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
3092 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
3093 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
3094 match the current guard. For example::
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3095
13791
794f4476b974 mq: fix qselect help for qguard
timeless@gmail.com
parents: 13725
diff changeset
3096 qguard foo.patch -- -stable (negative guard)
794f4476b974 mq: fix qselect help for qguard
timeless@gmail.com
parents: 13725
diff changeset
3097 qguard bar.patch +stable (positive guard)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3098 qselect stable
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3099
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
3100 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
3101 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
3102 positive match).
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3103
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
3104 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
3105 With one argument, sets the active guard.
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
3106
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
3107 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
3108 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
3109 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
3110
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
3111 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
3112 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
3113 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
3114 --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
3115 guarded patches.
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3116
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
3117 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
3118 (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
3119
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
3120 Returns 0 on success.'''
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3121
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3122 q = repo.mq
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3123 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
3124 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
3125 if args or opts.get('none'):
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3126 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
3127 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
3128 q.setactive(args)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
3129 q.savedirty()
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3130 if not args:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3131 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
3132 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
3133 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
3134 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
3135 if len(unapplied) != len(old_unapplied):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3136 ui.status(_('number of unguarded, unapplied patches has '
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3137 'changed from %d to %d\n') %
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3138 (len(old_unapplied), len(unapplied)))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3139 if len(guarded) != len(old_guarded):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3140 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
3141 'from %d to %d\n') %
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3142 (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
3143 elif opts.get('series'):
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3144 guards = {}
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3145 noguards = 0
14573
d590ff1f22b2 mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14572
diff changeset
3146 for gs in q.seriesguards:
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3147 if not gs:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3148 noguards += 1
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3149 for g in gs:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3150 guards.setdefault(g, 0)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3151 guards[g] += 1
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3152 if ui.verbose:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3153 guards['NONE'] = noguards
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3154 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
3155 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
3156 if guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3157 ui.note(_('guards in series file:\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3158 for guard, count in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3159 ui.note('%2d ' % count)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3160 ui.write(guard, '\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 ui.note(_('no guards in series file\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3163 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3164 if guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3165 ui.note(_('active guards:\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3166 for g in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3167 ui.write(g, '\n')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3168 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3169 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
3170 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
3171 popped = False
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3172 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
3173 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
3174 if not pushable(i):
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3175 ui.status(_('popping guarded patches\n'))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3176 popped = True
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3177 if i == 0:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3178 q.pop(repo, all=True)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3179 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
3180 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
3181 break
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3182 if popped:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3183 try:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3184 if reapply:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3185 ui.status(_('reapplying unguarded patches\n'))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3186 q.push(repo, reapply)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3187 finally:
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
3188 q.savedirty()
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3189
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3190 @command("qfinish",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3191 [('a', 'applied', None, _('finish all applied changesets'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3192 _('hg qfinish [-a] [REV]...'))
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3193 def finish(ui, repo, *revrange, **opts):
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3194 """move applied patches into repository history
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3195
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
3196 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
3197 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
3198 history.
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3199
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
3200 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
3201 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
3202 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
3203 stack of applied patches.
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3204
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
3205 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
3206 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
3207 to upstream.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
3208
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
3209 Returns 0 on success.
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3210 """
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3211 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
3212 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
3213 elif opts.get('applied'):
11730
7469ff872122 qfinish: fix range logic for --applied
Matt Mackall <mpm@selenic.com>
parents: 11717
diff changeset
3214 revrange = ('qbase::qtip',) + revrange
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3215
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3216 q = repo.mq
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3217 if not q.applied:
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3218 ui.status(_('no patches applied\n'))
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3219 return 0
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3220
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14298
diff changeset
3221 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
3222 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
3223 ui.warn(_('warning: uncommitted changes in the working directory\n'))
17512
39e7e74b3cd3 spelling: responsibility
timeless@mozdev.org
parents: 17191
diff changeset
3224 # 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
3225 # 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
3226 # responsibility for this locking.
27847
71853c0ba592 with: use context manager in qfinish
Bryan O'Sullivan <bryano@fb.com>
parents: 27832
diff changeset
3227 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
3228 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
3229 q.savedirty()
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3230 return 0
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3231
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3232 @command("qqueue",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3233 [('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
3234 ('', 'active', False, _('print name of active queue')),
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3235 ('c', 'create', False, _('create new queue')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3236 ('', 'rename', False, _('rename active queue')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3237 ('', 'delete', False, _('delete reference to queue')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3238 ('', 'purge', False, _('delete queue, and remove patch dir')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3239 ],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3240 _('[OPTION] [QUEUE]'))
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3241 def qqueue(ui, repo, name=None, **opts):
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3242 '''manage multiple patch queues
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3243
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3244 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
3245 new patch queues and deleting existing ones.
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3246
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3247 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
3248 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
3249 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
3250 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
3251
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3252 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
3253 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
3254 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
3255 created and switching will fail.
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3256
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3257 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
3258 active queue.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
3259
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
3260 Returns 0 on success.
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3261 '''
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3262 q = repo.mq
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3263 _defaultqueue = 'patches'
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3264 _allqueues = 'patches.queues'
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3265 _activequeue = 'patches.queue'
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3266
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3267 def _getcurrent():
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3268 cur = os.path.basename(q.path)
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3269 if cur.startswith('patches-'):
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3270 cur = cur[8:]
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3271 return cur
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3272
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3273 def _noqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3274 try:
23877
7cc77030c557 localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23443
diff changeset
3275 fh = repo.vfs(_allqueues, 'r')
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3276 fh.close()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3277 except IOError:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3278 return True
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 return False
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3281
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3282 def _getqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3283 current = _getcurrent()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3284
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3285 try:
23877
7cc77030c557 localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23443
diff changeset
3286 fh = repo.vfs(_allqueues, 'r')
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3287 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
3288 fh.close()
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3289 if current not in queues:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3290 queues.append(current)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3291 except IOError:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3292 queues = [_defaultqueue]
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 return sorted(queues)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3295
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3296 def _setactive(name):
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3297 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
3298 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
3299 'as patches are applied'))
11938
b8b1e6e78486 mq/qqueue: split _setactive
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11819
diff changeset
3300 _setactivenocheck(name)
b8b1e6e78486 mq/qqueue: split _setactive
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11819
diff changeset
3301
b8b1e6e78486 mq/qqueue: split _setactive
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11819
diff changeset
3302 def _setactivenocheck(name):
23877
7cc77030c557 localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23443
diff changeset
3303 fh = repo.vfs(_activequeue, 'w')
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3304 if name != 'patches':
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3305 fh.write(name)
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3306 fh.close()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3307
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3308 def _addqueue(name):
23877
7cc77030c557 localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23443
diff changeset
3309 fh = repo.vfs(_allqueues, 'a')
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3310 fh.write('%s\n' % (name,))
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3311 fh.close()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3312
11939
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3313 def _queuedir(name):
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3314 if name == 'patches':
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')
11939
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3316 else:
31333
f897a088377c mq: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31312
diff changeset
3317 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
3318
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3319 def _validname(name):
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3320 for n in name:
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3321 if n in ':\\/.':
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3322 return False
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3323 return True
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3324
11966
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3325 def _delete(name):
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3326 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
3327 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
3328
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3329 current = _getcurrent()
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3330
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3331 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
3332 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
3333
23877
7cc77030c557 localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23443
diff changeset
3334 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
3335 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
3336 if queue == name:
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3337 continue
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3338 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
3339 fh.close()
31312
7eb53603744b vfs: use repo.vfs.rename
Mads Kiilerich <mads@kiilerich.com>
parents: 31309
diff changeset
3340 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
3341
14987
3709cca378ff mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14943
diff changeset
3342 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
3343 current = _getcurrent()
14987
3709cca378ff mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14943
diff changeset
3344 if opts.get('active'):
3709cca378ff mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14943
diff changeset
3345 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
3346 return
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3347 for queue in _getqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3348 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
3349 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
3350 ui.write(_(' (active)\n'))
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3351 else:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3352 ui.write('\n')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3353 return
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3354
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3355 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
3356 raise error.Abort(
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3357 _('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
3358
29752
8a8c1c4b8f24 mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29127
diff changeset
3359 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
3360 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
3361
8a8c1c4b8f24 mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29127
diff changeset
3362 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
3363 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
3364 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
3365 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
3366 _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
3367 _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
3368 _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
3369 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
3370 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
3371 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
3372 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
3373 % 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 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
3375 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
3376
8a8c1c4b8f24 mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29127
diff changeset
3377 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
3378 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
3379
8a8c1c4b8f24 mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29127
diff changeset
3380 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
3381 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
3382 newdir)
8a8c1c4b8f24 mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29127
diff changeset
3383
8a8c1c4b8f24 mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29127
diff changeset
3384 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
3385 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
3386 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
3387 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
3388 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
3389 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
3390 else:
8a8c1c4b8f24 mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29127
diff changeset
3391 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
3392 fh.close()
31312
7eb53603744b vfs: use repo.vfs.rename
Mads Kiilerich <mads@kiilerich.com>
parents: 31309
diff changeset
3393 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
3394 _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
3395 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
3396 _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
3397 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
3398 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
3399 _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
3400 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
3401 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
3402 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
3403 else:
8a8c1c4b8f24 mq: take wlock when 'qqueue' is doing write operations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29127
diff changeset
3404 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
3405 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
3406 _setactive(name)
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3407
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
3408 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
3409 """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
3410 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
3411 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
3412 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
3413 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
3414 mqphase = phases.draft
15972
341c58282b25 mq: pass qbase node instead of mq statusentry in phasedefaults
Augie Fackler <durin42@gmail.com>
parents: 15952
diff changeset
3415 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
3416 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
3417 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
3418
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3419 def reposetup(ui, repo):
2818
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2816
diff changeset
3420 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
3421 @localrepo.unfilteredpropertycache
8524
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
3422 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
3423 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
3424
20628
e3d1df48fcc6 cmdserver: reload mq on each runcommand request to avoid corruption
Yuya Nishihara <yuya@tcha.org>
parents: 20442
diff changeset
3425 def invalidateall(self):
e3d1df48fcc6 cmdserver: reload mq on each runcommand request to avoid corruption
Yuya Nishihara <yuya@tcha.org>
parents: 20442
diff changeset
3426 super(mqrepo, self).invalidateall()
e3d1df48fcc6 cmdserver: reload mq on each runcommand request to avoid corruption
Yuya Nishihara <yuya@tcha.org>
parents: 20442
diff changeset
3427 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
3428 # 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
3429 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
3430
14596
6a0070d00bc8 mq: rename abort_if_wdir_patched to abortifwdirpatched
Adrian Buehlmann <adrian@cadifra.com>
parents: 14595
diff changeset
3431 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
3432 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
3433 parents = self.dirstate.parents()
9510ddf87c43 mq: forbid commit of merge involving mq patches
Martin Geisler <mg@aragost.com>
parents: 13508
diff changeset
3434 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
3435 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
3436 raise error.Abort(errmsg)
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
3437
8711
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
3438 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
3439 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
3440 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
3441 extra = {}
14596
6a0070d00bc8 mq: rename abort_if_wdir_patched to abortifwdirpatched
Adrian Buehlmann <adrian@cadifra.com>
parents: 14595
diff changeset
3442 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
3443 _('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
3444 force)
2845
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2844
diff changeset
3445
8711
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
3446 return super(mqrepo, self).commit(text, user, date, match, force,
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
3447 editor, extra)
2845
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2844
diff changeset
3448
20924
e10000369b47 push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20827
diff changeset
3449 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
3450 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
3451 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
3452 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
3453 # 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
3454 # 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
3455 # pushed.
20924
e10000369b47 push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20827
diff changeset
3456 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
3457 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
3458 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
3459 break
ec8a9e06cf05 mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15934
diff changeset
3460 else:
ec8a9e06cf05 mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15934
diff changeset
3461 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
3462 # 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
3463 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
3464 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
3465 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
3466 # 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
3467 super(mqrepo, self).checkpush(pushop)
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
3468
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3469 def _findtags(self):
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3470 '''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
3471 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
3472
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
3473 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
3474 if not q.applied:
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3475 return result
2663
96950d39171d Mq: modify repo.lookup to resolve applied patches too.
Brendan Cully <brendan@kublai.com>
parents: 2554
diff changeset
3476
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
3477 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
3478
13508
0396ca8015be mq: fix qpush recursion in _findtags when status file is wrong (issue2664)
Matt Mackall <mpm@selenic.com>
parents: 13507
diff changeset
3479 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
3480 # 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
3481 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
3482 except error.LookupError:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
3483 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
3484 % short(mqtags[-1][0]))
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3485 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
3486
18662
c5f7e83d47cd mq: comply with filtering when injecting fake tags (issue3812)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18644
diff changeset
3487 # 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
3488 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
3489 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
3490 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
3491 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
3492
2723
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
3493 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
3494 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
3495 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
3496 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
3497 for patch in mqtags:
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3498 if patch[1] in tags:
16929
4b02d7006169 mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents: 16867
diff changeset
3499 self.ui.warn(_('tag %s overrides mq patch of the same '
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
3500 '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
3501 else:
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3502 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
3503
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3504 return result
2664
9b8df8dceeed Add qtip and qbase to mq qlookup.
Brendan Cully <brendan@kublai.com>
parents: 2663
diff changeset
3505
2851
82f50658c72b mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2850
diff changeset
3506 if repo.local():
82f50658c72b mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2850
diff changeset
3507 repo.__class__ = mqrepo
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3508
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
3509 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
3510
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
3511 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
3512 if (util.safehasattr(repo, 'abortifwdirpatched')
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
3513 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
3514 repo.abortifwdirpatched(_('cannot import over an applied patch'),
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
3515 kwargs.get('force'))
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
3516 return orig(ui, repo, *args, **kwargs)
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
3517
10402
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3518 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
3519 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
3520
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3521 if not mq:
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3522 return orig(ui, *args, **kwargs)
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3523
10691
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3524 if args:
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3525 repopath = args[0]
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3526 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
3527 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
3528 'may be initialized'))
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3529 else:
30519
20a42325fdef py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30489
diff changeset
3530 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
3531 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
3532 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
3533 '(.hg not found)'))
10402
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3534 repo = hg.repository(ui, repopath)
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
3535 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
3536
10359
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3537 def mqcommand(orig, ui, repo, *args, **kwargs):
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3538 """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
3539
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3540 # 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
3541 mq = kwargs.pop(r'mq', None)
10359
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3542
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3543 if not mq:
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3544 return orig(ui, repo, *args, **kwargs)
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3545
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3546 q = repo.mq
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3547 r = q.qrepo()
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3548 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
3549 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
3550 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
3551
19212
d0ba7022c13b mq: switch to new summary hook mechanism
Bryan O'Sullivan <bryano@fb.com>
parents: 19064
diff changeset
3552 def summaryhook(ui, repo):
11107
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3553 q = repo.mq
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3554 m = []
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3555 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
3556 if a:
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 applied"), 'qseries.applied') % a)
11107
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3558 if u:
11121
d061ef1d781c mq: make use of output labeling for summary
Eric Eisner <ede@mit.edu>
parents: 11120
diff changeset
3559 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
3560 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
3561 # 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
3562 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
3563 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
3564 # i18n: column positioning for "hg summary"
11119
2e270443a2c6 mq: mark string for translation
Martin Geisler <mg@lazybytes.net>
parents: 11107
diff changeset
3565 ui.note(_("mq: (empty queue)\n"))
11107
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3566
28394
dcb4209bd30d revset: replace extpredicate by revsetpredicate of registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28313
diff changeset
3567 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
3568
42910f9fffeb revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27533
diff changeset
3569 @revsetpredicate('mq()')
14210
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3570 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
3571 """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
3572 """
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31023
diff changeset
3573 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
3574 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
3575 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
3576
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3577 # 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
3578 i18nfunctions = [revsetmq]
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3579
17101
6bc275593d07 mq: defer command wrapping to extsetup (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17059
diff changeset
3580 def extsetup(ui):
6bc275593d07 mq: defer command wrapping to extsetup (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17059
diff changeset
3581 # 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
3582 # 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
3583 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
3584
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
3585 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
3586 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
3587
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3588 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
3589 entry[1].extend(mqopt)
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3590
12036
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3591 def dotable(cmdtable):
28313
aa73d6a5d9ea dispatch: store norepo/optionalrepo/inferrepo attributes in function (API)
Yuya Nishihara <yuya@tcha.org>
parents: 27919
diff changeset
3592 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
3593 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
3594 func = entry[0]
30485
acd30a959980 dispatch: stop supporting non-use of @command
Augie Fackler <augie@google.com>
parents: 30369
diff changeset
3595 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
3596 continue
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3597 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
3598 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
3599
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3600 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
3601
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3602 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
3603 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
3604 dotable(getattr(extmodule, 'cmdtable', {}))
7142
88f1b8081f1c Prevent import over an applied patch (closes issue795)
Brendan Cully <brendan@kublai.com>
parents: 7113
diff changeset
3605
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3606 colortable = {'qguard.negative': 'red',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3607 'qguard.positive': 'yellow',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3608 'qguard.unguarded': 'green',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3609 '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
3610 'qseries.guarded': 'black bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3611 'qseries.missing': 'red bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3612 'qseries.unapplied': 'black bold'}