annotate hgext/mq.py @ 18534:151f78a07607 stable

Added signature for changeset a6088c05e43a
author Matt Mackall <mpm@selenic.com>
date Fri, 01 Feb 2013 15:32:05 -0600
parents ff2c89ebf5d4
children 3e92772d5383
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
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10962
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
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
31 files creations or deletions. This behaviour can be configured with::
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.
2554
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
60 '''
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
61
3891
6b4127c7d52a Simplify i18n imports
Matt Mackall <mpm@selenic.com>
parents: 3877
diff changeset
62 from mercurial.i18n import _
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
63 from mercurial.node import bin, hex, short, nullid, nullrev
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
64 from mercurial.lock import release
14241
45f7aa35f2fd mq: don't hide the patch module
Idan Kamara <idankk86@gmail.com>
parents: 14239
diff changeset
65 from mercurial import commands, cmdutil, hg, scmutil, util, revset
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17893
diff changeset
66 from mercurial import repair, extensions, error, phases
14241
45f7aa35f2fd mq: don't hide the patch module
Idan Kamara <idankk86@gmail.com>
parents: 14239
diff changeset
67 from mercurial import patch as patchmod
14636
b98063487a6f mq: use ui.fin when importing patch from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14635
diff changeset
68 import os, re, errno, shutil
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
69
5645
1f044b04fa0a mq: drop obsolete reference to 'qversion'
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5534
diff changeset
70 commands.norepo += " qclone"
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
71
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
72 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
73
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
74 cmdtable = {}
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
75 command = cmdutil.command(cmdtable)
16743
38caf405d010 hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents: 16733
diff changeset
76 testedwith = 'internal'
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
77
4037
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
78 # 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
79 # 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
80 normname = util.normpath
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
81
8778
c5f36402daad use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8761
diff changeset
82 class statusentry(object):
10682
8ed350051896 mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10681
diff changeset
83 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
84 self.node, self.name = node, name
11375
0f33abfccaa1 mq: __str__ falls back to __repr__
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11365
diff changeset
85 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
86 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
87
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
88 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
89 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
90 def eatdiff(lines):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
91 while lines:
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
92 l = lines[-1]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
93 if (l.startswith("diff -") or
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
94 l.startswith("Index:") or
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
95 l.startswith("===========")):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
96 del lines[-1]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
97 else:
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
98 break
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
99 def eatempty(lines):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
100 while lines:
10688
d4d3a8a65248 mq: don't use regexp when not necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10687
diff changeset
101 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
102 del lines[-1]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
103 else:
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
104 break
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
105
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
106 message = []
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
107 comments = []
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
108 user = None
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
109 date = None
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
110 parent = None
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
111 format = None
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
112 subject = None
13229
f3058dd05281 mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents: 13228
diff changeset
113 branch = None
f3058dd05281 mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents: 13228
diff changeset
114 nodeid = None
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
115 diffstart = 0
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
116
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
117 for line in file(pf):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
118 line = line.rstrip()
10730
4d6bd7b8b6d8 mq: allow lines starting with '--- ' in patch messages
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10691
diff changeset
119 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
120 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
121 diffstart = 2
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
122 break
10730
4d6bd7b8b6d8 mq: allow lines starting with '--- ' in patch messages
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10691
diff changeset
123 diffstart = 0 # reset
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
124 if line.startswith("--- "):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
125 diffstart = 1
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
126 continue
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
127 elif format == "hgpatch":
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
128 # 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
129 if line.startswith("# User "):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
130 user = line[7:]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
131 elif line.startswith("# Date "):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
132 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
133 elif line.startswith("# Parent "):
14170
31ec4d7eb63f mq: strip extra whitespace from node ids in header (issue2790)
Kevin Bullock <kbullock@ringworld.org>
parents: 14051
diff changeset
134 parent = line[9:].lstrip()
13229
f3058dd05281 mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents: 13228
diff changeset
135 elif line.startswith("# Branch "):
f3058dd05281 mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents: 13228
diff changeset
136 branch = line[9:]
f3058dd05281 mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents: 13228
diff changeset
137 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
138 nodeid = line[10:]
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
139 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
140 message.append(line)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
141 format = None
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
142 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
143 message = []
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
144 format = "hgpatch"
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
145 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
146 line.startswith("subject: "))):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
147 subject = line[9:]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
148 format = "tag"
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
149 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
150 line.startswith("from: "))):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
151 user = line[6:]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
152 format = "tag"
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
153 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
154 line.startswith("date: "))):
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
155 date = line[6:]
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
156 format = "tag"
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
157 elif format == "tag" and line == "":
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
158 # 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
159 # 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
160 format = "tagdone"
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
161 elif message or line:
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
162 message.append(line)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
163 comments.append(line)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
164
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
165 eatdiff(message)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
166 eatdiff(comments)
13229
f3058dd05281 mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents: 13228
diff changeset
167 # 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
168 # 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
169 self.diffstartline = len(comments)
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
170 eatempty(message)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
171 eatempty(comments)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
172
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
173 # 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
174 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
175 message.insert(0, "")
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
176 message.insert(0, subject)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
177
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
178 self.message = message
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
179 self.comments = comments
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
180 self.user = user
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
181 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
182 self.parent = parent
13229
f3058dd05281 mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents: 13228
diff changeset
183 # 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
184 self.nodeid = nodeid
f3058dd05281 mq: record more data in patchheader class (no behavior changes)
Steve Borho <steve@borho.org>
parents: 13228
diff changeset
185 self.branch = branch
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
186 self.haspatch = diffstart > 1
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
187 self.plainmode = plainmode
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
188
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
189 def setuser(self, user):
8654
f6cc3638f468 mq: rename setheader to updateheader and fix comment
Cédric Duval <cedricduval@free.fr>
parents: 8653
diff changeset
190 if not self.updateheader(['From: ', '# User '], user):
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
191 try:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
192 patchheaderat = self.comments.index('# HG changeset patch')
9334
08f59f7916f9 mq: fix coding style in qrefresh
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9327
diff changeset
193 self.comments.insert(patchheaderat + 1, '# User ' + user)
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
194 except ValueError:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
195 if self.plainmode or self._hasheader(['Date: ']):
9336
dd6f605b15c0 mq: upgrade the patch to HG format when adding the author name with qrefresh
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9335
diff changeset
196 self.comments = ['From: ' + user] + self.comments
dd6f605b15c0 mq: upgrade the patch to HG format when adding the author name with qrefresh
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9335
diff changeset
197 else:
dd6f605b15c0 mq: upgrade the patch to HG format when adding the author name with qrefresh
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9335
diff changeset
198 tmp = ['# HG changeset patch', '# User ' + user, '']
dd6f605b15c0 mq: upgrade the patch to HG format when adding the author name with qrefresh
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9335
diff changeset
199 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
200 self.user = user
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
201
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
202 def setdate(self, date):
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
203 if not self.updateheader(['Date: ', '# Date '], date):
2b1260436f83 mq: add the date with qrefresh, even if missing (issue1768)
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9336
diff changeset
204 try:
2b1260436f83 mq: add the date with qrefresh, even if missing (issue1768)
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9336
diff changeset
205 patchheaderat = self.comments.index('# HG changeset patch')
2b1260436f83 mq: add the date with qrefresh, even if missing (issue1768)
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9336
diff changeset
206 self.comments.insert(patchheaderat + 1, '# Date ' + date)
2b1260436f83 mq: add the date with qrefresh, even if missing (issue1768)
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9336
diff changeset
207 except ValueError:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
208 if self.plainmode or self._hasheader(['From: ']):
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
209 self.comments = ['Date: ' + date] + self.comments
2b1260436f83 mq: add the date with qrefresh, even if missing (issue1768)
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9336
diff changeset
210 else:
2b1260436f83 mq: add the date with qrefresh, even if missing (issue1768)
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9336
diff changeset
211 tmp = ['# HG changeset patch', '# Date ' + date, '']
2b1260436f83 mq: add the date with qrefresh, even if missing (issue1768)
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9336
diff changeset
212 self.comments = tmp + self.comments
2b1260436f83 mq: add the date with qrefresh, even if missing (issue1768)
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9336
diff changeset
213 self.date = date
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
214
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
215 def setparent(self, parent):
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
216 if not self.updateheader(['# Parent '], parent):
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
217 try:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
218 patchheaderat = self.comments.index('# HG changeset patch')
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
219 self.comments.insert(patchheaderat + 1, '# Parent ' + parent)
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
220 except ValueError:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
221 pass
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
222 self.parent = parent
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
223
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
224 def setmessage(self, message):
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
225 if self.comments:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
226 self._delmsg()
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
227 self.message = [message]
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
228 self.comments += self.message
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
229
8654
f6cc3638f468 mq: rename setheader to updateheader and fix comment
Cédric Duval <cedricduval@free.fr>
parents: 8653
diff changeset
230 def updateheader(self, prefixes, new):
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
231 '''Update all references to a field in the patch header.
8654
f6cc3638f468 mq: rename setheader to updateheader and fix comment
Cédric Duval <cedricduval@free.fr>
parents: 8653
diff changeset
232 Return whether the field is present.'''
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
233 res = False
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
234 for prefix in prefixes:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
235 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
236 if self.comments[i].startswith(prefix):
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
237 self.comments[i] = prefix + new
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
238 res = True
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
239 break
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
240 return res
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
241
9335
6eaadd777bc4 mq: add function to check if a header exists in a patch
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9334
diff changeset
242 def _hasheader(self, prefixes):
6eaadd777bc4 mq: add function to check if a header exists in a patch
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9334
diff changeset
243 '''Check if a header starts with any of the given prefixes.'''
6eaadd777bc4 mq: add function to check if a header exists in a patch
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9334
diff changeset
244 for prefix in prefixes:
6eaadd777bc4 mq: add function to check if a header exists in a patch
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9334
diff changeset
245 for comment in self.comments:
6eaadd777bc4 mq: add function to check if a header exists in a patch
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9334
diff changeset
246 if comment.startswith(prefix):
6eaadd777bc4 mq: add function to check if a header exists in a patch
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9334
diff changeset
247 return True
6eaadd777bc4 mq: add function to check if a header exists in a patch
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9334
diff changeset
248 return False
6eaadd777bc4 mq: add function to check if a header exists in a patch
Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
parents: 9334
diff changeset
249
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
250 def __str__(self):
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
251 if not self.comments:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
252 return ''
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
253 return '\n'.join(self.comments) + '\n\n'
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
254
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
255 def _delmsg(self):
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
256 '''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
257 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
258 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
259 if self.message:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
260 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
261 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
262 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
263 del self.comments[i]
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
264 self.message = self.message[2:]
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
265 break
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
266 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
267 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
268 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
269 ci += 1
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
270 del self.comments[ci]
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
271
16102
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
272 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
273 """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
274
db4b0532dbf2 mq: rename secretcommit to newcommit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 16048
diff changeset
275 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
276 creating new changeset.
15926
f94513971767 mq: have mq create secret changeset only
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15924
diff changeset
277 """
18010
38b51a60a195 clfilter: ensure that mq performs commits on unfiltered repos
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 17954
diff changeset
278 repo = repo.unfiltered()
16100
24df9338aa01 mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents: 16064
diff changeset
279 if phase is None:
24df9338aa01 mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents: 16064
diff changeset
280 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
281 phase = phases.secret
24df9338aa01 mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents: 16064
diff changeset
282 if phase is not None:
24df9338aa01 mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents: 16064
diff changeset
283 backup = repo.ui.backupconfig('phases', 'new-commit')
16101
20ad8f0512a2 mq: restore _branchtags() fast path (issue3223)
Patrick Mezard <patrick@mezard.eu>
parents: 16100
diff changeset
284 # Marking the repository as committing an mq patch can be used
20ad8f0512a2 mq: restore _branchtags() fast path (issue3223)
Patrick Mezard <patrick@mezard.eu>
parents: 16100
diff changeset
285 # to optimize operations like _branchtags().
20ad8f0512a2 mq: restore _branchtags() fast path (issue3223)
Patrick Mezard <patrick@mezard.eu>
parents: 16100
diff changeset
286 repo._committingpatch = True
15926
f94513971767 mq: have mq create secret changeset only
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15924
diff changeset
287 try:
16100
24df9338aa01 mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents: 16064
diff changeset
288 if phase is not None:
24df9338aa01 mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents: 16064
diff changeset
289 repo.ui.setconfig('phases', 'new-commit', phase)
15926
f94513971767 mq: have mq create secret changeset only
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15924
diff changeset
290 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
291 finally:
16101
20ad8f0512a2 mq: restore _branchtags() fast path (issue3223)
Patrick Mezard <patrick@mezard.eu>
parents: 16100
diff changeset
292 repo._committingpatch = False
16100
24df9338aa01 mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents: 16064
diff changeset
293 if phase is not None:
24df9338aa01 mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents: 16064
diff changeset
294 repo.ui.restoreconfig(backup)
15926
f94513971767 mq: have mq create secret changeset only
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15924
diff changeset
295
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
296 class AbortNoCleanup(error.Abort):
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
297 pass
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
298
8778
c5f36402daad use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8761
diff changeset
299 class queue(object):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
300 def __init__(self, ui, path, patchdir=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
301 self.basepath = path
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
302 try:
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
303 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
304 cur = fh.read().rstrip()
13400
14f3795a5ed7 explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 13373
diff changeset
305 fh.close()
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
306 if not cur:
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
307 curpath = os.path.join(path, 'patches')
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
308 else:
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
309 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
310 except IOError:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
311 curpath = os.path.join(path, 'patches')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
312 self.path = patchdir or curpath
13970
d13913355390 move opener from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13878
diff changeset
313 self.opener = scmutil.opener(self.path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
314 self.ui = ui
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
315 self.applieddirty = False
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
316 self.seriesdirty = False
11462
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
317 self.added = []
14587
5d3bb4460256 mq: rename series_path to seriespath
Adrian Buehlmann <adrian@cadifra.com>
parents: 14586
diff changeset
318 self.seriespath = "series"
14588
bd3d75a03f80 mq: rename status_path to statuspath
Adrian Buehlmann <adrian@cadifra.com>
parents: 14587
diff changeset
319 self.statuspath = "status"
14589
7d59ee9e711b mq: rename guards_path to guardspath
Adrian Buehlmann <adrian@cadifra.com>
parents: 14588
diff changeset
320 self.guardspath = "guards"
14590
dbb80f03d4ae mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14589
diff changeset
321 self.activeguards = None
14591
b49099712d30 mq: rename guards_dirty to guardsdirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14590
diff changeset
322 self.guardsdirty = False
10190
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
323 # 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
324 try:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
325 gitmode = ui.configbool('mq', 'git', None)
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
326 if gitmode is None:
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
327 raise error.ConfigError
10190
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
328 self.gitmode = gitmode and 'yes' or 'no'
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
329 except error.ConfigError:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
330 self.gitmode = ui.config('mq', 'git', 'auto').lower()
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
331 self.plainmode = ui.configbool('mq', 'plain', False)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
332
8524
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
333 @util.propertycache
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
334 def applied(self):
15258
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
335 def parselines(lines):
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
336 for l in lines:
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
337 entry = l.split(':', 1)
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
338 if len(entry) > 1:
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
339 n, name = entry
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
340 yield statusentry(bin(n), name)
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
341 elif l.strip():
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
342 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
343 # else we ignore empty lines
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
344 try:
14588
bd3d75a03f80 mq: rename status_path to statuspath
Adrian Buehlmann <adrian@cadifra.com>
parents: 14587
diff changeset
345 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
346 return list(parselines(lines))
15258
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
347 except IOError, e:
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
348 if e.errno == errno.ENOENT:
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
349 return []
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
350 raise
8524
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
351
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
352 @util.propertycache
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
353 def fullseries(self):
15258
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
354 try:
15878
914b013d3263 mq: minor cleanup
Mads Kiilerich <mads@kiilerich.com>
parents: 15801
diff changeset
355 return self.opener.read(self.seriespath).splitlines()
15258
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
356 except IOError, e:
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
357 if e.errno == errno.ENOENT:
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
358 return []
fe9677449331 mq: eliminate explicit checks for file existence
Idan Kamara <idankk86@gmail.com>
parents: 15257
diff changeset
359 raise
8524
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
360
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
361 @util.propertycache
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
362 def series(self):
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
363 self.parseseries()
8524
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
364 return self.series
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
365
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
366 @util.propertycache
14573
d590ff1f22b2 mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14572
diff changeset
367 def seriesguards(self):
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
368 self.parseseries()
14573
d590ff1f22b2 mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14572
diff changeset
369 return self.seriesguards
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
370
8525
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
371 def invalidate(self):
14573
d590ff1f22b2 mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14572
diff changeset
372 for a in 'applied fullseries series seriesguards'.split():
8525
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
373 if a in self.__dict__:
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
374 delattr(self, a)
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
375 self.applieddirty = False
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
376 self.seriesdirty = False
14591
b49099712d30 mq: rename guards_dirty to guardsdirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14590
diff changeset
377 self.guardsdirty = False
14590
dbb80f03d4ae mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14589
diff changeset
378 self.activeguards = None
8525
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
379
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
380 def diffopts(self, opts={}, patchfn=None):
14241
45f7aa35f2fd mq: don't hide the patch module
Idan Kamara <idankk86@gmail.com>
parents: 14239
diff changeset
381 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
382 if self.gitmode == 'auto':
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
383 diffopts.upgrade = True
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
384 elif self.gitmode == 'keep':
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
385 pass
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
386 elif self.gitmode in ('yes', 'no'):
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
387 diffopts.git = self.gitmode == 'yes'
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
388 else:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
389 raise util.Abort(_('mq.git option can be auto/keep/yes/no'
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
390 ' got %s') % self.gitmode)
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
391 if patchfn:
10185
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
392 diffopts = self.patchopts(diffopts, patchfn)
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
393 return diffopts
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
394
10186
296a0b14a686 mq: preserve --git flag when folding patches
Patrick Mezard <pmezard@gmail.com>
parents: 10185
diff changeset
395 def patchopts(self, diffopts, *patches):
10185
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
396 """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
397 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
398 """
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
399 diffopts = diffopts.copy()
10190
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
400 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
401 for patchfn in patches:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
402 patchf = self.opener(patchfn, 'r')
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
403 # 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
404 for line in patchf:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
405 if line.startswith('diff --git'):
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
406 diffopts.git = True
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
407 break
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
408 patchf.close()
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
409 return diffopts
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
410
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
411 def join(self, *p):
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
412 return os.path.join(self.path, *p)
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
413
14574
12fba7bcb4f1 mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14573
diff changeset
414 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
415 def matchpatch(l):
10248fc845db mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10684
diff changeset
416 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
417 return l.strip() == patch
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
418 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
419 if matchpatch(l):
10248fc845db mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10684
diff changeset
420 return index
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
421 return None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
422
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
423 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
424
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
425 def parseseries(self):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
426 self.series = []
14573
d590ff1f22b2 mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14572
diff changeset
427 self.seriesguards = []
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
428 for l in self.fullseries:
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
429 h = l.find('#')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
430 if h == -1:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
431 patch = l
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
432 comment = ''
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
433 elif h == 0:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
434 continue
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
435 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
436 patch = l[:h]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
437 comment = l[h:]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
438 patch = patch.strip()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
439 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
440 if patch in self.series:
87b7ae306d54 mq: bail out if a patch appears more than once in the series file.
Brendan Cully <brendan@kublai.com>
parents: 3183
diff changeset
441 raise util.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
442 (patch, self.join(self.seriespath)))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
443 self.series.append(patch)
14573
d590ff1f22b2 mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14572
diff changeset
444 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
445
14576
668ea374f46e mq: rename check_guard to checkguard
Adrian Buehlmann <adrian@cadifra.com>
parents: 14575
diff changeset
446 def checkguard(self, guard):
6607
75b506f0e571 mq: make qselect fail properly on an empty guard
Patrick Mezard <pmezard@gmail.com>
parents: 6606
diff changeset
447 if not guard:
75b506f0e571 mq: make qselect fail properly on an empty guard
Patrick Mezard <pmezard@gmail.com>
parents: 6606
diff changeset
448 return _('guard cannot be an empty string')
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
449 bad_chars = '# \t\r\n\f'
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
450 first = guard[0]
8288
9de088320e9a mq: simpler check of first character of guard name
Simon Heimberg <simohe@besonet.ch>
parents: 8225
diff changeset
451 if first in '-+':
9de088320e9a mq: simpler check of first character of guard name
Simon Heimberg <simohe@besonet.ch>
parents: 8225
diff changeset
452 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
453 (guard, first))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
454 for c in bad_chars:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
455 if c in guard:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
456 return _('invalid character in guard %r: %r') % (guard, c)
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
457
14578
28a2646f3b81 mq: rename set_active to setactive
Adrian Buehlmann <adrian@cadifra.com>
parents: 14577
diff changeset
458 def setactive(self, guards):
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
459 for guard in guards:
14576
668ea374f46e mq: rename check_guard to checkguard
Adrian Buehlmann <adrian@cadifra.com>
parents: 14575
diff changeset
460 bad = self.checkguard(guard)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
461 if bad:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
462 raise util.Abort(bad)
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8188
diff changeset
463 guards = sorted(set(guards))
9467
4c041f1ee1b4 do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents: 9440
diff changeset
464 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
465 self.activeguards = guards
14591
b49099712d30 mq: rename guards_dirty to guardsdirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14590
diff changeset
466 self.guardsdirty = True
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
467
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
468 def active(self):
14590
dbb80f03d4ae mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14589
diff changeset
469 if self.activeguards is None:
dbb80f03d4ae mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14589
diff changeset
470 self.activeguards = []
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
471 try:
14589
7d59ee9e711b mq: rename guards_path to guardspath
Adrian Buehlmann <adrian@cadifra.com>
parents: 14588
diff changeset
472 guards = self.opener.read(self.guardspath).split()
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
473 except IOError, err:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
474 if err.errno != errno.ENOENT:
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
475 raise
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
476 guards = []
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
477 for i, guard in enumerate(guards):
14576
668ea374f46e mq: rename check_guard to checkguard
Adrian Buehlmann <adrian@cadifra.com>
parents: 14575
diff changeset
478 bad = self.checkguard(guard)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
479 if bad:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
480 self.ui.warn('%s:%d: %s\n' %
14589
7d59ee9e711b mq: rename guards_path to guardspath
Adrian Buehlmann <adrian@cadifra.com>
parents: 14588
diff changeset
481 (self.join(self.guardspath), i + 1, bad))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
482 else:
14590
dbb80f03d4ae mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14589
diff changeset
483 self.activeguards.append(guard)
dbb80f03d4ae mq: rename active_guards to activeguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14589
diff changeset
484 return self.activeguards
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
485
14577
76357276662e mq: rename set_guards to setguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14576
diff changeset
486 def setguards(self, idx, guards):
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
487 for g in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
488 if len(g) < 2:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
489 raise util.Abort(_('guard %r too short') % g)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
490 if g[0] not in '-+':
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
491 raise util.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
492 bad = self.checkguard(g[1:])
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
493 if bad:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
494 raise util.Abort(bad)
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
495 drop = self.guard_re.sub('', self.fullseries[idx])
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
496 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
497 self.parseseries()
14593
599a72895c0d mq: rename series_dirty to seriesdirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14592
diff changeset
498 self.seriesdirty = True
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
499
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
500 def pushable(self, idx):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
501 if isinstance(idx, str):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
502 idx = self.series.index(idx)
14573
d590ff1f22b2 mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14572
diff changeset
503 patchguards = self.seriesguards[idx]
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
504 if not patchguards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
505 return True, None
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
506 guards = self.active()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
507 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
508 if exactneg:
14464
00256f689f9c mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents: 14448
diff changeset
509 return False, repr(exactneg[0])
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
510 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
511 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
512 if pos:
2850
851b07ec450c mq: apply patch is any posative guard matches
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2848
diff changeset
513 if exactpos:
14464
00256f689f9c mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents: 14448
diff changeset
514 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
515 return False, ' '.join(map(repr, pos))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
516 return True, ''
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
517
14579
f7b25764d974 mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents: 14578
diff changeset
518 def explainpushable(self, idx, all_patches=False):
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
519 write = all_patches and self.ui.write or self.ui.warn
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
520 if all_patches or self.ui.verbose:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
521 if isinstance(idx, str):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
522 idx = self.series.index(idx)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
523 pushable, why = self.pushable(idx)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
524 if all_patches and pushable:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
525 if why is None:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
526 write(_('allowing %s - no guards in effect\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
527 self.series[idx])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
528 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
529 if not why:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
530 write(_('allowing %s - no matching negative guards\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
531 self.series[idx])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
532 else:
14464
00256f689f9c mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents: 14448
diff changeset
533 write(_('allowing %s - guarded by %s\n') %
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
534 (self.series[idx], why))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
535 if not pushable:
2829
05316bb57d01 mq: make guards more strict, add tests
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2828
diff changeset
536 if why:
14464
00256f689f9c mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents: 14448
diff changeset
537 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
538 (self.series[idx], why))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
539 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
540 write(_('skipping %s - no matching guards\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
541 self.series[idx])
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
542
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
543 def savedirty(self):
14594
3752b5e1f4c4 mq: rename write_list to writelist
Adrian Buehlmann <adrian@cadifra.com>
parents: 14593
diff changeset
544 def writelist(items, path):
2772
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
545 fp = self.opener(path, 'w')
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
546 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
547 fp.write("%s\n" % i)
2772
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
548 fp.close()
14592
fc94add69d9f mq: rename applied_dirty to applieddirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14591
diff changeset
549 if self.applieddirty:
14594
3752b5e1f4c4 mq: rename write_list to writelist
Adrian Buehlmann <adrian@cadifra.com>
parents: 14593
diff changeset
550 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
551 self.applieddirty = False
14593
599a72895c0d mq: rename series_dirty to seriesdirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14592
diff changeset
552 if self.seriesdirty:
14594
3752b5e1f4c4 mq: rename write_list to writelist
Adrian Buehlmann <adrian@cadifra.com>
parents: 14593
diff changeset
553 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
554 self.seriesdirty = False
14591
b49099712d30 mq: rename guards_dirty to guardsdirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14590
diff changeset
555 if self.guardsdirty:
14594
3752b5e1f4c4 mq: rename write_list to writelist
Adrian Buehlmann <adrian@cadifra.com>
parents: 14593
diff changeset
556 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
557 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
558 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
559 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
560 if qrepo:
12658
97d7ee445e98 mq: silence spurious output.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12655
diff changeset
561 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
562 self.added = []
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
563
4207
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
564 def removeundo(self, repo):
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
565 undo = repo.sjoin('undo')
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
566 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
567 return
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
568 try:
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
569 os.unlink(undo)
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
570 except OSError, inst:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
571 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
572
16634
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
573 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
574 # backup local changes in --force case
b2ca2f40c9c1 mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents: 16551
diff changeset
575 for f in sorted(files):
b2ca2f40c9c1 mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents: 16551
diff changeset
576 absf = repo.wjoin(f)
b2ca2f40c9c1 mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents: 16551
diff changeset
577 if os.path.lexists(absf):
b2ca2f40c9c1 mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents: 16551
diff changeset
578 self.ui.note(_('saving current version of %s as %s\n') %
b2ca2f40c9c1 mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents: 16551
diff changeset
579 (f, f + '.orig'))
16634
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
580 if copy:
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
581 util.copyfile(absf, absf + '.orig')
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
582 else:
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
583 util.rename(absf, absf + '.orig')
16633
b2ca2f40c9c1 mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents: 16551
diff changeset
584
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
585 def printdiff(self, repo, diffopts, node1, node2=None, files=None,
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
586 fp=None, changes=None, opts={}):
9640
9e76232fbfbe diff: add --stat for diffstat output
Brodie Rao <me+hg@dackz.net>
parents: 9599
diff changeset
587 stat = opts.get('stat')
14671
35c2cc322ba8 scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents: 14636
diff changeset
588 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
589 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
590 changes, stat, fp)
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
591
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
592 def mergeone(self, repo, mergeq, head, patch, rev, diffopts):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
593 # first try just applying the patch
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
594 (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
595 strict=True, merge=rev)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
596
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
597 if err == 0:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
598 return (err, n)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
599
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
600 if n is None:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
601 raise util.Abort(_("apply failed for patch %s") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
602
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
603 self.ui.warn(_("patch didn't work out, merging %s\n") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
604
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
605 # 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
606 hg.clean(repo, head)
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
607 self.strip(repo, [n], update=False, backup='strip')
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
608
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6668
diff changeset
609 ctx = repo[rev]
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
610 ret = hg.merge(repo, rev)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
611 if ret:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
612 raise util.Abort(_("update returned %d") % ret)
16102
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
613 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
614 if n is None:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
615 raise util.Abort(_("repo commit failed"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
616 try:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
617 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
618 except Exception:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
619 raise util.Abort(_("unable to read %s") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
620
10185
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
621 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
622 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
623 comments = str(ph)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
624 if comments:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
625 patchf.write(comments)
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
626 self.printdiff(repo, diffopts, head, n, fp=patchf)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
627 patchf.close()
4207
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
628 self.removeundo(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
629 return (0, n)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
630
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
631 def qparents(self, repo, rev=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
632 if rev is None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
633 (p1, p2) = repo.dirstate.parents()
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
634 if p2 == nullid:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
635 return p1
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
636 if not self.applied:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
637 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
638 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
639 p1, p2 = repo.changelog.parents(rev)
10680
45eb9b5dacf6 mq: simplify qparents calculation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10679
diff changeset
640 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
641 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
642 return p1
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
643
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
644 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
645 if not self.applied:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
646 # each of the patches merged in will have two parents. This
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
647 # can confuse the qrefresh, qdiff, and strip code because it
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
648 # needs to know which parent is actually in the patch queue.
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
649 # so, we insert a merge marker with only one parent. This way
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
650 # the first patch in the queue is never a merge patch
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
651 #
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
652 pname = ".hg.patches.merge.marker"
16102
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
653 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
654 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
655 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
656 self.applieddirty = True
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
657
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
658 head = self.qparents(repo)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
659
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
660 for patch in series:
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
661 patch = mergeq.lookup(patch, strict=True)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
662 if not patch:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
663 self.ui.warn(_("patch %s does not exist\n") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
664 return (1, None)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
665 pushable, reason = self.pushable(patch)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
666 if not pushable:
14579
f7b25764d974 mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents: 14578
diff changeset
667 self.explainpushable(patch, all_patches=True)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
668 continue
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
669 info = mergeq.isapplied(patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
670 if not info:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
671 self.ui.warn(_("patch %s is not applied\n") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
672 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
673 rev = info[1]
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
674 err, head = self.mergeone(repo, mergeq, head, patch, rev, diffopts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
675 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
676 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
677 self.applieddirty = True
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
678 if err:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
679 return (err, head)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
680 self.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
681 return (0, head)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
682
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
683 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
684 '''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
685 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
686 files = set()
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
687 try:
14260
00a881581400 patch: make patch()/internalpatch() always update the dirstate
Patrick Mezard <pmezard@gmail.com>
parents: 14259
diff changeset
688 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
689 files=files, eolmode=None)
14260
00a881581400 patch: make patch()/internalpatch() always update the dirstate
Patrick Mezard <pmezard@gmail.com>
parents: 14259
diff changeset
690 return (True, list(files), fuzz)
2919
b70740aefa4d Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents: 2905
diff changeset
691 except Exception, inst:
b70740aefa4d Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents: 2905
diff changeset
692 self.ui.note(str(inst) + '\n')
b70740aefa4d Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents: 2905
diff changeset
693 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
694 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
695 self.ui.traceback()
14260
00a881581400 patch: make patch()/internalpatch() always update the dirstate
Patrick Mezard <pmezard@gmail.com>
parents: 14259
diff changeset
696 return (False, list(files), False)
2796
4c39568007f9 mq: codingstyle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2795
diff changeset
697
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
698 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
699 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
700 tobackup=None, keepchanges=False):
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
701 wlock = lock = tr = None
4418
0532491f7476 MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4406
diff changeset
702 try:
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
703 wlock = repo.wlock()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
704 lock = repo.lock()
10881
a685011ed38e localrepo: add desc parameter to transaction
Steve Borho <steve@borho.org>
parents: 10873
diff changeset
705 tr = repo.transaction("qpush")
4418
0532491f7476 MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4406
diff changeset
706 try:
4970
30d4d8985dd8 transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents: 4917
diff changeset
707 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
708 strict, patchdir, merge, all_files=all_files,
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
709 tobackup=tobackup, keepchanges=keepchanges)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
710 tr.close()
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
711 self.savedirty()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
712 return ret
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
713 except AbortNoCleanup:
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
714 tr.close()
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
715 self.savedirty()
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
716 return 2, repo.dirstate.p1()
16705
c2d9ef43ff6c check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents: 16699
diff changeset
717 except: # re-raises
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
718 try:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
719 tr.abort()
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
720 finally:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
721 repo.invalidate()
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
722 repo.dirstate.invalidate()
15881
3862369cf9b9 mq: use .invalidate to cancel dirty mq state when cancelling transaction
Mads Kiilerich <mads@kiilerich.com>
parents: 15880
diff changeset
723 self.invalidate()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
724 raise
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
725 finally:
11230
5116a077c3da make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 11229
diff changeset
726 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
727 self.removeundo(repo)
4418
0532491f7476 MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4406
diff changeset
728
4970
30d4d8985dd8 transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents: 4917
diff changeset
729 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
730 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
731 tobackup=None, keepchanges=False):
16634
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
732 """returns (error, hash)
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
733
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
734 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
735 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
736 are modified by a patch.
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
737 """
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
738 # TODO unify with commands.py
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
739 if not patchdir:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
740 patchdir = self.path
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
741 err = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
742 n = None
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
743 for patchname in series:
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
744 pushable, reason = self.pushable(patchname)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
745 if not pushable:
14579
f7b25764d974 mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents: 14578
diff changeset
746 self.explainpushable(patchname, all_patches=True)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
747 continue
9111
ac3f1e6696eb mq: use ui.status when pushing and popping patches
Martin Geisler <mg@lazybytes.net>
parents: 9110
diff changeset
748 self.ui.status(_("applying %s\n") % patchname)
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
749 pf = os.path.join(patchdir, patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
750
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
751 try:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
752 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
753 except IOError:
8875
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
754 self.ui.warn(_("unable to read %s\n") % patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
755 err = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
756 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
757
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
758 message = ph.message
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
759 if not message:
12849
d966eb464888 mq: mark strings that should not be translated
Martin Geisler <mg@lazybytes.net>
parents: 12848
diff changeset
760 # 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
761 message = "imported patch %s\n" % patchname
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
762 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
763 if list:
12849
d966eb464888 mq: mark strings that should not be translated
Martin Geisler <mg@lazybytes.net>
parents: 12848
diff changeset
764 # 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
765 message.append("\nimported patch %s" % patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
766 message = '\n'.join(message)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
767
7782
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
768 if ph.haspatch:
16634
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
769 if tobackup:
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
770 touched = patchmod.changedfiles(self.ui, repo, pf)
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
771 touched = set(touched) & tobackup
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
772 if touched and keepchanges:
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
773 raise AbortNoCleanup(
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
774 _("local changes found, refresh first"))
16634
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
775 self.backup(repo, touched, copy=True)
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
776 tobackup = tobackup - touched
7782
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
777 (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
778 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
779 all_files.update(files)
7782
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
780 patcherr = not patcherr
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
781 else:
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
782 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
783 patcherr, files, fuzz = 0, [], 0
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
784
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
785 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
786 # 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
787 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
788 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
789 for f in files:
12344
b6173aee4a47 Use lexists() instead of exists() where appropriate
Patrick Mezard <pmezard@gmail.com>
parents: 12067
diff changeset
790 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
791 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
792 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
793 removed.append(f)
4904
6fd953d5faea dirstate: break update into separate functions
Matt Mackall <mpm@selenic.com>
parents: 4890
diff changeset
794 for f in removed:
6fd953d5faea dirstate: break update into separate functions
Matt Mackall <mpm@selenic.com>
parents: 4890
diff changeset
795 repo.dirstate.remove(f)
6fd953d5faea dirstate: break update into separate functions
Matt Mackall <mpm@selenic.com>
parents: 4890
diff changeset
796 for f in merged:
6fd953d5faea dirstate: break update into separate functions
Matt Mackall <mpm@selenic.com>
parents: 4890
diff changeset
797 repo.dirstate.merge(f)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
798 p1, p2 = repo.dirstate.parents()
16551
ebf6d38c9063 localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents: 16428
diff changeset
799 repo.setparents(p1, merge)
6603
41eb20cc1c02 match: remove files arg from repo.status and friends
Matt Mackall <mpm@selenic.com>
parents: 6602
diff changeset
800
14322
a90131b85fd8 scmutil: drop aliases in cmdutil for match functions
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
801 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
802 oldtip = repo['tip']
16102
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
803 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
804 force=True)
16043
74d00b5d00cc qpush: avoid trying to manage existing history (issue2218)
Matt Mackall <mpm@selenic.com>
parents: 16040
diff changeset
805 if repo['tip'] == oldtip:
74d00b5d00cc qpush: avoid trying to manage existing history (issue2218)
Matt Mackall <mpm@selenic.com>
parents: 16040
diff changeset
806 raise util.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
807 if n is None:
12850
62b334b0dfdf mq: expand 'repo' -> 'repository' in error message
Martin Geisler <mg@lazybytes.net>
parents: 12849
diff changeset
808 raise util.Abort(_("repository commit failed"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
809
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
810 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
811 self.applied.append(statusentry(n, patchname))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
812
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
813 if patcherr:
7782
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
814 self.ui.warn(_("patch failed, rejects left in working dir\n"))
8875
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
815 err = 2
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
816 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
817
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
818 if fuzz and strict:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
819 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
820 err = 3
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
821 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
822 return (err, n)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
823
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
824 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
825 if not keep:
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
826 r = self.qrepo()
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
827 if r:
14435
5f6090e559fa context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents: 14434
diff changeset
828 r[None].forget(patches)
5f6090e559fa context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents: 14434
diff changeset
829 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
830 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
831 os.unlink(self.join(p))
6f62e005781d mq: don't fail when removing a patch without patch file from series file
Mads Kiilerich <mads@kiilerich.com>
parents: 18054
diff changeset
832 except OSError, inst:
6f62e005781d mq: don't fail when removing a patch without patch file from series file
Mads Kiilerich <mads@kiilerich.com>
parents: 18054
diff changeset
833 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
834 raise
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
835
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
836 qfinished = []
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
837 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
838 qfinished = self.applied[:numrevs]
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
839 del self.applied[:numrevs]
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
840 self.applieddirty = True
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
841
14010
d7b4d421b56c mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 13970
diff changeset
842 unknown = []
d7b4d421b56c mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 13970
diff changeset
843
14574
12fba7bcb4f1 mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14573
diff changeset
844 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
845 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
846 if i is not None:
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
847 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
848 else:
d7b4d421b56c mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 13970
diff changeset
849 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
850
d7b4d421b56c mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 13970
diff changeset
851 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
852 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
853 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
854 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
855 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
856 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
857 else:
d7b4d421b56c mq: prevent traceback when qfinish patches not in series.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 13970
diff changeset
858 msg = _('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
859 raise util.Abort(''.join(msg % p 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
860
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
861 self.parseseries()
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
862 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
863 return [entry.node for entry in qfinished]
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
864
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
865 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
866 firstrev = repo[self.applied[0].node].rev()
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
867 patches = []
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
868 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
869
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
870 if rev < firstrev:
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
871 raise util.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
872
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
873 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
874 base = self.applied[i].node
8832
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
875 if ctx.node() != base:
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
876 msg = _('cannot delete revision %d above applied patches')
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
877 raise util.Abort(msg % rev)
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
878
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
879 patch = self.applied[i].name
8832
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
880 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
881 if ctx.description() == fmt % patch:
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
882 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
883 repo.ui.status(msg % patch)
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
884 break
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
885
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
886 patches.append(patch)
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
887 return patches
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
888
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
889 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
890 # 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
891 # executed before we remove the patches.
16657
b6081c2c4647 phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents: 16656
diff changeset
892 repo._phasecache
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
893 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
894 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
895 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
896 # 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
897 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
898 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
899 if oldqbase.phase() > tphase and oldqbase.p1().phase() <= tphase:
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
900 phases.advanceboundary(repo, tphase, qfinished)
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
901
3088
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3087
diff changeset
902 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
903 if not patches and not opts.get('rev'):
4737
2ececafa5859 mq: more qdelete help text tweaks
Brendan Cully <brendan@kublai.com>
parents: 4736
diff changeset
904 raise util.Abort(_('qdelete requires at least one revision or '
2ececafa5859 mq: more qdelete help text tweaks
Brendan Cully <brendan@kublai.com>
parents: 4736
diff changeset
905 'patch name'))
4736
04b2c1e27c26 mq: require patch argument or revision for qdelete
Brendan Cully <brendan@kublai.com>
parents: 4730
diff changeset
906
11365
c3d7daa0928e mq: make 'qdelete <patchidx>' work again.
Greg Ward <greg-hg@gerg.ca>
parents: 11327
diff changeset
907 realpatches = []
2905
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
908 for patch in patches:
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
909 patch = self.lookup(patch, strict=True)
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
910 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
911 if info:
2905
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
912 raise util.Abort(_("cannot delete applied patch %s") % patch)
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
913 if patch not in self.series:
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
914 raise util.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
915 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
916 realpatches.append(patch)
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
917
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
918 numrevs = 0
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
919 if opts.get('rev'):
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
920 if not self.applied:
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
921 raise util.Abort(_('no patches applied'))
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14298
diff changeset
922 revs = scmutil.revrange(repo, opts.get('rev'))
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
923 if len(revs) > 1 and revs[0] > revs[1]:
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
924 revs.reverse()
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
925 revpatches = self._revpatches(repo, revs)
11365
c3d7daa0928e mq: make 'qdelete <patchidx>' work again.
Greg Ward <greg-hg@gerg.ca>
parents: 11327
diff changeset
926 realpatches += revpatches
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
927 numrevs = len(revpatches)
2905
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
928
11365
c3d7daa0928e mq: make 'qdelete <patchidx>' work again.
Greg Ward <greg-hg@gerg.ca>
parents: 11327
diff changeset
929 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
930
14581
da40ee1adc2b mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents: 14580
diff changeset
931 def checktoppatch(self, repo):
18343
cfa731b45b75 mq: checktoppatch should only check if p1 is qtip
Mads Kiilerich <mads@kiilerich.com>
parents: 18342
diff changeset
932 '''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
933 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
934 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
935 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
936 if repo.dirstate.p1() != top:
5432
bfbd9b954315 mq: clarify queue top message
Matt Mackall <mpm@selenic.com>
parents: 5336
diff changeset
937 raise util.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
938 return top, patch
99d285ac5da4 mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents: 10190
diff changeset
939 return None, None
99d285ac5da4 mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents: 10190
diff changeset
940
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
941 def checksubstate(self, repo, baserev=None):
13174
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
942 '''return list of subrepos at a different revision than substate.
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
943 Abort if any subrepos have uncommitted changes.'''
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
944 inclsubs = []
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
945 wctx = repo[None]
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
946 if baserev:
54da604fefee mq: check subrepo synchronizations against parent of workdir or other appropriate context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17152
diff changeset
947 bctx = repo[baserev]
54da604fefee mq: check subrepo synchronizations against parent of workdir or other appropriate context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17152
diff changeset
948 else:
54da604fefee mq: check subrepo synchronizations against parent of workdir or other appropriate context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17152
diff changeset
949 bctx = wctx.parents()[0]
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18343
diff changeset
950 for s in sorted(wctx.substate):
13174
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
951 if wctx.sub(s).dirty(True):
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
952 raise util.Abort(
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
953 _("uncommitted changes in subrepository %s") % s)
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
954 elif s not in bctx.substate or bctx.sub(s).dirty():
13174
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
955 inclsubs.append(s)
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
956 return inclsubs
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
957
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
958 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
959 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
960 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
961 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
962 # 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
963 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
964 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
965 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
966 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
967 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
968 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
969
14256
d04ba50e104d mq: allow to qpop/push with a dirty working copy (issue2780)
Idan Kamara <idankk86@gmail.com>
parents: 14241
diff changeset
970 def localchangesfound(self, refresh=True):
d04ba50e104d mq: allow to qpop/push with a dirty working copy (issue2780)
Idan Kamara <idankk86@gmail.com>
parents: 14241
diff changeset
971 if refresh:
d04ba50e104d mq: allow to qpop/push with a dirty working copy (issue2780)
Idan Kamara <idankk86@gmail.com>
parents: 14241
diff changeset
972 raise util.Abort(_("local changes found, refresh first"))
d04ba50e104d mq: allow to qpop/push with a dirty working copy (issue2780)
Idan Kamara <idankk86@gmail.com>
parents: 14241
diff changeset
973 else:
d04ba50e104d mq: allow to qpop/push with a dirty working copy (issue2780)
Idan Kamara <idankk86@gmail.com>
parents: 14241
diff changeset
974 raise util.Abort(_("local changes found"))
d04ba50e104d mq: allow to qpop/push with a dirty working copy (issue2780)
Idan Kamara <idankk86@gmail.com>
parents: 14241
diff changeset
975
14583
28f87e14d923 mq: rename check_localchanges to checklocalchanges
Adrian Buehlmann <adrian@cadifra.com>
parents: 14582
diff changeset
976 def checklocalchanges(self, repo, force=False, refresh=True):
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
977 m, a, r, d = repo.status()[:4]
10372
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
978 if (m or a or r or d) and not force:
14256
d04ba50e104d mq: allow to qpop/push with a dirty working copy (issue2780)
Idan Kamara <idankk86@gmail.com>
parents: 14241
diff changeset
979 self.localchangesfound(refresh)
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
980 return m, a, r, d
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
981
14051
2b1226693c70 mq: add '.' and '..' to list of forbidden patch names
Idan Kamara <idankk86@gmail.com>
parents: 13791
diff changeset
982 _reserved = ('series', 'status', 'guards', '.', '..')
14584
3343a74eea4e mq: rename check_reserved_name to checkreservedname
Adrian Buehlmann <adrian@cadifra.com>
parents: 14583
diff changeset
983 def checkreservedname(self, name):
14054
3c616f512a5b mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents: 14052
diff changeset
984 if name in self._reserved:
5981
ca2af0c81c9a mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5980
diff changeset
985 raise util.Abort(_('"%s" cannot be used as the name of a patch')
ca2af0c81c9a mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5980
diff changeset
986 % name)
14054
3c616f512a5b mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents: 14052
diff changeset
987 for prefix in ('.hg', '.mq'):
3c616f512a5b mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents: 14052
diff changeset
988 if name.startswith(prefix):
3c616f512a5b mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents: 14052
diff changeset
989 raise util.Abort(_('patch name cannot begin with "%s"')
3c616f512a5b mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents: 14052
diff changeset
990 % prefix)
3c616f512a5b mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents: 14052
diff changeset
991 for c in ('#', ':'):
3c616f512a5b mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents: 14052
diff changeset
992 if c in name:
3c616f512a5b mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents: 14052
diff changeset
993 raise util.Abort(_('"%s" cannot be used in the name of a patch')
3c616f512a5b mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents: 14052
diff changeset
994 % c)
3c616f512a5b mq: be more explicit on invalid patch name message
Idan Kamara <idankk86@gmail.com>
parents: 14052
diff changeset
995
14422
2e77525e52d9 mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents: 14396
diff changeset
996 def checkpatchname(self, name, force=False):
14584
3343a74eea4e mq: rename check_reserved_name to checkreservedname
Adrian Buehlmann <adrian@cadifra.com>
parents: 14583
diff changeset
997 self.checkreservedname(name)
14422
2e77525e52d9 mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents: 14396
diff changeset
998 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
999 if os.path.isdir(self.join(name)):
2e77525e52d9 mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents: 14396
diff changeset
1000 raise util.Abort(_('"%s" already exists as a directory')
2e77525e52d9 mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents: 14396
diff changeset
1001 % name)
2e77525e52d9 mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents: 14396
diff changeset
1002 else:
2e77525e52d9 mq: wrap patch file name checks in a function
Idan Kamara <idankk86@gmail.com>
parents: 14396
diff changeset
1003 raise util.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
1004
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1005 def checkkeepchanges(self, keepchanges, force):
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1006 if force and keepchanges:
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1007 raise util.Abort(_('cannot use both --force and --keep-changes'))
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
1008
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1009 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
1010 """options:
fd3cba5e73ae mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents: 7142
diff changeset
1011 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
1012 """
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
1013 msg = opts.get('msg')
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
1014 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
1015 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
1016 if date:
989467e8e3a9 Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 6120
diff changeset
1017 date = util.parsedate(date)
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
1018 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
1019 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
1020 self.checkpatchname(patchfn)
14582
a6467dfbe5dc mq: rename check_substate to checksubstate
Adrian Buehlmann <adrian@cadifra.com>
parents: 14581
diff changeset
1021 inclsubs = self.checksubstate(repo)
13174
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
1022 if inclsubs:
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
1023 inclsubs.append('.hgsubstate')
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
1024 substatestate = repo.dirstate['.hgsubstate']
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
1025 if opts.get('include') or opts.get('exclude') or pats:
13174
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
1026 if inclsubs:
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
1027 pats = list(pats or []) + inclsubs
14671
35c2cc322ba8 scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents: 14636
diff changeset
1028 match = scmutil.match(repo[None], pats, opts)
7161
b420ef2c812b mq: abort qnew -f if any file in an explicit list cannot be read
Brendan Cully <brendan@kublai.com>
parents: 7160
diff changeset
1029 # 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
1030 def badfn(f, msg):
13174
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
1031 if f != '.hgsubstate': # .hgsubstate is auto-created
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
1032 raise util.Abort('%s: %s' % (f, msg))
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
1033 match.bad = 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
1034 changes = repo.status(match=match)
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
1035 m, a, r, d = changes[:4]
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
1036 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
1037 changes = self.checklocalchanges(repo, force=True)
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
1038 m, a, r, d = changes
16365
5d61e007d957 mq: use exact matching in the second dirstate walking for efficiency of 'qnew'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 16318
diff changeset
1039 match = scmutil.matchfiles(repo, m + a + r + inclsubs)
10372
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
1040 if len(repo[None].parents()) > 1:
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
1041 raise util.Abort(_('cannot manage merge changesets'))
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
1042 commitfiles = m + a + r
14581
da40ee1adc2b mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents: 14580
diff changeset
1043 self.checktoppatch(repo)
14585
74bf9c84cfd0 mq: rename full_series_end to fullseriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14584
diff changeset
1044 insert = self.fullseriesend()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1045 wlock = repo.wlock()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1046 try:
12878
1634287b6ab1 qnew: give better feedback when doing 'hg qnew foo/' (issue2464)
Martin Geisler <mg@aragost.com>
parents: 12875
diff changeset
1047 try:
1634287b6ab1 qnew: give better feedback when doing 'hg qnew foo/' (issue2464)
Martin Geisler <mg@aragost.com>
parents: 12875
diff changeset
1048 # 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
1049 p = self.opener(patchfn, "w")
1634287b6ab1 qnew: give better feedback when doing 'hg qnew foo/' (issue2464)
Martin Geisler <mg@aragost.com>
parents: 12875
diff changeset
1050 except IOError, e:
1634287b6ab1 qnew: give better feedback when doing 'hg qnew foo/' (issue2464)
Martin Geisler <mg@aragost.com>
parents: 12875
diff changeset
1051 raise util.Abort(_('cannot write patch "%s": %s')
1634287b6ab1 qnew: give better feedback when doing 'hg qnew foo/' (issue2464)
Martin Geisler <mg@aragost.com>
parents: 12875
diff changeset
1052 % (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
1053 try:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1054 if self.plainmode:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1055 if user:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1056 p.write("From: " + user + "\n")
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1057 if not date:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1058 p.write("\n")
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1059 if date:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1060 p.write("Date: %d %d\n\n" % date)
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1061 else:
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1062 p.write("# HG changeset patch\n")
10413
e433002acb05 fix up a bunch of check-code warnings
Matt Mackall <mpm@selenic.com>
parents: 10410
diff changeset
1063 p.write("# Parent "
13878
a8d13ee0ce68 misc: replace .parents()[0] with p1()
Matt Mackall <mpm@selenic.com>
parents: 13793
diff changeset
1064 + hex(repo[None].p1().node()) + "\n")
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1065 if user:
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1066 p.write("# User " + user + "\n")
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1067 if date:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1068 p.write("# Date %s %s\n\n" % date)
14943
d3bb825ddae3 globally: use safehasattr(x, '__call__') instead of hasattr(x, '__call__')
Augie Fackler <durin42@gmail.com>
parents: 14732
diff changeset
1069 if util.safehasattr(msg, '__call__'):
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1070 msg = msg()
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1071 commitmsg = msg and msg or ("[mq]: %s" % patchfn)
16102
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
1072 n = newcommit(repo, None, commitmsg, user, date, match=match,
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
1073 force=True)
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
1074 if n is None:
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1075 raise util.Abort(_("repo commit failed"))
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1076 try:
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
1077 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
1078 self.applied.append(statusentry(n, patchfn))
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
1079 self.parseseries()
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1080 self.seriesdirty = True
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1081 self.applieddirty = True
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1082 if msg:
7614
f9fcb189c8e2 mq: make qnew patch format consistent with qrefresh (issue1457)
Bernhard Leiner <bleiner@gmail.com>
parents: 7568
diff changeset
1083 msg = msg + "\n\n"
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1084 p.write(msg)
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1085 if commitfiles:
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1086 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
1087 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
1088 self.putsubstate2changes(substatestate, changes)
14241
45f7aa35f2fd mq: don't hide the patch module
Idan Kamara <idankk86@gmail.com>
parents: 14239
diff changeset
1089 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
1090 changes=changes, opts=diffopts)
7308
b6f5490effbf patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7307
diff changeset
1091 for chunk in chunks:
b6f5490effbf patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7307
diff changeset
1092 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
1093 p.close()
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1094 r = self.qrepo()
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1095 if r:
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11302
diff changeset
1096 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
1097 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
1098 repo.rollback()
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1099 raise
7280
810ca383da9c remove unused variables
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7271
diff changeset
1100 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
1101 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
1102 try:
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
1103 os.unlink(patchpath)
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16687
diff changeset
1104 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
1105 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
1106 raise
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1107 self.removeundo(repo)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1108 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
1109 release(wlock)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1110
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
1111 def strip(self, repo, revs, update=True, backup="all", force=None):
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1112 wlock = lock = None
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1113 try:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1114 wlock = repo.wlock()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1115 lock = repo.lock()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1116
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1117 if update:
14583
28f87e14d923 mq: rename check_localchanges to checklocalchanges
Adrian Buehlmann <adrian@cadifra.com>
parents: 14582
diff changeset
1118 self.checklocalchanges(repo, force=force, refresh=False)
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
1119 urev = self.qparents(repo, revs[0])
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1120 hg.clean(repo, urev)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1121 repo.dirstate.write()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1122
16252
cf17e76be4dd strip: enhance repair.strip to receive a list of nodes (issue3299)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 16231
diff changeset
1123 repair.strip(self.ui, repo, revs, backup)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1124 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
1125 release(lock, wlock)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1126
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1127 def isapplied(self, patch):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1128 """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
1129 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
1130 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
1131 return (i, a.node, a.name)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1132 return None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1133
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
1134 # 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
1135 # variations. If strict is passed, we try only #1
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1136 #
15256
8caf7a757afa mq: fix corner cases for handling of patch 0 in qselect
Mads Kiilerich <mads@kiilerich.com>
parents: 15148
diff changeset
1137 # 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
1138 # 2) a unique substring of the patch name was given
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1139 # 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
1140 def lookup(self, patch, strict=False):
14595
f2c9d4091e0e mq: rename partial_name to partialname
Adrian Buehlmann <adrian@cadifra.com>
parents: 14594
diff changeset
1141 def partialname(s):
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1142 if s in self.series:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1143 return s
2765
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
1144 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
1145 if len(matches) > 1:
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
1146 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
1147 for m in matches:
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
1148 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
1149 return None
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
1150 if matches:
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
1151 return matches[0]
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
1152 if self.series and self.applied:
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1153 if s == 'qtip':
18054
b35e3364f94a check-code: there must also be whitespace between ')' and operator
Mads Kiilerich <madski@unity3d.com>
parents: 18011
diff changeset
1154 return self.series[self.seriesend(True) - 1]
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1155 if s == 'qbase':
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1156 return self.series[0]
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1157 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
1158
12df451ce205 mq: don't warn about ambiguous patch name when using patch index (issue1439)
Jason Orendorff <jorendorff@mozilla.com>
parents: 7566
diff changeset
1159 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
1160 return patch
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1161
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
1162 if not os.path.isfile(self.join(patch)):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1163 try:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1164 sno = int(patch)
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1165 except (ValueError, OverflowError):
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1166 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1167 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
1168 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
1169 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
1170
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1171 if not strict:
14595
f2c9d4091e0e mq: rename partial_name to partialname
Adrian Buehlmann <adrian@cadifra.com>
parents: 14594
diff changeset
1172 res = partialname(patch)
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1173 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1174 return res
3082
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3076
diff changeset
1175 minus = patch.rfind('-')
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3076
diff changeset
1176 if minus >= 0:
14595
f2c9d4091e0e mq: rename partial_name to partialname
Adrian Buehlmann <adrian@cadifra.com>
parents: 14594
diff changeset
1177 res = partialname(patch[:minus])
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1178 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1179 i = self.series.index(res)
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1180 try:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1181 off = int(patch[minus + 1:] or 1)
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1182 except (ValueError, OverflowError):
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1183 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1184 else:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1185 if i - off >= 0:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1186 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
1187 plus = patch.rfind('+')
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3076
diff changeset
1188 if plus >= 0:
14595
f2c9d4091e0e mq: rename partial_name to partialname
Adrian Buehlmann <adrian@cadifra.com>
parents: 14594
diff changeset
1189 res = partialname(patch[:plus])
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1190 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1191 i = self.series.index(res)
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1192 try:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1193 off = int(patch[plus + 1:] or 1)
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1194 except (ValueError, OverflowError):
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1195 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1196 else:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1197 if i + off < len(self.series):
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
1198 return self.series[i + off]
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
1199 raise util.Abort(_("patch %s not in series") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1200
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
1201 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
1202 all=False, move=False, exact=False, nobackup=False,
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1203 keepchanges=False):
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1204 self.checkkeepchanges(keepchanges, force)
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
1205 diffopts = self.diffopts()
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1206 wlock = repo.wlock()
8795
51c29aec0b75 mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents: 8778
diff changeset
1207 try:
10362
2e3ec7ef5349 mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10361
diff changeset
1208 heads = []
2e3ec7ef5349 mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10361
diff changeset
1209 for b, ls in repo.branchmap().iteritems():
2e3ec7ef5349 mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10361
diff changeset
1210 heads += ls
2e3ec7ef5349 mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10361
diff changeset
1211 if not heads:
2e3ec7ef5349 mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10361
diff changeset
1212 heads = [nullid]
13878
a8d13ee0ce68 misc: replace .parents()[0] with p1()
Matt Mackall <mpm@selenic.com>
parents: 13793
diff changeset
1213 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
1214 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
1215
8795
51c29aec0b75 mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents: 8778
diff changeset
1216 if not self.series:
51c29aec0b75 mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents: 8778
diff changeset
1217 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
1218 return 0
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1219
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1220 # 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
1221 # 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
1222 # 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
1223 # go backwards with qpush)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1224 if patch:
15257
a8555f9908d1 mq: cleanup of lookup - handling of None is not relevant
Mads Kiilerich <mads@kiilerich.com>
parents: 15256
diff changeset
1225 patch = self.lookup(patch)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1226 info = self.isapplied(patch)
13369
69238d0ca60f mq: catch attempt to qpush to an earlier patch (issue2587)
Afuna <afunamatata@gmail.com>
parents: 13224
diff changeset
1227 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
1228 self.ui.warn(
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1229 _('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
1230 return 0
13369
69238d0ca60f mq: catch attempt to qpush to an earlier patch (issue2587)
Afuna <afunamatata@gmail.com>
parents: 13224
diff changeset
1231
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1232 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
1233 if pushable:
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
1234 if self.series.index(patch) < self.seriesend():
13369
69238d0ca60f mq: catch attempt to qpush to an earlier patch (issue2587)
Afuna <afunamatata@gmail.com>
parents: 13224
diff changeset
1235 raise util.Abort(
69238d0ca60f mq: catch attempt to qpush to an earlier patch (issue2587)
Afuna <afunamatata@gmail.com>
parents: 13224
diff changeset
1236 _("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
1237 else:
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1238 if reason:
14464
00256f689f9c mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
Martin Geisler <mg@aragost.com>
parents: 14448
diff changeset
1239 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
1240 else:
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1241 reason = _('no matching guards')
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1242 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
1243 return 1
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1244 elif all:
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1245 patch = self.series[-1]
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1246 if self.isapplied(patch):
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1247 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
1248 return 0
4100
c30c922f907a Modify qpush/qpop idempotent operations to return success
Ben Thomas <bthomas@virtualiron.com>
parents: 4099
diff changeset
1249
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1250 # 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
1251 # 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
1252 # 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
1253 # 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
1254 # 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
1255 start = self.seriesend()
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1256 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
1257 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
1258 return 1
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1259 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
1260 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
1261
13033
026053f691a4 mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents: 13031
diff changeset
1262 if exact:
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1263 if keepchanges:
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
1264 raise util.Abort(
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1265 _("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
1266 if move:
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
1267 raise util.Abort(_('cannot use --exact and --move '
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
1268 'together'))
13033
026053f691a4 mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents: 13031
diff changeset
1269 if self.applied:
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
1270 raise util.Abort(_('cannot push --exact with applied '
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
1271 'patches'))
13033
026053f691a4 mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents: 13031
diff changeset
1272 root = self.series[start]
026053f691a4 mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents: 13031
diff changeset
1273 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
1274 if not target:
16231
ce292f1379ba i18n: fix all remaining uses of % inside _()
Matt Mackall <mpm@selenic.com>
parents: 16188
diff changeset
1275 raise util.Abort(
ce292f1379ba i18n: fix all remaining uses of % inside _()
Matt Mackall <mpm@selenic.com>
parents: 16188
diff changeset
1276 _("%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
1277 if not repo[target] == repo['.']:
026053f691a4 mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents: 13031
diff changeset
1278 hg.update(repo, target)
026053f691a4 mq: add an '-e/--exact' option to qpush
Steve Losh <steve@stevelosh.com>
parents: 13031
diff changeset
1279
11064
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
1280 if move:
11715
4f9dfb54c8b5 qpush --move: move the right patch even with comment lines
Gilles Moris <gilles.moris@free.fr>
parents: 11709
diff changeset
1281 if not patch:
13075
d73c3034deee coding style: fix gratuitous whitespace after Python keywords
Thomas Arendsen Hein <thomas@jtah.de>
parents: 13036
diff changeset
1282 raise util.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
1283 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
1284 # 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
1285 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
1286 break
7ee8aa662937 mq: fix qpush --move with comments in series file between applied patches
Mads Kiilerich <mads@kiilerich.com>
parents: 16290
diff changeset
1287 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
1288 # 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
1289 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
1290 break
16303
7ee8aa662937 mq: fix qpush --move with comments in series file between applied patches
Mads Kiilerich <mads@kiilerich.com>
parents: 16290
diff changeset
1291 index = fullstart + i
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
1292 assert index < len(self.fullseries)
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
1293 fullpatch = self.fullseries[index]
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
1294 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
1295 self.fullseries.insert(fullstart, fullpatch)
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
1296 self.parseseries()
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1297 self.seriesdirty = True
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1298
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1299 self.applieddirty = True
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1300 if start > 0:
14581
da40ee1adc2b mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents: 14580
diff changeset
1301 self.checktoppatch(repo)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1302 if not patch:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1303 patch = self.series[start]
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1304 end = start + 1
4418
0532491f7476 MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4406
diff changeset
1305 else:
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1306 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
1307
16634
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
1308 tobackup = set()
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1309 if (not nobackup and force) or keepchanges:
16634
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
1310 m, a, r, d = self.checklocalchanges(repo, force=True)
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1311 if keepchanges:
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
1312 tobackup.update(m + a + r + d)
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
1313 else:
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
1314 tobackup.update(m + a)
16634
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
1315
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1316 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
1317 all_files = set()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1318 try:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1319 if mergeq:
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
1320 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
1321 else:
16634
435375cc0ca0 mq: backup local changes in qpush --force
Patrick Mezard <patrick@mezard.eu>
parents: 16633
diff changeset
1322 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
1323 tobackup=tobackup, keepchanges=keepchanges)
16705
c2d9ef43ff6c check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents: 16699
diff changeset
1324 except: # re-raises
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1325 self.ui.warn(_('cleaning up working directory...'))
13878
a8d13ee0ce68 misc: replace .parents()[0] with p1()
Matt Mackall <mpm@selenic.com>
parents: 13793
diff changeset
1326 node = repo.dirstate.p1()
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1327 hg.revert(repo, node, None)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1328 # 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
1329 # 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
1330 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
1331 if f not in repo.dirstate:
18143
242d2f4ec01c util: fold ENOENT check into unlinkpath, controlled by new ignoremissing flag
Mads Kiilerich <madski@unity3d.com>
parents: 18112
diff changeset
1332 util.unlinkpath(repo.wjoin(f), ignoremissing=True)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1333 self.ui.warn(_('done\n'))
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1334 raise
8875
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
1335
9590
07a62819b309 mq: fix traceback for qpush inexistant-patch with no patch applied
Benoit Allard <benoit@aeteurope.nl>
parents: 9588
diff changeset
1336 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
1337 return ret[0]
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1338 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
1339 if ret[0] and ret[0] > 1:
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
1340 msg = _("errors during apply, please fix and refresh %s\n")
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
1341 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
1342 else:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1343 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
1344 return ret[0]
8875
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
1345
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1346 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
1347 wlock.release()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1348
16635
9d76320d8b99 mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents: 16634
diff changeset
1349 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
1350 nobackup=False, keepchanges=False):
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1351 self.checkkeepchanges(keepchanges, force)
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1352 wlock = repo.wlock()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1353 try:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1354 if patch:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1355 # index, rev, patch
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1356 info = self.isapplied(patch)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1357 if not info:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1358 patch = self.lookup(patch)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1359 info = self.isapplied(patch)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1360 if not info:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1361 raise util.Abort(_("patch %s is not applied") % patch)
4100
c30c922f907a Modify qpush/qpop idempotent operations to return success
Ben Thomas <bthomas@virtualiron.com>
parents: 4099
diff changeset
1362
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
1363 if not self.applied:
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1364 # 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
1365 # 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
1366 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
1367 return not all
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1368
7620
fbfd92d51540 mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7619
diff changeset
1369 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
1370 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
1371 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
1372 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
1373 else:
fbfd92d51540 mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7619
diff changeset
1374 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
1375
fbfd92d51540 mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7619
diff changeset
1376 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
1377 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
1378 return
fbfd92d51540 mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7619
diff changeset
1379
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1380 if not update:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1381 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
1382 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
1383 for p in parents:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1384 if p in rr:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1385 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
1386 update = True
7621
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1387 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
1388 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
1389 needupdate = False
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1390 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
1391 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
1392 needupdate = True
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1393 break
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1394 update = needupdate
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1395
16633
b2ca2f40c9c1 mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents: 16551
diff changeset
1396 tobackup = set()
b2ca2f40c9c1 mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents: 16551
diff changeset
1397 if update:
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1398 m, a, r, d = self.checklocalchanges(
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1399 repo, force=force or keepchanges)
16653
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
1400 if force:
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
1401 if not nobackup:
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
1402 tobackup.update(m + a)
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1403 elif keepchanges:
16653
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
1404 tobackup.update(m + a + r + d)
14732
e9ed3506f066 backout of d04ba50e104d: allow to qpop/push with a dirty working copy
Idan Kamara <idankk86@gmail.com>
parents: 14671
diff changeset
1405
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1406 self.applieddirty = True
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1407 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
1408 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
1409
7621
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1410 try:
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1411 heads = repo.changelog.heads(rev)
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
1412 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
1413 node = short(rev)
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1414 raise util.Abort(_('trying to pop unknown node %s') % node)
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1415
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
1416 if heads != [self.applied[-1].node]:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1417 raise util.Abort(_("popping would remove a revision not "
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1418 "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
1419 if not repo[self.applied[-1].node].mutable():
140b6282ac79 mq: prevent rewriting operation on public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16043
diff changeset
1420 raise util.Abort(
140b6282ac79 mq: prevent rewriting operation on public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16043
diff changeset
1421 _("popping would remove an immutable revision"),
140b6282ac79 mq: prevent rewriting operation on public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16043
diff changeset
1422 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
1423
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1424 # 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
1425 # form of hg.update.
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1426 if update:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1427 qp = self.qparents(repo, rev)
10663
85e81d9bfb7a mq: simplify and use context API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10662
diff changeset
1428 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
1429 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
1430 if d:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1431 raise util.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
1432
16653
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
1433 tobackup = set(a + m + r) & tobackup
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
1434 if keepchanges and tobackup:
16653
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
1435 self.localchangesfound()
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
1436 self.backup(repo, tobackup)
16633
b2ca2f40c9c1 mq: backup local changes in qpop --force (issue3433)
Patrick Mezard <patrick@mezard.eu>
parents: 16551
diff changeset
1437
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1438 for f in a:
18143
242d2f4ec01c util: fold ENOENT check into unlinkpath, controlled by new ignoremissing flag
Mads Kiilerich <madski@unity3d.com>
parents: 18112
diff changeset
1439 util.unlinkpath(repo.wjoin(f), ignoremissing=True)
14434
cc8c09855d19 dirstate: rename forget to drop
Matt Mackall <mpm@selenic.com>
parents: 14424
diff changeset
1440 repo.dirstate.drop(f)
10048
46de82e50790 mq: qpop: remove added files before re-adding removed files
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9874
diff changeset
1441 for f in m + r:
10663
85e81d9bfb7a mq: simplify and use context API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10662
diff changeset
1442 fctx = ctx[f]
85e81d9bfb7a mq: simplify and use context API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10662
diff changeset
1443 repo.wwrite(f, fctx.data(), fctx.flags())
10048
46de82e50790 mq: qpop: remove added files before re-adding removed files
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9874
diff changeset
1444 repo.dirstate.normal(f)
16551
ebf6d38c9063 localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents: 16428
diff changeset
1445 repo.setparents(qp, nullid)
9110
561ff8d9e4f0 mq: qpop now tells which patches are popped
Mads Kiilerich <mads@kiilerich.com>
parents: 9067
diff changeset
1446 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
1447 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
1448 del self.applied[start:end]
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
1449 self.strip(repo, [rev], update=False, backup='strip')
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
1450 if self.applied:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1451 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
1452 else:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1453 self.ui.write(_("patch queue now empty\n"))
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1454 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
1455 wlock.release()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1456
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
1457 def diff(self, repo, pats, opts):
14581
da40ee1adc2b mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents: 14580
diff changeset
1458 top, patch = self.checktoppatch(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1459 if not top:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1460 self.ui.write(_("no patches applied\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1461 return
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1462 qp = self.qparents(repo, top)
9857
24bc6e414610 diff: change --inverse to --reverse
Martin Geisler <mg@lazybytes.net>
parents: 9824
diff changeset
1463 if opts.get('reverse'):
9725
3f522d2fa633 diff: add --inverse option
Yannick Gingras <ygingras@ygingras.net>
parents: 9642
diff changeset
1464 node1, node2 = None, qp
3f522d2fa633 diff: add --inverse option
Yannick Gingras <ygingras@ygingras.net>
parents: 9642
diff changeset
1465 else:
3f522d2fa633 diff: add --inverse option
Yannick Gingras <ygingras@ygingras.net>
parents: 9642
diff changeset
1466 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
1467 diffopts = self.diffopts(opts, patch)
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
1468 self.printdiff(repo, diffopts, node1, node2, files=pats, opts=opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1469
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1470 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
1471 if not self.applied:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1472 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
1473 return 1
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1474 msg = opts.get('msg', '').rstrip()
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1475 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
1476 newdate = opts.get('date')
989467e8e3a9 Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 6120
diff changeset
1477 if newdate:
989467e8e3a9 Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 6120
diff changeset
1478 newdate = '%d %d' % util.parsedate(newdate)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1479 wlock = repo.wlock()
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1480
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1481 try:
14581
da40ee1adc2b mq: rename check_toppatch to checktoppatch
Adrian Buehlmann <adrian@cadifra.com>
parents: 14580
diff changeset
1482 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
1483 (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
1484 if repo.changelog.heads(top) != [top]:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1485 raise util.Abort(_("cannot refresh 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
1486 if not repo[top].mutable():
140b6282ac79 mq: prevent rewriting operation on public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16043
diff changeset
1487 raise util.Abort(_("cannot refresh immutable revision"),
140b6282ac79 mq: prevent rewriting operation on public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16043
diff changeset
1488 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
1489
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
1490 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
1491 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
1492
54da604fefee mq: check subrepo synchronizations against parent of workdir or other appropriate context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17152
diff changeset
1493 inclsubs = self.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
1494 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
1495 inclsubs.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
1496 substatestate = repo.dirstate['.hgsubstate']
13174
be7e8e9bc5e5 mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents: 13173
diff changeset
1497
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1498 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
1499 diffopts = self.diffopts({'git': opts.get('git')}, patchfn)
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1500 if msg:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1501 ph.setmessage(msg)
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
1502 if newuser:
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1503 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
1504 if newdate:
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1505 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
1506 ph.setparent(hex(patchparent))
5180
5bbbd1f1d586 mq: truncate patch just before rewriting header
Brendan Cully <brendan@kublai.com>
parents: 4930
diff changeset
1507
7400
409a9b442308 mq: use atomictempfiles during patch refresh
Brendan Cully <brendan@kublai.com>
parents: 7399
diff changeset
1508 # only commit new patch when write is complete
409a9b442308 mq: use atomictempfiles during patch refresh
Brendan Cully <brendan@kublai.com>
parents: 7399
diff changeset
1509 patchf = self.opener(patchfn, 'w', atomictemp=True)
409a9b442308 mq: use atomictempfiles during patch refresh
Brendan Cully <brendan@kublai.com>
parents: 7399
diff changeset
1510
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1511 comments = str(ph)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1512 if comments:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1513 patchf.write(comments)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1514
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1515 # 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
1516 # and then commit.
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1517 #
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1518 # this should really read:
13005
cffa35529706 mq: fix comment to reflect change in efbee27415ab
Martin Geisler <mg@aragost.com>
parents: 13004
diff changeset
1519 # 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
1520 # 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
1521 # 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
1522 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
1523 changes = repo.changelog.read(top)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1524 man = repo.manifest.read(changes[0])
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1525 aaa = aa[:]
14671
35c2cc322ba8 scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents: 14636
diff changeset
1526 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
1527 # 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
1528 # patch already plus specified files
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1529 if opts.get('short'):
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1530 # 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
1531 # files plus specified files - unfiltered
14322
a90131b85fd8 scmutil: drop aliases in cmdutil for match functions
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1532 match = scmutil.matchfiles(repo, mm + aa + dd + matchfn.files())
17424
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 17191
diff changeset
1533 # filter with include/exclude options
14671
35c2cc322ba8 scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents: 14636
diff changeset
1534 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
1535 else:
14322
a90131b85fd8 scmutil: drop aliases in cmdutil for match functions
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1536 match = scmutil.matchall(repo)
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1537 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
1538 mm = set(mm)
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1539 aa = set(aa)
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1540 dd = set(dd)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1541
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1542 # 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
1543 # 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
1544 # 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
1545 # show up in the added section
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1546 for x in m:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1547 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
1548 mm.add(x)
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1549 # 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
1550 # 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
1551 # show up in the changed section.
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1552 for x in a:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1553 if x in dd:
12948
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1554 dd.remove(x)
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1555 mm.add(x)
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1556 else:
12948
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1557 aa.add(x)
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1558 # 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
1559 # 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
1560 forget = []
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1561 for x in d + r:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1562 if x in aa:
12948
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1563 aa.remove(x)
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1564 forget.append(x)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1565 continue
12948
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1566 else:
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1567 mm.discard(x)
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1568 dd.add(x)
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1569
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1570 m = list(mm)
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1571 r = list(dd)
de6a28ff5ffc mq: use sets instead of lists for speed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12879
diff changeset
1572 a = list(aa)
17888
39b7052b217b mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents: 17887
diff changeset
1573
39b7052b217b mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents: 17887
diff changeset
1574 # create 'match' that includes the files to be recommited.
39b7052b217b mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents: 17887
diff changeset
1575 # 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
1576 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
1577 allmatches = set(cm + ca + cr + cd)
39b7052b217b mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents: 17887
diff changeset
1578 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
1579
39b7052b217b mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents: 17887
diff changeset
1580 files = set(inclsubs)
39b7052b217b mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents: 17887
diff changeset
1581 for x in refreshchanges:
39b7052b217b mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents: 17887
diff changeset
1582 files.update(x)
39b7052b217b mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents: 17887
diff changeset
1583 match = scmutil.matchfiles(repo, files)
39b7052b217b mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents: 17887
diff changeset
1584
17730
6c6987761e42 mq: update bookmarks during qrefresh
David Soria Parra <dsp@php.net>
parents: 17708
diff changeset
1585 bmlist = repo[top].bookmarks()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1586
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1587 try:
10368
f05e0d54f424 Merge with crew-stable
Patrick Mezard <pmezard@gmail.com>
parents: 10362 10366
diff changeset
1588 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
1589 copies = {}
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1590 for dst in a:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1591 src = repo.dirstate.copied(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1592 # 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
1593 # 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
1594 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
1595 copies.setdefault(src, []).append(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1596 repo.dirstate.add(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1597 # 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
1598 for dst in aaa:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1599 f = repo.file(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1600 src = f.renamed(man[dst])
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1601 if src:
10368
f05e0d54f424 Merge with crew-stable
Patrick Mezard <pmezard@gmail.com>
parents: 10362 10366
diff changeset
1602 copies.setdefault(src[0], []).extend(
f05e0d54f424 Merge with crew-stable
Patrick Mezard <pmezard@gmail.com>
parents: 10362 10366
diff changeset
1603 copies.get(dst, []))
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1604 if dst in a:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1605 copies[src[0]].append(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1606 # 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
1607 if dst in copies:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1608 del copies[dst]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1609 for src, dsts in copies.iteritems():
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1610 for dst in dsts:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1611 repo.dirstate.copy(src, dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1612 else:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1613 for dst in a:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1614 repo.dirstate.add(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1615 # Drop useless copy information
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1616 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
1617 repo.dirstate.copy(None, f)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1618 for f in r:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1619 repo.dirstate.remove(f)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1620 # 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
1621 # 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
1622 mm = []
18054
b35e3364f94a check-code: there must also be whitespace between ')' and operator
Mads Kiilerich <madski@unity3d.com>
parents: 18011
diff changeset
1623 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
1624 if not matchfn(m[i]):
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1625 mm.append(m[i])
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1626 del m[i]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1627 for f in m:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1628 repo.dirstate.normal(f)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1629 for f in mm:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1630 repo.dirstate.normallookup(f)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1631 for f in forget:
14434
cc8c09855d19 dirstate: rename forget to drop
Matt Mackall <mpm@selenic.com>
parents: 14424
diff changeset
1632 repo.dirstate.drop(f)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1633
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1634 if not msg:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1635 if not ph.message:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1636 message = "[mq]: %s\n" % patchfn
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1637 else:
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1638 message = "\n".join(ph.message)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1639 else:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1640 message = msg
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
1641
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1642 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
1643
16026
31c02546e6de qrefresh: keep changeset phase during refresh
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16017
diff changeset
1644 oldphase = repo[top].phase()
31c02546e6de qrefresh: keep changeset phase during refresh
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16017
diff changeset
1645
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1646 # 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
1647 repo.setparents(*cparents)
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1648 self.applied.pop()
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1649 self.applieddirty = True
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
1650 self.strip(repo, [top], update=False,
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1651 backup='strip')
16705
c2d9ef43ff6c check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents: 16699
diff changeset
1652 except: # re-raises
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1653 repo.dirstate.invalidate()
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1654 raise
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1655
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1656 try:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1657 # 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
1658
24df9338aa01 mq: ensure all mq commits are made with secretcommit()
Patrick Mezard <patrick@mezard.eu>
parents: 16064
diff changeset
1659 # 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
1660 # the old one.
16102
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
1661 n = newcommit(repo, oldphase, message, user, ph.date,
50682c07a8d0 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 16065 16101
diff changeset
1662 match=match, force=True)
13632
33a33f19aad2 mq: do not let qrefresh write bad patch
Martin Geisler <mg@lazybytes.net>
parents: 13520
diff changeset
1663 # only write patch after a successful commit
17888
39b7052b217b mq: fix qrefresh case sensitivity (issue3271)
Durham Goode <durham@fb.com>
parents: 17887
diff changeset
1664 c = [list(x) for x in refreshchanges]
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
1665 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
1666 self.putsubstate2changes(substatestate, c)
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
1667 chunks = patchmod.diff(repo, patchparent,
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
1668 changes=c, opts=diffopts)
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
1669 for chunk in chunks:
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
1670 patchf.write(chunk)
15057
774da7121fc9 atomictempfile: make close() consistent with other file-like objects.
Greg Ward <greg@gerg.ca>
parents: 14987
diff changeset
1671 patchf.close()
17730
6c6987761e42 mq: update bookmarks during qrefresh
David Soria Parra <dsp@php.net>
parents: 17708
diff changeset
1672
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17893
diff changeset
1673 marks = repo._bookmarks
17730
6c6987761e42 mq: update bookmarks during qrefresh
David Soria Parra <dsp@php.net>
parents: 17708
diff changeset
1674 for bm in bmlist:
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17893
diff changeset
1675 marks[bm] = n
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17893
diff changeset
1676 marks.write()
17730
6c6987761e42 mq: update bookmarks during qrefresh
David Soria Parra <dsp@php.net>
parents: 17708
diff changeset
1677
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
1678 self.applied.append(statusentry(n, patchfn))
16705
c2d9ef43ff6c check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents: 16699
diff changeset
1679 except: # re-raises
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1680 ctx = repo[cparents[0]]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1681 repo.dirstate.rebuild(ctx.node(), ctx.manifest())
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
1682 self.savedirty()
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1683 self.ui.warn(_('refresh interrupted while patch was popped! '
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1684 '(revert --all, qpush to recover)\n'))
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1685 raise
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1686 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
1687 wlock.release()
7401
41e87b4d0c9d mq: recover more gracefully from interrupted qrefresh (issue1216)
Brendan Cully <brendan@kublai.com>
parents: 7400
diff changeset
1688 self.removeundo(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1689
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1690 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
1691 if not create and os.path.isdir(self.path):
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
1692 raise util.Abort(_("patch queue directory already exists"))
4071
165abe554c80 mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4068
diff changeset
1693 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
1694 os.mkdir(self.path)
165abe554c80 mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4068
diff changeset
1695 except OSError, inst:
165abe554c80 mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4068
diff changeset
1696 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
1697 raise
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1698 if create:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1699 return self.qrepo(create=True)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1700
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1701 def unapplied(self, repo, patch=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1702 if patch and patch not in self.series:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
1703 raise util.Abort(_("patch %s is not in series file") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1704 if not patch:
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
1705 start = self.seriesend()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1706 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1707 start = self.series.index(patch) + 1
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1708 unapplied = []
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1709 for i in xrange(start, len(self.series)):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1710 pushable, reason = self.pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1711 if pushable:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1712 unapplied.append((i, self.series[i]))
14579
f7b25764d974 mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents: 14578
diff changeset
1713 self.explainpushable(i)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1714 return unapplied
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1715
4239
417c2068cb92 Simplified qseries and hg qapplied to fix some bugs caused by optimization:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4238
diff changeset
1716 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
1717 summary=False):
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1718 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
1719 if pfx:
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1720 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
1721 if summary:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1722 ph = patchheader(self.join(patchname), self.plainmode)
9874
c51494c53841 qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9867
diff changeset
1723 msg = ph.message and ph.message[0] or ''
11327
6c469f2f9f12 mq: use ui.formatted() instead of ui.plain().
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11321
diff changeset
1724 if self.ui.formatted():
12689
c52c629ce19e termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents: 12682
diff changeset
1725 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
1726 if width > 0:
c51494c53841 qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9867
diff changeset
1727 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
1728 else:
c51494c53841 qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9867
diff changeset
1729 msg = ''
10932
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1730 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
1731 self.ui.write(': ')
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1732 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
1733 else:
10932
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1734 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
1735 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
1736
8152
08e1baf924ca replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents: 8151
diff changeset
1737 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
1738 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
1739 length = len(self.series) - start
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1740 if not missing:
9016
894c5b4be275 mq: align columns in verbose qseries output.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8948
diff changeset
1741 if self.ui.verbose:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1742 idxwidth = len(str(start + length - 1))
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1743 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
1744 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
1745 if patch in applied:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1746 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
1747 elif self.pushable(i)[0]:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1748 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
1749 else:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1750 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
1751 pfx = ''
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1752 if self.ui.verbose:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1753 pfx = '%*d %s ' % (idxwidth, i, char)
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1754 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
1755 continue
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1756 displayname(pfx, patch, state)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1757 else:
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
1758 msng_list = []
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1759 for root, dirs, files in os.walk(self.path):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1760 d = root[len(self.path) + 1:]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1761 for f in files:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1762 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
1763 if (fl not in self.series and
14588
bd3d75a03f80 mq: rename status_path to statuspath
Adrian Buehlmann <adrian@cadifra.com>
parents: 14587
diff changeset
1764 fl not in (self.statuspath, self.seriespath,
14589
7d59ee9e711b mq: rename guards_path to guardspath
Adrian Buehlmann <adrian@cadifra.com>
parents: 14588
diff changeset
1765 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
1766 and not fl.startswith('.')):
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
1767 msng_list.append(fl)
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8188
diff changeset
1768 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
1769 pfx = self.ui.verbose and ('D ') or ''
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1770 displayname(pfx, x, 'missing')
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1771
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1772 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
1773 if l.name == '.hg.patches.save.line':
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1774 return True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1775
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1776 def qrepo(self, create=False):
11965
77f1f206e135 mq: don't inherit default and default-push paths with --mq (issue2333)
Mads Kiilerich <mads@kiilerich.com>
parents: 11715
diff changeset
1777 ui = self.ui.copy()
77f1f206e135 mq: don't inherit default and default-push paths with --mq (issue2333)
Mads Kiilerich <mads@kiilerich.com>
parents: 11715
diff changeset
1778 ui.setconfig('paths', 'default', '', overlay=False)
77f1f206e135 mq: don't inherit default and default-push paths with --mq (issue2333)
Mads Kiilerich <mads@kiilerich.com>
parents: 11715
diff changeset
1779 ui.setconfig('paths', 'default-push', '', overlay=False)
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
1780 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
1781 return hg.repository(ui, path=self.path, create=create)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1782
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1783 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
1784 desc = repo[rev].description().strip()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1785 lines = desc.splitlines()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1786 i = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1787 datastart = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1788 series = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1789 applied = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1790 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
1791 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
1792 if line == 'Patch Data:':
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1793 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
1794 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
1795 l = line.rstrip()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1796 l = l[10:].split(' ')
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1797 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
1798 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
1799 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
1800 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
1801 if n:
cfbf064f0069 mq: qsave creates entries with the left part empty (':patchname')
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10682
diff changeset
1802 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
1803 else:
10682
8ed350051896 mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10681
diff changeset
1804 series.append(l)
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
1805 if datastart is None:
16929
4b02d7006169 mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents: 16867
diff changeset
1806 self.ui.warn(_("no saved patch data found\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1807 return 1
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1808 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
1809 self.fullseries = series
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1810 self.applied = applied
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
1811 self.parseseries()
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1812 self.seriesdirty = True
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1813 self.applieddirty = True
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1814 heads = repo.changelog.heads()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1815 if delete:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1816 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
1817 self.ui.warn(_("save entry has children, leaving it alone\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1818 else:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1819 self.ui.warn(_("removing save entry %s\n") % short(rev))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1820 pp = repo.dirstate.parents()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1821 if rev in pp:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1822 update = True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1823 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1824 update = False
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
1825 self.strip(repo, [rev], update=update, backup='strip')
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1826 if qpp:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1827 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
1828 (short(qpp[0]), short(qpp[1])))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1829 if qupdate:
12848
f7f1a146f407 qrestore: trying to improve the English
timeless <timeless@gmail.com>
parents: 12775
diff changeset
1830 self.ui.status(_("updating queue directory\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1831 r = self.qrepo()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1832 if not r:
16929
4b02d7006169 mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents: 16867
diff changeset
1833 self.ui.warn(_("unable to load queue repository\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1834 return 1
2808
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2804
diff changeset
1835 hg.clean(r, qpp[0])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1836
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1837 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
1838 if not self.applied:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1839 self.ui.warn(_("save: no patches applied, exiting\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1840 return 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1841 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
1842 self.ui.warn(_("status is already saved\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1843 return 1
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1844
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1845 if not msg:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1846 msg = _("hg patches saved state")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1847 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1848 msg = "hg patches: " + msg.rstrip('\r\n')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1849 r = self.qrepo()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1850 if r:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1851 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
1852 msg += "\nDirstate: %s %s" % (hex(pp[0]), hex(pp[1]))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1853 msg += "\n\nPatch Data:\n"
10679
35abaea778dc mq: simplify commit message generation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10678
diff changeset
1854 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
1855 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
1856 n = repo.commit(msg, force=True)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1857 if not n:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1858 self.ui.warn(_("repo commit failed\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1859 return 1
10684
485c1d7f8a77 mq: fix coding style (missing space)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10683
diff changeset
1860 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
1861 self.applieddirty = True
4209
dbc3846c09a1 Merge with -stable, fix small test failure
Matt Mackall <mpm@selenic.com>
parents: 4207
diff changeset
1862 self.removeundo(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1863
14585
74bf9c84cfd0 mq: rename full_series_end to fullseriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14584
diff changeset
1864 def fullseriesend(self):
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
1865 if self.applied:
2780
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1866 p = self.applied[-1].name
14574
12fba7bcb4f1 mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14573
diff changeset
1867 end = self.findseries(p)
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
1868 if end is None:
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
1869 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
1870 return end + 1
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1871 return 0
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1872
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
1873 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
1874 """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
1875 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
1876 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
1877 """
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1878 end = 0
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1879 def next(start):
10687
583adcf63f80 mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10686
diff changeset
1880 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
1881 return start
10687
583adcf63f80 mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10686
diff changeset
1882 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
1883 p, reason = self.pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1884 if p:
16063
c36db39b3fee mq: fix qnext when all remaining patches are guarded
Patrick Mezard <pmezard@gmail.com>
parents: 16048
diff changeset
1885 return i
14579
f7b25764d974 mq: rename explain_pushable to explainpushable
Adrian Buehlmann <adrian@cadifra.com>
parents: 14578
diff changeset
1886 self.explainpushable(i)
16063
c36db39b3fee mq: fix qnext when all remaining patches are guarded
Patrick Mezard <pmezard@gmail.com>
parents: 16048
diff changeset
1887 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
1888 if self.applied:
2780
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1889 p = self.applied[-1].name
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1890 try:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1891 end = self.series.index(p)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1892 except ValueError:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1893 return 0
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1894 return next(end + 1)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1895 return next(end)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1896
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1897 def appliedname(self, index):
2780
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1898 pname = self.applied[index].name
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1899 if not self.ui.verbose:
2677
ec05ce9cbf47 mq: uniform verbose display of patche[s].
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2664
diff changeset
1900 p = pname
ec05ce9cbf47 mq: uniform verbose display of patche[s].
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2664
diff changeset
1901 else:
2941
d32df6452323 mq: fix appliedname
Brendan Cully <brendan@kublai.com>
parents: 2940
diff changeset
1902 p = str(self.series.index(pname)) + " " + pname
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1903 return p
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1904
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1905 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
1906 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
1907 def checkseries(patchname):
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1908 if patchname in self.series:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1909 raise util.Abort(_('patch %s is already in the series file')
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1910 % patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1911
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1912 if rev:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1913 if files:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1914 raise util.Abort(_('option "-r" not valid when importing '
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1915 'files'))
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14298
diff changeset
1916 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
1917 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
1918 elif not files:
54295c87eefc mq: abort if no files or revisions are specified for qimport
Thomas Arendsen Hein <thomas@intevation.de>
parents: 16929
diff changeset
1919 raise util.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
1920 if (len(files) > 1 or len(rev) > 1) and patchname:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
1921 raise util.Abort(_('option "-n" not valid when importing multiple '
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1922 'patches'))
16119
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
1923 imported = []
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1924 if rev:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1925 # 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
1926 # 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
1927 # Otherwise, they should form a linear path to a head.
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1928 heads = repo.changelog.heads(repo.changelog.node(rev[-1]))
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1929 if len(heads) > 1:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1930 raise util.Abort(_('revision %d is the root of more than one '
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1931 'branch') % rev[-1])
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1932 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
1933 base = repo.changelog.node(rev[0])
da2a0c9c895d mq: avoid many hex/bin conversions, keep the binary node when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10663
diff changeset
1934 if base in [n.node for n in self.applied]:
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1935 raise util.Abort(_('revision %d is already managed')
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1936 % rev[0])
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
1937 if heads != [self.applied[-1].node]:
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1938 raise util.Abort(_('revision %d is not the parent of '
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1939 'the queue') % rev[0])
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
1940 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
1941 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
1942 else:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1943 if heads != [repo.changelog.node(rev[0])]:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1944 raise util.Abort(_('revision %d has unmanaged children')
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1945 % rev[0])
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1946 lastparent = None
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1947
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
1948 diffopts = self.diffopts({'git': git})
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1949 for r in rev:
15704
8857e150bec0 phases: prevent mq to qimport immutable change.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15476
diff changeset
1950 if not repo[r].mutable():
8857e150bec0 phases: prevent mq to qimport immutable change.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15476
diff changeset
1951 raise util.Abort(_('revision %d is not mutable') % r,
8857e150bec0 phases: prevent mq to qimport immutable change.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15476
diff changeset
1952 hint=_('see "hg help phases" for details'))
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1953 p1, p2 = repo.changelog.parentrevs(r)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1954 n = repo.changelog.node(r)
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
1955 if p2 != nullrev:
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1956 raise util.Abort(_('cannot import merge revision %d') % r)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1957 if lastparent and lastparent != r:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1958 raise util.Abort(_('revision %d is not the parent of %d')
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1959 % (r, lastparent))
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1960 lastparent = p1
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1961
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1962 if not patchname:
4037
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
1963 patchname = normname('%d.diff' % r)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1964 checkseries(patchname)
14423
7230aef66b7c mq: use checkpatchname
Idan Kamara <idankk86@gmail.com>
parents: 14422
diff changeset
1965 self.checkpatchname(patchname, force)
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
1966 self.fullseries.insert(0, patchname)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1967
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1968 patchf = self.opener(patchname, "w")
10611
e764f24a45ee patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10591
diff changeset
1969 cmdutil.export(repo, [n], fp=patchf, opts=diffopts)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1970 patchf.close()
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1971
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
1972 se = statusentry(n, patchname)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1973 self.applied.insert(0, se)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1974
11462
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
1975 self.added.append(patchname)
16119
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
1976 imported.append(patchname)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1977 patchname = None
16027
29ea059be33c qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16026
diff changeset
1978 if rev and repo.ui.configbool('mq', 'secret', False):
29ea059be33c qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16026
diff changeset
1979 # if we added anything with --rev, we must move the secret root
29ea059be33c qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16026
diff changeset
1980 phases.retractboundary(repo, phases.secret, [n])
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
1981 self.parseseries()
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
1982 self.applieddirty = True
14593
599a72895c0d mq: rename series_dirty to seriesdirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14592
diff changeset
1983 self.seriesdirty = True
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1984
10687
583adcf63f80 mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10686
diff changeset
1985 for i, filename in enumerate(files):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1986 if existing:
3547
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
1987 if filename == '-':
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
1988 raise util.Abort(_('-e is incompatible with import from -'))
11699
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
1989 filename = normname(filename)
14584
3343a74eea4e mq: rename check_reserved_name to checkreservedname
Adrian Buehlmann <adrian@cadifra.com>
parents: 14583
diff changeset
1990 self.checkreservedname(filename)
11699
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
1991 originpath = self.join(filename)
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
1992 if not os.path.isfile(originpath):
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
1993 raise util.Abort(_("patch %s does not exist") % filename)
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
1994
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
1995 if patchname:
14423
7230aef66b7c mq: use checkpatchname
Idan Kamara <idankk86@gmail.com>
parents: 14422
diff changeset
1996 self.checkpatchname(patchname, force)
11699
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
1997
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
1998 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
1999 % (filename, patchname))
11701
84fb29f5e0d2 mq: fix qimport --name --existing --force on win32
Patrick Mezard <pmezard@gmail.com>
parents: 11700
diff changeset
2000 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
2001 else:
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
2002 patchname = filename
da0b9109186d mq: support "qimport --existing --name renametothis thatexistingpatch"
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11644
diff changeset
2003
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2004 else:
14395
dc961471efde mq: check patch name is valid before reading imported file
Idan Kamara <idankk86@gmail.com>
parents: 14382
diff changeset
2005 if filename == '-' and not patchname:
dc961471efde mq: check patch name is valid before reading imported file
Idan Kamara <idankk86@gmail.com>
parents: 14382
diff changeset
2006 raise util.Abort(_('need --name to import a patch from -'))
dc961471efde mq: check patch name is valid before reading imported file
Idan Kamara <idankk86@gmail.com>
parents: 14382
diff changeset
2007 elif not patchname:
14396
170747a3e139 mq: strip all leading slashes from url when importing
Idan Kamara <idankk86@gmail.com>
parents: 14395
diff changeset
2008 patchname = normname(os.path.basename(filename.rstrip('/')))
14423
7230aef66b7c mq: use checkpatchname
Idan Kamara <idankk86@gmail.com>
parents: 14422
diff changeset
2009 self.checkpatchname(patchname, force)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2010 try:
3547
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
2011 if filename == '-':
14636
b98063487a6f mq: use ui.fin when importing patch from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14635
diff changeset
2012 text = self.ui.fin.read()
3547
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
2013 else:
17887
0e2846b2482c url: use open and not url.open for local files (issue3624)
Siddharth Agarwal <sid0@fb.com>
parents: 17773
diff changeset
2014 fp = hg.openpath(self.ui, filename)
13400
14f3795a5ed7 explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 13373
diff changeset
2015 text = fp.read()
14f3795a5ed7 explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 13373
diff changeset
2016 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
2017 except (OSError, IOError):
11709
3e561b6af810 mq: clarify the fact that qimport is trying to read a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11637
diff changeset
2018 raise util.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
2019 patchf = self.opener(patchname, "w")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2020 patchf.write(text)
13400
14f3795a5ed7 explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 13373
diff changeset
2021 patchf.close()
7160
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
2022 if not force:
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
2023 checkseries(patchname)
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
2024 if patchname not in self.series:
14585
74bf9c84cfd0 mq: rename full_series_end to fullseriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14584
diff changeset
2025 index = self.fullseriesend() + i
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
2026 self.fullseries[index:index] = [patchname]
14575
845c864200d0 mq: rename parse_series to parseseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14574
diff changeset
2027 self.parseseries()
14593
599a72895c0d mq: rename series_dirty to seriesdirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14592
diff changeset
2028 self.seriesdirty = True
7597
81f68565281c mq, i18n: mark strings for translation
Martin Geisler <mg@daimi.au.dk>
parents: 7454
diff changeset
2029 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
2030 self.added.append(patchname)
16119
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
2031 imported.append(patchname)
3133
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3091
diff changeset
2032 patchname = None
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2033
13409
9e5df8719ad4 mq: remove undo after a qimport
André Sintzoff <andre.sintzoff@gmail.com>
parents: 13400
diff changeset
2034 self.removeundo(repo)
16119
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
2035 return imported
13409
9e5df8719ad4 mq: remove undo after a qimport
André Sintzoff <andre.sintzoff@gmail.com>
parents: 13400
diff changeset
2036
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2037 def fixkeepchangesopts(ui, opts):
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2038 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
2039 or opts.get('exact')):
4ae3ba9e4d7a mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents: 16655
diff changeset
2040 return opts
4ae3ba9e4d7a mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents: 16655
diff changeset
2041 opts = dict(opts)
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2042 opts['keep_changes'] = True
16656
4ae3ba9e4d7a mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents: 16655
diff changeset
2043 return opts
4ae3ba9e4d7a mq: introduce mq.check setting
Patrick Mezard <patrick@mezard.eu>
parents: 16655
diff changeset
2044
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2045 @command("qdelete|qremove|qrm",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2046 [('k', 'keep', None, _('keep patch file')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2047 ('r', 'rev', [],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2048 _('stop managing a revision (DEPRECATED)'), _('REV'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2049 _('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
2050 def delete(ui, repo, *patches, **opts):
2905
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
2051 """remove patches from queue
2752
5dfeda163bb7 Add -f option to qdelete, to remove patch file.
Brendan Cully <brendan@kublai.com>
parents: 2751
diff changeset
2052
15798
e6c44dbe902f mq: Document that qdel requires exact patch identifiers
Olav Reinert <seroton10@gmail.com>
parents: 15322
diff changeset
2053 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
2054 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
2055 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
2056
8be38b624902 mq: no longer mention the deprecated qdelete's --revision option
Cédric Duval <cedricduval@free.fr>
parents: 8894
diff changeset
2057 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
2058 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
2059 q = repo.mq
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
2060 q.delete(repo, patches, opts)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2061 q.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2062 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2063
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2064 @command("qapplied",
16188
6b52963ced73 mq: fix qapplied --last and qprev documentation (issue3282)
Patrick Mezard <patrick@mezard.eu>
parents: 16119
diff changeset
2065 [('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
2066 ] + seriesopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2067 _('hg qapplied [-1] [-s] [PATCH]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2068 def applied(ui, repo, patch=None, **opts):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2069 """print the patches already applied
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2070
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2071 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
2072
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2073 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
2074
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2075 if patch:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2076 if patch not in q.series:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2077 raise util.Abort(_("patch %s is not in series file") % patch)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2078 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
2079 else:
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
2080 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
2081
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2082 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
2083 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
2084 return 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2085 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
2086 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
2087 return 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2088 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
2089 start = end - 2
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2090 end = 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2091 else:
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2092 start = 0
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2093
12539
dece1f46f7a2 mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents: 12538
diff changeset
2094 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
2095 summary=opts.get('summary'))
dece1f46f7a2 mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents: 12538
diff changeset
2096
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2097
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2098 @command("qunapplied",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2099 [('1', 'first', None, _('show only the first patch'))] + seriesopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2100 _('hg qunapplied [-1] [-s] [PATCH]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2101 def unapplied(ui, repo, patch=None, **opts):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2102 """print the patches not yet applied
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2103
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2104 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
2105
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2106 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2107 if patch:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2108 if patch not in q.series:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2109 raise util.Abort(_("patch %s is not in series file") % patch)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2110 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
2111 else:
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
2112 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
2113
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2114 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
2115 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
2116 return 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2117
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2118 length = opts.get('first') and 1 or None
12539
dece1f46f7a2 mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents: 12538
diff changeset
2119 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
2120 summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2121
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2122 @command("qimport",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2123 [('e', 'existing', None, _('import file in patch directory')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2124 ('n', 'name', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2125 _('name of patch file'), _('NAME')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2126 ('f', 'force', None, _('overwrite existing files')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2127 ('r', 'rev', [],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2128 _('place existing revisions under mq control'), _('REV')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2129 ('g', 'git', None, _('use git extended diff format')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2130 ('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
2131 _('hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... [FILE]...'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2132 def qimport(ui, repo, *filename, **opts):
16152
816211dfa3a5 mq: expand qimport summary
Matt Mackall <mpm@selenic.com>
parents: 16128
diff changeset
2133 """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
2134
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2135 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
2136 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
2137 to the series.
d6caebe9c293 mq: qimport: explain insertion point in doc string
Adrian Buehlmann <adrian@cadifra.com>
parents: 6627
diff changeset
2138
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2139 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
2140 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
2141
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2142 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
2143 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
2144
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2145 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
2146 overwritten.
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2147
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2148 An existing changeset may be placed under mq control with -r/--rev
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
2149 (e.g. qimport --rev tip -n patch will place tip under mq control).
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2150 With -g/--git, patches imported with --rev will use the git diff
7387
7e9a15fa6c8f update help on git diffs
Matt Mackall <mpm@selenic.com>
parents: 7308
diff changeset
2151 format. See the diffs help topic for information on why this is
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2152 important for preserving rename/copy information and permission
13528
73bf872a91d8 mq: mention qfinish in qimport help
Patrick Mezard <pmezard@gmail.com>
parents: 13520
diff changeset
2153 changes. Use :hg:`qfinish` to remove changesets 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
2154
1f0a5a5fff43 Update qimport help explaining how to read a patch from stdin (Issue371)
David Frey <dpfrey@shaw.ca>
parents: 8028
diff changeset
2155 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
2156 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
2157 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
2158
11706
5fdf08b6b50c mq: correct qimport documentation
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11701
diff changeset
2159 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
2160
52c863295754 mq: document possible combination of -e and -n for qimport
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11699
diff changeset
2161 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
2162
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2163 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
2164 """
16027
29ea059be33c qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16026
diff changeset
2165 lock = repo.lock() # cause this may move phase
11462
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
2166 try:
16027
29ea059be33c qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16026
diff changeset
2167 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
2168 try:
16119
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
2169 imported = q.qimport(
5de83d9ca79c mq: make qimport --push push all imported patches (issue3130)
Patrick Mezard <patrick@mezard.eu>
parents: 16101
diff changeset
2170 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
2171 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
2172 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
2173 finally:
29ea059be33c qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16026
diff changeset
2174 q.savedirty()
11462
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
2175 finally:
16027
29ea059be33c qimport: when mq.secret=True set qimported revision as secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16026
diff changeset
2176 lock.release()
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
2177
0128cdb846d9 mq: qimport need wlock for --push - do that after releasing lock
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16635
diff changeset
2178 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
2179 return q.push(repo, imported[-1])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2180 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2181
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2182 def qinit(ui, repo, create):
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2183 """initialize a new queue repository
2754
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
2184
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2185 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
2186 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
2187 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
2188
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2189 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
2190 q = repo.mq
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2191 r = q.init(repo, create)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2192 q.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2193 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
2194 if not os.path.exists(r.wjoin('.hgignore')):
165abe554c80 mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4068
diff changeset
2195 fp = r.wopener('.hgignore', 'w')
6034
83633602e2c5 qinit -c: add ^\.hg and ^\.mq to .hgignore
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6027
diff changeset
2196 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
2197 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
2198 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
2199 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
2200 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
2201 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
2202 if not os.path.exists(r.wjoin('series')):
165abe554c80 mq: qinit -c creates a repo even after a regular qinit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4068
diff changeset
2203 r.wopener('series', 'w').close()
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11302
diff changeset
2204 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
2205 commands.add(ui, r)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2206 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2207
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2208 @command("^qinit",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2209 [('c', 'create-repo', None, _('create queue repository'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2210 _('hg qinit [-c]'))
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2211 def init(ui, repo, **opts):
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2212 """init a new queue repository (DEPRECATED)
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2213
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2214 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
2215 -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
2216 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
2217 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
2218 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
2219
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2220 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
2221 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
2222 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
2223
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2224 @command("qclone",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2225 [('', 'pull', None, _('use pull protocol to copy metadata')),
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2226 ('U', 'noupdate', None,
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2227 _('do not update the new working directories')),
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2228 ('', 'uncompressed', None,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2229 _('use uncompressed transfer (fast over LAN)')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2230 ('p', 'patches', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2231 _('location of source patch repository'), _('REPO')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2232 ] + commands.remoteopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2233 _('hg qclone [OPTION]... SOURCE [DEST]'))
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2234 def clone(ui, source, dest=None, **opts):
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2235 '''clone main and patch repository at same time
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2236
7983
7b813bdbd5d0 Change double spaces to single spaces in help texts.
Martin Geisler <mg@daimi.au.dk>
parents: 7874
diff changeset
2237 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
2238 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
2239 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
2240 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
2241 before that it has no patches applied.
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2242
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2243 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
2244 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
2245
8760
bf17aeafb869 Spell Mercurial as a proper noun
timeless <timeless@gmail.com>
parents: 8711
diff changeset
2246 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
2247 would be created by :hg:`init --mq`.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2248
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2249 Return 0 on success.
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2250 '''
5226
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
2251 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
2252 """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
2253 url = repo.url()
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
2254 if url.endswith('/'):
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
2255 url = url[:-1]
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
2256 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
2257
92e455f2866c qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15920
diff changeset
2258 # main repo (destination and sources)
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2259 if dest is None:
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2260 dest = hg.defaultdest(source)
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2261 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
2262
92e455f2866c qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15920
diff changeset
2263 # patches repo (source only)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2264 if opts.get('patches'):
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2265 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
2266 else:
dd08e1e0cea1 mq: allow qclone's -p option to use path alias
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7639
diff changeset
2267 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
2268 try:
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2269 hg.peer(ui, opts, patchespath)
7637
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7627
diff changeset
2270 except error.RepoError:
4862
cba10652a901 mq: improve qclone error handling when patch directory is not a repository.
Brendan Cully <brendan@kublai.com>
parents: 4737
diff changeset
2271 raise util.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
2272 ' (see init --mq)'))
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2273 qbase, destrev = None, None
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2274 if sr.local():
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2275 repo = sr.local()
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2276 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
2277 qbase = repo.mq.applied[0].node
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2278 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
2279 heads = set(repo.heads())
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2280 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
2281 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
2282 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
2283 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
2284 qbase = sr.lookup('qbase')
7637
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7627
diff changeset
2285 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
2286 pass
15921
92e455f2866c qclone: add a few comment and blank line
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15920
diff changeset
2287
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
2288 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
2289 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
2290 pull=opts.get('pull'),
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2291 rev=destrev,
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2292 update=False,
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2293 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
2294
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
2295 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
2296 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
2297 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
2298 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
2299
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2300 if dr.local():
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2301 repo = dr.local()
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2302 if qbase:
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
2303 ui.note(_('stripping applied patches from destination '
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
2304 'repository\n'))
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17153
diff changeset
2305 repo.mq.strip(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
2306 if not opts.get('noupdate'):
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
2307 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
2308 hg.update(repo, repo.changelog.tip())
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
2309
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2310 @command("qcommit|qci",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2311 commands.table["^commit|ci"][1],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2312 _('hg qcommit [OPTION]... [FILE]...'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2313 def commit(ui, repo, *pats, **opts):
10361
49cd2e7fd91c mq: deprecate qinit and qcommit
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10360
diff changeset
2314 """commit changes in the queue repository (DEPRECATED)
49cd2e7fd91c mq: deprecate qinit and qcommit
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10360
diff changeset
2315
11193
687c7d395f20 Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents: 11121
diff changeset
2316 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
2317 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2318 r = q.qrepo()
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2319 if not r:
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2320 raise util.Abort('no queue repository')
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2321 commands.commit(r.ui, r, *pats, **opts)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2322
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2323 @command("qseries",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2324 [('m', 'missing', None, _('print patches not in series')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2325 ] + seriesopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2326 _('hg qseries [-ms]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2327 def series(ui, repo, **opts):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2328 """print the entire series file
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2329
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2330 Returns 0 on success."""
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2331 repo.mq.qseries(repo, missing=opts.get('missing'),
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2332 summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2333 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2334
14468
755aabb3eada mq: no need to make a copy of seriesopts
Idan Kamara <idankk86@gmail.com>
parents: 14464
diff changeset
2335 @command("qtop", seriesopts, _('hg qtop [-s]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2336 def top(ui, repo, **opts):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2337 """print the name of the current patch
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2338
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2339 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
2340 q = repo.mq
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
2341 t = q.applied and q.seriesend(True) or 0
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2342 if t:
12539
dece1f46f7a2 mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents: 12538
diff changeset
2343 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
2344 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
2345 else:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2346 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
2347 return 1
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2348
14468
755aabb3eada mq: no need to make a copy of seriesopts
Idan Kamara <idankk86@gmail.com>
parents: 14464
diff changeset
2349 @command("qnext", seriesopts, _('hg qnext [-s]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2350 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
2351 """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
2352
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2353 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
2354 q = repo.mq
14586
af91cb281975 mq: rename series_end to seriesend
Adrian Buehlmann <adrian@cadifra.com>
parents: 14585
diff changeset
2355 end = q.seriesend()
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2356 if end == len(q.series):
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2357 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
2358 return 1
12539
dece1f46f7a2 mq: removed return from callers to patchheader.qseries
Erik Zielke <ez@aragost.com>
parents: 12538
diff changeset
2359 q.qseries(repo, start=end, length=1, summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2360
14468
755aabb3eada mq: no need to make a copy of seriesopts
Idan Kamara <idankk86@gmail.com>
parents: 14464
diff changeset
2361 @command("qprev", seriesopts, _('hg qprev [-s]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2362 def prev(ui, repo, **opts):
16188
6b52963ced73 mq: fix qapplied --last and qprev documentation (issue3282)
Patrick Mezard <patrick@mezard.eu>
parents: 16119
diff changeset
2363 """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
2364
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2365 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
2366 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2367 l = len(q.applied)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2368 if l == 1:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2369 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
2370 return 1
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2371 if not l:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2372 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
2373 return 1
16064
7e5a281a082c mq: make qprev return the previous applied patch (issue3245)
Patrick Mezard <pmezard@gmail.com>
parents: 16063
diff changeset
2374 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
2375 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
2376 summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2377
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
2378 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
2379 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
2380 opts['user'] = ui.username()
f16ec85f125c mq: do not call ui.username unless it is necessary
Martin Geisler <mg@lazybytes.net>
parents: 9725
diff changeset
2381 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
2382 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
2383
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2384 @command("^qnew",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2385 [('e', 'edit', None, _('edit commit message')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2386 ('f', 'force', None, _('import uncommitted changes (DEPRECATED)')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2387 ('g', 'git', None, _('use git extended diff format')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2388 ('U', 'currentuser', None, _('add "From: <current user>" to patch')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2389 ('u', 'user', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2390 _('add "From: <USER>" to patch'), _('USER')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2391 ('D', 'currentdate', None, _('add "Date: <current date>" to patch')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2392 ('d', 'date', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2393 _('add "Date: <DATE>" to patch'), _('DATE'))
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2394 ] + commands.walkopts + commands.commitopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2395 _('hg qnew [-e] [-m TEXT] [-l FILE] PATCH [FILE]...'))
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
2396 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
2397 """create a new patch
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
2398
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2399 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
2400 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
2401 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
2402 -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
2403 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
2404 as uncommitted modifications.
2754
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
2405
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2406 -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
2407 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
2408 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
2409
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2410 -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
2411 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
2412 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
2413
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2414 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
2415 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
2416 is important for preserving permission changes and copy/rename
7e9a15fa6c8f update help on git diffs
Matt Mackall <mpm@selenic.com>
parents: 7308
diff changeset
2417 information.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2418
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2419 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
2420 """
14635
217b7d83afc3 cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14620
diff changeset
2421 msg = cmdutil.logmessage(ui, opts)
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2422 def getmsg():
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2423 return ui.edit(msg, opts.get('user') or ui.username())
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2424 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
2425 opts['msg'] = msg
fd3cba5e73ae mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents: 7142
diff changeset
2426 if opts.get('edit'):
fd3cba5e73ae mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents: 7142
diff changeset
2427 opts['msg'] = getmsg
fd3cba5e73ae mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents: 7142
diff changeset
2428 else:
fd3cba5e73ae mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents: 7142
diff changeset
2429 opts['msg'] = msg
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
2430 setupheaderopts(ui, opts)
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
2431 q.new(repo, patch, *args, **opts)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2432 q.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2433 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2434
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2435 @command("^qrefresh",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2436 [('e', 'edit', None, _('edit commit message')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2437 ('g', 'git', None, _('use git extended diff format')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2438 ('s', 'short', None,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2439 _('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
2440 ('U', 'currentuser', None,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2441 _('add/update author field in patch with current user')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2442 ('u', 'user', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2443 _('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
2444 ('D', 'currentdate', None,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2445 _('add/update date field in patch with current date')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2446 ('d', 'date', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2447 _('add/update date field in patch with given date'), _('DATE'))
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2448 ] + commands.walkopts + commands.commitopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2449 _('hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...'))
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
2450 def refresh(ui, repo, *pats, **opts):
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2451 """update the current patch
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2452
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2453 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
2454 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
2455 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
2456
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2457 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
2458 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
2459
11947
59ec12093261 mq: save qrefresh message for easy recovery in case it fails (issue2062)
Renato Cunha <renatoc@gmail.com>
parents: 11939
diff changeset
2460 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
2461 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
2462 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
2463
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2464 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
2465 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
2466 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
2467 git diff format.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2468
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2469 Returns 0 on success.
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2470 """
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2471 q = repo.mq
14635
217b7d83afc3 cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14620
diff changeset
2472 message = cmdutil.logmessage(ui, opts)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2473 if opts.get('edit'):
5334
448eb46d4d84 mq: fix qrefresh -e with no patches applied
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5226
diff changeset
2474 if not q.applied:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2475 ui.write(_("no patches applied\n"))
5334
448eb46d4d84 mq: fix qrefresh -e with no patches applied
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5226
diff changeset
2476 return 1
2746
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
2477 if message:
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
2478 raise util.Abort(_('option "-e" incompatible with "-m" or "-l"'))
2780
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
2479 patch = q.applied[-1].name
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
2480 ph = patchheader(q.join(patch), q.plainmode)
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
2481 message = ui.edit('\n'.join(ph.message), ph.user or ui.username())
11947
59ec12093261 mq: save qrefresh message for easy recovery in case it fails (issue2062)
Renato Cunha <renatoc@gmail.com>
parents: 11939
diff changeset
2482 # We don't want to lose the patch message if qrefresh fails (issue2062)
14529
e7a1814854b9 localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents: 14509
diff changeset
2483 repo.savecommitmessage(message)
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
2484 setupheaderopts(ui, opts)
14620
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2485 wlock = repo.wlock()
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2486 try:
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2487 ret = q.refresh(repo, pats, msg=message, **opts)
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2488 q.savedirty()
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2489 return ret
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2490 finally:
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2491 wlock.release()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2492
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2493 @command("^qdiff",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2494 commands.diffopts + commands.diffopts2 + commands.walkopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2495 _('hg qdiff [OPTION]... [FILE]...'))
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
2496 def diff(ui, repo, *pats, **opts):
6606
088ba40585b9 mq: expand help text for qdiff
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6561
diff changeset
2497 """diff of the current patch and subsequent modifications
6621
d5cbbe2c49ce mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6611
diff changeset
2498
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2499 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
2500 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
2501 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
2502 after a qrefresh).
6621
d5cbbe2c49ce mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6611
diff changeset
2503
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10962
diff changeset
2504 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
2505 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
2506 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
2507 qrefresh.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2508
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2509 Returns 0 on success.
6606
088ba40585b9 mq: expand help text for qdiff
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6561
diff changeset
2510 """
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
2511 repo.mq.diff(repo, pats, opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2512 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2513
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2514 @command('qfold',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2515 [('e', 'edit', None, _('edit patch header')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2516 ('k', 'keep', None, _('keep folded patch files')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2517 ] + commands.commitopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2518 _('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
2519 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
2520 """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
2521
2771
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
2522 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
2523 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
2524 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
2525 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
2526 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
2527 removed afterwards.
2771
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
2528
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2529 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
2530 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
2531
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2532 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
2533 q = repo.mq
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2534 if not files:
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2535 raise util.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
2536 if not q.checktoppatch(repo)[0]:
12067
a4fbbe0fbc38 Lowercase error messages
Martin Geisler <mg@lazybytes.net>
parents: 11965
diff changeset
2537 raise util.Abort(_('no patches applied'))
14583
28f87e14d923 mq: rename check_localchanges to checklocalchanges
Adrian Buehlmann <adrian@cadifra.com>
parents: 14582
diff changeset
2538 q.checklocalchanges(repo)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2539
14635
217b7d83afc3 cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14620
diff changeset
2540 message = cmdutil.logmessage(ui, opts)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2541 if opts.get('edit'):
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2542 if message:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2543 raise util.Abort(_('option "-e" incompatible with "-m" or "-l"'))
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2544
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2545 parent = q.lookup('qtip')
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2546 patches = []
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2547 messages = []
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2548 for f in files:
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2549 p = q.lookup(f)
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2550 if p in patches or p == parent:
16929
4b02d7006169 mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents: 16867
diff changeset
2551 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
2552 if q.isapplied(p):
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2553 raise util.Abort(_('qfold cannot fold already applied patch %s')
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2554 % p)
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2555 patches.append(p)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2556
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2557 for p in patches:
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2558 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
2559 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
2560 if ph.message:
1d5ecaa47abb mq: filter out empty commit messages in qfold
Brendan Cully <brendan@kublai.com>
parents: 7453
diff changeset
2561 messages.append(ph.message)
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2562 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
2563 (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
2564 if not patchsuccess:
12067
a4fbbe0fbc38 Lowercase error messages
Martin Geisler <mg@lazybytes.net>
parents: 11965
diff changeset
2565 raise util.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
2566
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2567 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
2568 ph = patchheader(q.join(parent), q.plainmode)
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
2569 message, user = ph.message, ph.user
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2570 for msg in messages:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2571 message.append('* * *')
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2572 message.extend(msg)
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2573 message = '\n'.join(message)
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2574
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2575 if opts.get('edit'):
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2576 message = ui.edit(message, user or ui.username())
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2577
10186
296a0b14a686 mq: preserve --git flag when folding patches
Patrick Mezard <pmezard@gmail.com>
parents: 10185
diff changeset
2578 diffopts = q.patchopts(q.diffopts(), *patches)
14620
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2579 wlock = repo.wlock()
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2580 try:
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2581 q.refresh(repo, msg=message, git=diffopts.git)
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2582 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
2583 q.savedirty()
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2584 finally:
2b9c32929e62 mq: make qrefresh/qfold keep wlock until saving patch status
Yuya Nishihara <yuya@tcha.org>
parents: 14600
diff changeset
2585 wlock.release()
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2586
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2587 @command("qgoto",
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2588 [('', 'keep-changes', None,
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2589 _('tolerate non-conflicting local changes')),
16655
6ca125af882f mq: introduce qgoto --check
Patrick Mezard <patrick@mezard.eu>
parents: 16654
diff changeset
2590 ('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
2591 ('', '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
2592 _('hg qgoto [OPTION]... PATCH'))
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2593 def goto(ui, repo, patch, **opts):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2594 '''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
2595
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2596 Returns 0 on success.'''
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2597 opts = fixkeepchangesopts(ui, opts)
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2598 q = repo.mq
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2599 patch = q.lookup(patch)
16635
9d76320d8b99 mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents: 16634
diff changeset
2600 nobackup = opts.get('no_backup')
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2601 keepchanges = opts.get('keep_changes')
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2602 if q.isapplied(patch):
16655
6ca125af882f mq: introduce qgoto --check
Patrick Mezard <patrick@mezard.eu>
parents: 16654
diff changeset
2603 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
2604 keepchanges=keepchanges)
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2605 else:
16655
6ca125af882f mq: introduce qgoto --check
Patrick Mezard <patrick@mezard.eu>
parents: 16654
diff changeset
2606 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
2607 keepchanges=keepchanges)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2608 q.savedirty()
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2609 return ret
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2610
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2611 @command("qguard",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2612 [('l', 'list', None, _('list all patches and guards')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2613 ('n', 'none', None, _('drop all guards'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2614 _('hg qguard [-l] [-n] [PATCH] [-- [+GUARD]... [-GUARD]...]'))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2615 def guard(ui, repo, *args, **opts):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2616 '''set or print guards for a patch
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2617
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2618 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
2619 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
2620 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
2621 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
2622 has activated it.
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2623
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2624 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
2625 With arguments, set guards for the named patch.
12389
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 12380
diff changeset
2626
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 12380
diff changeset
2627 .. note::
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 12380
diff changeset
2628 Specifying negative guards now requires '--'.
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2629
9824
87c92b260710 mq: fix literal blocks in docstrings
Martin Geisler <mg@lazybytes.net>
parents: 9733
diff changeset
2630 To set guards on another patch::
87c92b260710 mq: fix literal blocks in docstrings
Martin Geisler <mg@lazybytes.net>
parents: 9733
diff changeset
2631
10476
3113736dbac5 mq: more instructive use of "--" in qguard help (issue2040)
Martin Geisler <mg@lazybytes.net>
parents: 10413
diff changeset
2632 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
2633
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2634 Returns 0 on success.
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2635 '''
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2636 def status(idx):
14573
d590ff1f22b2 mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14572
diff changeset
2637 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
2638 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
2639 state = 'applied'
1c00577b0298 qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11789
diff changeset
2640 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
2641 state = 'unapplied'
1c00577b0298 qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11789
diff changeset
2642 else:
1c00577b0298 qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11789
diff changeset
2643 state = 'guarded'
1c00577b0298 qguard: label patch names by status when listing guards
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11789
diff changeset
2644 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
2645 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
2646
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2647 for i, guard in enumerate(guards):
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2648 if guard.startswith('+'):
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2649 ui.write(guard, label='qguard.positive')
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2650 elif guard.startswith('-'):
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2651 ui.write(guard, label='qguard.negative')
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2652 else:
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2653 ui.write(guard, label='qguard.unguarded')
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2654 if i != len(guards) - 1:
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2655 ui.write(' ')
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2656 ui.write('\n')
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2657 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
2658 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
2659 patch = None
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2660 args = list(args)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2661 if opts.get('list'):
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2662 if args or opts.get('none'):
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2663 raise util.Abort(_('cannot mix -l/--list with options or '
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2664 'arguments'))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2665 for i in xrange(len(q.series)):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2666 status(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2667 return
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2668 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
2669 if not q.applied:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2670 raise util.Abort(_('no patches applied'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2671 patch = q.applied[-1].name
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2672 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
2673 patch = args.pop(0)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2674 if patch is None:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2675 raise util.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
2676 if args or opts.get('none'):
14574
12fba7bcb4f1 mq: rename find_series to findseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14573
diff changeset
2677 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
2678 if idx is None:
a9ee6c53af8d mq: abort cleanly when invalid patch name is given to qguard
Christian Ebert <blacktrash@gmx.net>
parents: 4090
diff changeset
2679 raise util.Abort(_('no patch named %s') % patch)
14577
76357276662e mq: rename set_guards to setguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14576
diff changeset
2680 q.setguards(idx, args)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2681 q.savedirty()
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2682 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2683 status(q.series.index(q.lookup(patch)))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2684
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2685 @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
2686 def header(ui, repo, patch=None):
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2687 """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
2688
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2689 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
2690 q = repo.mq
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2691
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2692 if patch:
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2693 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
2694 else:
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2695 if not q.applied:
10510
f77f3383c666 i18n: mark more strings for translation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10498
diff changeset
2696 ui.write(_('no patches applied\n'))
3008
c203ccd7d838 qheader: exit withh meaningful error code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3006
diff changeset
2697 return 1
2747
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2698 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
2699 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
2700
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
2701 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
2702
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2703 def lastsavename(path):
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
2704 (directory, base) = os.path.split(path)
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
2705 names = os.listdir(directory)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2706 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
2707 maxindex = None
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2708 maxname = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2709 for f in names:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2710 m = namere.match(f)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2711 if m:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2712 index = int(m.group(1))
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
2713 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
2714 maxindex = index
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2715 maxname = f
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2716 if maxname:
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
2717 return (os.path.join(directory, maxname), maxindex)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2718 return (None, None)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2719
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2720 def savename(path):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2721 (last, index) = lastsavename(path)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2722 if last is None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2723 index = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2724 newpath = path + ".%d" % (index + 1)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2725 return newpath
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2726
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2727 @command("^qpush",
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2728 [('', 'keep-changes', None,
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2729 _('tolerate non-conflicting local changes')),
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
2730 ('f', 'force', None, _('apply on top of local changes')),
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2731 ('e', 'exact', None,
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16657
diff changeset
2732 _('apply the target patch to its recorded parent')),
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2733 ('l', 'list', None, _('list patch name in commit text')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2734 ('a', 'all', None, _('apply all patches')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2735 ('m', 'merge', None, _('merge from another queue (DEPRECATED)')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2736 ('n', 'name', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2737 _('merge queue name (DEPRECATED)'), _('NAME')),
16635
9d76320d8b99 mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents: 16634
diff changeset
2738 ('', 'move', None,
9d76320d8b99 mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents: 16634
diff changeset
2739 _('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
2740 ('', '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
2741 _('hg qpush [-f] [-l] [-a] [--move] [PATCH | INDEX]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2742 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
2743 """push the next patch onto the stack
6553
0bb76d168437 remove trailing spaces
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6552
diff changeset
2744
16654
490ed8972f1b mq: introduce qpush --check
Patrick Mezard <patrick@mezard.eu>
parents: 16653
diff changeset
2745 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
2746 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
2747 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
2748 uncommitted changes.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2749
13725
6783f47d90dd mq: fix typo in docstring
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents: 13632
diff changeset
2750 Return 0 on success.
6552
315b36ce6251 mq: add a little documentation on qpush -f
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6382
diff changeset
2751 """
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2752 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2753 mergeq = None
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2754
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2755 opts = fixkeepchangesopts(ui, opts)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2756 if opts.get('merge'):
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2757 if opts.get('name'):
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2758 newpath = repo.join(opts.get('name'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2759 else:
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2760 newpath, i = lastsavename(q.path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2761 if not newpath:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2762 ui.warn(_("no saved queues found, please use -n\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2763 return 1
15878
914b013d3263 mq: minor cleanup
Mads Kiilerich <mads@kiilerich.com>
parents: 15801
diff changeset
2764 mergeq = queue(ui, repo.path, newpath)
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2765 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
2766 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
2767 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
2768 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
2769 keepchanges=opts.get('keep_changes'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2770 return ret
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2771
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2772 @command("^qpop",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2773 [('a', 'all', None, _('pop all patches')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2774 ('n', 'name', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2775 _('queue name to pop (DEPRECATED)'), _('NAME')),
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2776 ('', 'keep-changes', None,
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2777 _('tolerate non-conflicting local changes')),
16635
9d76320d8b99 mq: add --no-backup for qpush/qpop/qgoto
Patrick Mezard <patrick@mezard.eu>
parents: 16634
diff changeset
2778 ('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
2779 ('', '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
2780 _('hg qpop [-a] [-f] [PATCH | INDEX]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2781 def pop(ui, repo, patch=None, **opts):
6611
f4c612da788d mq: add correct documentation for qpop
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6610
diff changeset
2782 """pop the current patch off the stack
6621
d5cbbe2c49ce mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6611
diff changeset
2783
16653
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
2784 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
2785 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
2786 the top of the stack.
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
2787
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
2788 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
2789 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
2790 overlap with patched files. With -f/--force, backup and discard
73b8c2554be8 mq: introduce qpop --check
Patrick Mezard <patrick@mezard.eu>
parents: 16635
diff changeset
2791 changes made to such files.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2792
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2793 Return 0 on success.
6611
f4c612da788d mq: add correct documentation for qpop
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6610
diff changeset
2794 """
16733
4da10c00a20c mq: rename --check into --keep-changes
Patrick Mezard <patrick@mezard.eu>
parents: 16718
diff changeset
2795 opts = fixkeepchangesopts(ui, opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2796 localupdate = True
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2797 if opts.get('name'):
15878
914b013d3263 mq: minor cleanup
Mads Kiilerich <mads@kiilerich.com>
parents: 15801
diff changeset
2798 q = queue(ui, repo.path, repo.join(opts.get('name')))
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2799 ui.warn(_('using patch queue: %s\n') % q.path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2800 localupdate = False
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2801 else:
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2802 q = repo.mq
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2803 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
2804 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
2805 keepchanges=opts.get('keep_changes'))
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2806 q.savedirty()
4099
cf5580c16b13 mq: propagate the return error of pop
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4096
diff changeset
2807 return ret
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2808
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2809 @command("qrename|qmv", [], _('hg qrename PATCH1 [PATCH2]'))
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2810 def rename(ui, repo, patch, name=None, **opts):
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2811 """rename a patch
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2812
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2813 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
2814 With two arguments, renames PATCH1 to PATCH2.
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2815
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2816 Returns 0 on success."""
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2817 q = repo.mq
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2818 if not name:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2819 name = patch
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2820 patch = None
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2821
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2822 if patch:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2823 patch = q.lookup(patch)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2824 else:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2825 if not q.applied:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2826 ui.write(_('no patches applied\n'))
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2827 return
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2828 patch = q.lookup('qtip')
3083
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
2829 absdest = q.join(name)
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
2830 if os.path.isdir(absdest):
4037
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
2831 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
2832 absdest = q.join(name)
14423
7230aef66b7c mq: use checkpatchname
Idan Kamara <idankk86@gmail.com>
parents: 14422
diff changeset
2833 q.checkpatchname(name)
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2834
10510
f77f3383c666 i18n: mark more strings for translation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10498
diff changeset
2835 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
2836 i = q.findseries(patch)
14572
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
2837 guards = q.guard_re.findall(q.fullseries[i])
8ff2957c1d82 mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents: 14564
diff changeset
2838 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
2839 q.parseseries()
15879
710e6bf15538 mq: consistently use boolean values for dirty flags
Mads Kiilerich <mads@kiilerich.com>
parents: 15878
diff changeset
2840 q.seriesdirty = True
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2841
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2842 info = q.isapplied(patch)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2843 if info:
2818
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2816
diff changeset
2844 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
2845 q.applieddirty = True
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2846
11513
0c944b7af564 mq: fixed ENOENT when qrename to new/directory.patch
Yuya Nishihara <yuya@tcha.org>
parents: 11462
diff changeset
2847 destdir = os.path.dirname(absdest)
0c944b7af564 mq: fixed ENOENT when qrename to new/directory.patch
Yuya Nishihara <yuya@tcha.org>
parents: 11462
diff changeset
2848 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
2849 os.makedirs(destdir)
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
2850 util.rename(q.join(patch), absdest)
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2851 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
2852 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
2853 wctx = r[None]
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2854 wlock = r.wlock()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
2855 try:
6648
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
2856 if r.dirstate[patch] == 'a':
14434
cc8c09855d19 dirstate: rename forget to drop
Matt Mackall <mpm@selenic.com>
parents: 14424
diff changeset
2857 r.dirstate.drop(patch)
6648
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
2858 r.dirstate.add(name)
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
2859 else:
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11302
diff changeset
2860 wctx.copy(patch, name)
14435
5f6090e559fa context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents: 14434
diff changeset
2861 wctx.forget([patch])
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
2862 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
2863 wlock.release()
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2864
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2865 q.savedirty()
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2866
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2867 @command("qrestore",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2868 [('d', 'delete', None, _('delete save entry')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2869 ('u', 'update', None, _('update queue working directory'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2870 _('hg qrestore [-d] [-u] REV'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2871 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
2872 """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
2873
12352
5be733b20bd1 mq: fix the deprecation comment for qsave & qrestore.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12344
diff changeset
2874 This command is deprecated, use :hg:`rebase` instead."""
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2875 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
2876 q = repo.mq
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2877 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
2878 qupdate=opts.get('update'))
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
2879 q.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2880 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2881
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2882 @command("qsave",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2883 [('c', 'copy', None, _('copy patch directory')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2884 ('n', 'name', '',
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2885 _('copy directory name'), _('NAME')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2886 ('e', 'empty', None, _('clear queue status file')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2887 ('f', 'force', None, _('force copy'))] + commands.commitopts,
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2888 _('hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2889 def save(ui, repo, **opts):
10360
bcf90e712dc3 mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10359
diff changeset
2890 """save current queue state (DEPRECATED)
bcf90e712dc3 mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10359
diff changeset
2891
12352
5be733b20bd1 mq: fix the deprecation comment for qsave & qrestore.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12344
diff changeset
2892 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
2893 q = repo.mq
14635
217b7d83afc3 cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents: 14620
diff changeset
2894 message = cmdutil.logmessage(ui, opts)
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
2895 ret = q.save(repo, msg=message)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2896 if ret:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2897 return ret
15880
02b135558756 mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents: 15879
diff changeset
2898 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
2899 if opts.get('copy'):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2900 path = q.path
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2901 if opts.get('name'):
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2902 newpath = os.path.join(q.basepath, opts.get('name'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2903 if os.path.exists(newpath):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2904 if not os.path.isdir(newpath):
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
2905 raise util.Abort(_('destination %s exists and is not '
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
2906 'a directory') % newpath)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2907 if not opts.get('force'):
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
2908 raise util.Abort(_('destination %s exists, '
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
2909 'use -f to force') % newpath)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2910 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2911 newpath = savename(path)
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2912 ui.warn(_("copy %s to %s\n") % (path, newpath))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2913 util.copyfiles(path, newpath)
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2914 if opts.get('empty'):
15880
02b135558756 mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents: 15879
diff changeset
2915 del q.applied[:]
02b135558756 mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents: 15879
diff changeset
2916 q.applieddirty = True
02b135558756 mq: make qsave implementation more explicit
Mads Kiilerich <mads@kiilerich.com>
parents: 15879
diff changeset
2917 q.savedirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2918 return 0
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2919
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2920 @command("strip",
15148
510184e5a09e mq.strip: allow -r option, optionally
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15087
diff changeset
2921 [
510184e5a09e mq.strip: allow -r option, optionally
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15087
diff changeset
2922 ('r', 'rev', [], _('strip specified revision (optional, '
510184e5a09e mq.strip: allow -r option, optionally
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15087
diff changeset
2923 'can specify revisions without this '
510184e5a09e mq.strip: allow -r option, optionally
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15087
diff changeset
2924 'option)'), _('REV')),
510184e5a09e mq.strip: allow -r option, optionally
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15087
diff changeset
2925 ('f', 'force', None, _('force removal of changesets, discard '
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2926 'uncommitted changes (no backup)')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2927 ('b', 'backup', None, _('bundle only changesets with local revision'
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2928 ' number greater than REV which are not'
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2929 ' descendants of REV (DEPRECATED)')),
16278
900eee0778d1 strip: ignore -n (issue3326) (BC)
Matt Mackall <mpm@selenic.com>
parents: 16252
diff changeset
2930 ('', 'no-backup', None, _('no backups')),
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
2931 ('', 'nobackup', None, _('no backups (DEPRECATED)')),
16278
900eee0778d1 strip: ignore -n (issue3326) (BC)
Matt Mackall <mpm@selenic.com>
parents: 16252
diff changeset
2932 ('n', '', None, _('ignored (DEPRECATED)')),
16718
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2933 ('k', 'keep', None, _("do not modify working copy during strip")),
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2934 ('B', 'bookmark', '', _("remove revs only reachable from given"
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2935 " bookmark"))],
16989
0b1d15194b3c strip: add optional -r to synopsis
Thomas Arendsen Hein <thomas@intevation.de>
parents: 16988
diff changeset
2936 _('hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV...'))
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
2937 def strip(ui, repo, *revs, **opts):
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
2938 """strip changesets and all their descendants from the repository
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
2939
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
2940 The strip command removes the specified changesets and all their
14502
deb82fdda94e strip: make it clear that --force discards changes (issue310)
Patrick Mezard <pmezard@gmail.com>
parents: 14170
diff changeset
2941 descendants. If the working directory has uncommitted changes, the
deb82fdda94e strip: make it clear that --force discards changes (issue310)
Patrick Mezard <pmezard@gmail.com>
parents: 14170
diff changeset
2942 operation is aborted unless the --force flag is supplied, in which
deb82fdda94e strip: make it clear that --force discards changes (issue310)
Patrick Mezard <pmezard@gmail.com>
parents: 14170
diff changeset
2943 case changes will be discarded.
6635
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2944
11073
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2945 If a parent of the working directory is stripped, then the working
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2946 directory will automatically be updated to the most recent
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2947 available ancestor of the stripped parent after the operation
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2948 completes.
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2949
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2950 Any stripped changesets are stored in ``.hg/strip-backup`` as a
11193
687c7d395f20 Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents: 11121
diff changeset
2951 bundle (see :hg:`help bundle` and :hg:`help unbundle`). They can
687c7d395f20 Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents: 11121
diff changeset
2952 be restored by running :hg:`unbundle .hg/strip-backup/BUNDLE`,
11073
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2953 where BUNDLE is the bundle file created by the strip. Note that
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2954 the local revision numbers will in general be different after the
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2955 restore.
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2956
12282
9e457c3f47d9 mq: rename strip --nobackup option to --no-backup (issue2377)
Christian Ebert <blacktrash@gmx.net>
parents: 12281
diff changeset
2957 Use the --no-backup option to discard the backup bundle once the
11073
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2958 operation completes.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2959
17047
d63fb1fce977 strip: update help to state than you can strip public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16681
diff changeset
2960 Strip is not a history-rewriting operation and can be used on
d63fb1fce977 strip: update help to state than you can strip public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16681
diff changeset
2961 changesets in the public phase. But if the stripped changesets have
d63fb1fce977 strip: update help to state than you can strip public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16681
diff changeset
2962 been pushed to a remote repository you will likely pull them again.
d63fb1fce977 strip: update help to state than you can strip public changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16681
diff changeset
2963
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
2964 Return 0 on success.
6635
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2965 """
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2966 backup = 'all'
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
2967 if opts.get('backup'):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2968 backup = 'strip'
13224
0a1eefaf98f2 strip: typo bugfix related to '--nobackup -> --no-backup' rename (issue2377)
Jacek Sowiński <mruwek.gentoo@vcf.pl>
parents: 13035
diff changeset
2969 elif opts.get('no_backup') or opts.get('nobackup'):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2970 backup = 'none'
6635
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2971
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2972 cl = repo.changelog
15148
510184e5a09e mq.strip: allow -r option, optionally
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15087
diff changeset
2973 revs = list(revs) + opts.get('rev')
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14298
diff changeset
2974 revs = set(scmutil.revrange(repo, revs))
16718
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2975
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2976 if opts.get('bookmark'):
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2977 mark = opts.get('bookmark')
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2978 marks = repo._bookmarks
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2979 if mark not in marks:
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2980 raise util.Abort(_("bookmark '%s' not found") % mark)
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2981
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2982 # If the requested bookmark is not the only one pointing to a
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2983 # a revision we have to only delete the bookmark and not strip
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2984 # anything. revsets cannot detect that case.
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2985 uniquebm = True
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2986 for m, n in marks.iteritems():
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2987 if m != mark and n == repo[mark].node():
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2988 uniquebm = False
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2989 break
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2990 if uniquebm:
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2991 rsrevs = repo.revs("ancestors(bookmark(%s)) - "
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2992 "ancestors(head() and not bookmark(%s)) - "
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2993 "ancestors(bookmark() and not bookmark(%s))",
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2994 mark, mark, mark)
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2995 revs.update(set(rsrevs))
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2996 if not revs:
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2997 del marks[mark]
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17893
diff changeset
2998 marks.write()
16718
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
2999 ui.write(_("bookmark '%s' deleted\n") % mark)
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
3000
12767
c3316b6a3219 strip: support revision sets
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 12755
diff changeset
3001 if not revs:
12775
cbbcabde2414 mq: mark string for i18n
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 12767
diff changeset
3002 raise util.Abort(_('empty revision set'))
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3003
16867
1093ad1e8903 revlog: descendants(*revs) becomes descendants(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents: 16829
diff changeset
3004 descendants = set(cl.descendants(revs))
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3005 strippedrevs = revs.union(descendants)
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3006 roots = revs.difference(descendants)
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3007
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3008 update = False
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3009 # if one of the wdir parent is stripped we'll need
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3010 # to update away to an earlier revision
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3011 for p in repo.dirstate.parents():
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3012 if p != nullid and cl.rev(p) in strippedrevs:
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3013 update = True
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3014 break
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3015
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3016 rootnodes = set(cl.node(r) for r in roots)
6635
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
3017
11637
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
3018 q = repo.mq
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
3019 if q.applied:
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3020 # refresh queue state if we're about to strip
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3021 # applied patches
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3022 if cl.rev(repo.lookup('qtip')) in strippedrevs:
14592
fc94add69d9f mq: rename applied_dirty to applieddirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14591
diff changeset
3023 q.applieddirty = True
11637
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
3024 start = 0
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
3025 end = len(q.applied)
11789
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3026 for i, statusentry in enumerate(q.applied):
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3027 if statusentry.node in rootnodes:
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3028 # if one of the stripped roots is an applied
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3029 # patch, only part of the queue is stripped
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3030 start = i
e2bce1c717fa strip: support multiple revisions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11767
diff changeset
3031 break
11637
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
3032 del q.applied[start:end]
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
3033 q.savedirty()
11637
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
3034
18371
ff2c89ebf5d4 mq: stabilize update after strip of parent revision
Mads Kiilerich <mads@kiilerich.com>
parents: 18364
diff changeset
3035 revs = sorted(rootnodes)
12682
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3036 if update and opts.get('keep'):
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3037 wlock = repo.wlock()
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3038 try:
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3039 urev = repo.mq.qparents(repo, revs[0])
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3040 repo.dirstate.rebuild(urev, repo[urev].manifest())
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3041 repo.dirstate.write()
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3042 update = False
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3043 finally:
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3044 wlock.release()
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3045
16718
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
3046 if opts.get('bookmark'):
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
3047 del marks[mark]
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17893
diff changeset
3048 marks.write()
16718
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
3049 ui.write(_("bookmark '%s' deleted\n") % mark)
3290e24bb3f0 strip: introduce -B option to remove a bookmark
David Soria Parra <dsp@php.net>
parents: 16705
diff changeset
3050
12682
58a3e2608ae4 strip: add --keep flag to avoid modifying wc during strip
Augie Fackler <durin42@gmail.com>
parents: 12658
diff changeset
3051 repo.mq.strip(repo, revs, backup=backup, update=update,
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3052 force=opts.get('force'))
16829
6403fdd716fe strip: move bookmark deletion before strip to deal with filecache invalidation
Matt Mackall <mpm@selenic.com>
parents: 16743
diff changeset
3053
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3054 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3055
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3056 @command("qselect",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3057 [('n', 'none', None, _('disable all guards')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3058 ('s', 'series', None, _('list all guards in series file')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3059 ('', 'pop', None, _('pop to before first guarded applied patch')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3060 ('', 'reapply', None, _('pop, then reapply patches'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3061 _('hg qselect [OPTION]... [GUARD]...'))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3062 def select(ui, repo, *args, **opts):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3063 '''set or print guarded patches to push
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3064
11307
7f72031d4047 mq: use hg reST role some more
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
3065 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
3066 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
3067 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
3068 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
3069 match the current guard. For example::
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3070
13791
794f4476b974 mq: fix qselect help for qguard
timeless@gmail.com
parents: 13725
diff changeset
3071 qguard foo.patch -- -stable (negative guard)
794f4476b974 mq: fix qselect help for qguard
timeless@gmail.com
parents: 13725
diff changeset
3072 qguard bar.patch +stable (positive guard)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3073 qselect stable
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3074
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
3075 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
3076 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
3077 positive match).
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3078
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
3079 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
3080 With one argument, sets the active guard.
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
3081
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
3082 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
3083 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
3084 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
3085
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
3086 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
3087 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
3088 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
3089 --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
3090 guarded patches.
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3091
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
3092 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
3093 (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
3094
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
3095 Returns 0 on success.'''
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3096
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3097 q = repo.mq
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3098 guards = q.active()
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3099 if args or opts.get('none'):
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3100 old_unapplied = q.unapplied(repo)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3101 old_guarded = [i for i in xrange(len(q.applied)) if
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3102 not q.pushable(i)[0]]
14578
28a2646f3b81 mq: rename set_active to setactive
Adrian Buehlmann <adrian@cadifra.com>
parents: 14577
diff changeset
3103 q.setactive(args)
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
3104 q.savedirty()
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3105 if not args:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3106 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
3107 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
3108 unapplied = q.unapplied(repo)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3109 guarded = [i for i in xrange(len(q.applied))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3110 if not q.pushable(i)[0]]
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3111 if len(unapplied) != len(old_unapplied):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3112 ui.status(_('number of unguarded, unapplied patches has '
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3113 'changed from %d to %d\n') %
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3114 (len(old_unapplied), len(unapplied)))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3115 if len(guarded) != len(old_guarded):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3116 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
3117 'from %d to %d\n') %
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3118 (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
3119 elif opts.get('series'):
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3120 guards = {}
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3121 noguards = 0
14573
d590ff1f22b2 mq: rename series_guards to seriesguards
Adrian Buehlmann <adrian@cadifra.com>
parents: 14572
diff changeset
3122 for gs in q.seriesguards:
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3123 if not gs:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3124 noguards += 1
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3125 for g in gs:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3126 guards.setdefault(g, 0)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3127 guards[g] += 1
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3128 if ui.verbose:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3129 guards['NONE'] = noguards
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3130 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
3131 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
3132 if guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3133 ui.note(_('guards in series file:\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3134 for guard, count in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3135 ui.note('%2d ' % count)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3136 ui.write(guard, '\n')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3137 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3138 ui.note(_('no guards in series file\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3139 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3140 if guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3141 ui.note(_('active guards:\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3142 for g in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3143 ui.write(g, '\n')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3144 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3145 ui.write(_('no active guards\n'))
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3146 reapply = opts.get('reapply') and q.applied and q.appliedname(-1)
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3147 popped = False
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3148 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
3149 for i in xrange(len(q.applied)):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3150 pushable, reason = q.pushable(i)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3151 if not pushable:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3152 ui.status(_('popping guarded patches\n'))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3153 popped = True
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3154 if i == 0:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3155 q.pop(repo, all=True)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3156 else:
15256
8caf7a757afa mq: fix corner cases for handling of patch 0 in qselect
Mads Kiilerich <mads@kiilerich.com>
parents: 15148
diff changeset
3157 q.pop(repo, str(i - 1))
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3158 break
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3159 if popped:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3160 try:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3161 if reapply:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3162 ui.status(_('reapplying unguarded patches\n'))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3163 q.push(repo, reapply)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
3164 finally:
14580
92101ea35015 mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents: 14579
diff changeset
3165 q.savedirty()
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
3166
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3167 @command("qfinish",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3168 [('a', 'applied', None, _('finish all applied changesets'))],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3169 _('hg qfinish [-a] [REV]...'))
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3170 def finish(ui, repo, *revrange, **opts):
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3171 """move applied patches into repository history
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3172
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
3173 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
3174 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
3175 history.
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3176
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
3177 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
3178 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
3179 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
3180 stack of applied patches.
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3181
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
3182 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
3183 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
3184 to upstream.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
3185
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
3186 Returns 0 on success.
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3187 """
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3188 if not opts.get('applied') and not revrange:
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3189 raise util.Abort(_('no revisions specified'))
12281
d9cf0d1d0d0f mq: consistently use opts.get() to prevent potential KeyError
Christian Ebert <blacktrash@gmx.net>
parents: 12266
diff changeset
3190 elif opts.get('applied'):
11730
7469ff872122 qfinish: fix range logic for --applied
Matt Mackall <mpm@selenic.com>
parents: 11717
diff changeset
3191 revrange = ('qbase::qtip',) + revrange
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3192
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3193 q = repo.mq
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3194 if not q.applied:
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3195 ui.status(_('no patches applied\n'))
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3196 return 0
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3197
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14298
diff changeset
3198 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
3199 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
3200 ui.warn(_('warning: uncommitted changes in the working directory\n'))
17512
39e7e74b3cd3 spelling: responsibility
timeless@mozdev.org
parents: 17191
diff changeset
3201 # 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
3202 # 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
3203 # responsibility for this locking.
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
3204 lock = repo.lock()
885e0c71db9b mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15883
diff changeset
3205 try:
885e0c71db9b mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15883
diff changeset
3206 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
3207 q.savedirty()
885e0c71db9b mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15883
diff changeset
3208 finally:
885e0c71db9b mq: turn changeset draft on qfinish (except if qparent is secret)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15883
diff changeset
3209 lock.release()
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3210 return 0
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3211
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3212 @command("qqueue",
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3213 [('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
3214 ('', 'active', False, _('print name of active queue')),
14298
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3215 ('c', 'create', False, _('create new queue')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3216 ('', 'rename', False, _('rename active queue')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3217 ('', 'delete', False, _('delete reference to queue')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3218 ('', 'purge', False, _('delete queue, and remove patch dir')),
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3219 ],
21719639276d mq: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14267
diff changeset
3220 _('[OPTION] [QUEUE]'))
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3221 def qqueue(ui, repo, name=None, **opts):
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3222 '''manage multiple patch queues
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3223
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3224 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
3225 new patch queues and deleting existing ones.
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3226
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3227 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
3228 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
3229 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
3230 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
3231
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3232 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
3233 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
3234 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
3235 created and switching will fail.
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3236
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3237 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
3238 active queue.
12538
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
3239
c87216e5e43e mq: added return 0 on success
Erik Zielke <ez@aragost.com>
parents: 12508
diff changeset
3240 Returns 0 on success.
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3241 '''
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3242 q = repo.mq
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3243 _defaultqueue = 'patches'
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3244 _allqueues = 'patches.queues'
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3245 _activequeue = 'patches.queue'
11229
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 def _getcurrent():
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3248 cur = os.path.basename(q.path)
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3249 if cur.startswith('patches-'):
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3250 cur = cur[8:]
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3251 return cur
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3252
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3253 def _noqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3254 try:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3255 fh = repo.opener(_allqueues, 'r')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3256 fh.close()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3257 except IOError:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3258 return True
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3259
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3260 return False
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 def _getqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3263 current = _getcurrent()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3264
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3265 try:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3266 fh = repo.opener(_allqueues, 'r')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3267 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
3268 fh.close()
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3269 if current not in queues:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3270 queues.append(current)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3271 except IOError:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3272 queues = [_defaultqueue]
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3273
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3274 return sorted(queues)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3275
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3276 def _setactive(name):
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3277 if q.applied:
17708
4f2f0f367ef6 mq: improve qqueue message with patches applied (issue3036)
Bryan O'Sullivan <bryano@fb.com>
parents: 17537
diff changeset
3278 raise util.Abort(_('new queue created, but cannot make active '
4f2f0f367ef6 mq: improve qqueue message with patches applied (issue3036)
Bryan O'Sullivan <bryano@fb.com>
parents: 17537
diff changeset
3279 'as patches are applied'))
11938
b8b1e6e78486 mq/qqueue: split _setactive
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11819
diff changeset
3280 _setactivenocheck(name)
b8b1e6e78486 mq/qqueue: split _setactive
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11819
diff changeset
3281
b8b1e6e78486 mq/qqueue: split _setactive
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11819
diff changeset
3282 def _setactivenocheck(name):
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3283 fh = repo.opener(_activequeue, 'w')
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3284 if name != 'patches':
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3285 fh.write(name)
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3286 fh.close()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3287
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3288 def _addqueue(name):
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3289 fh = repo.opener(_allqueues, 'a')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3290 fh.write('%s\n' % (name,))
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3291 fh.close()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3292
11939
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3293 def _queuedir(name):
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3294 if name == 'patches':
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3295 return repo.join('patches')
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3296 else:
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3297 return repo.join('patches-' + name)
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3298
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3299 def _validname(name):
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3300 for n in name:
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3301 if n in ':\\/.':
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3302 return False
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3303 return True
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3304
11966
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3305 def _delete(name):
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3306 if name not in existing:
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3307 raise util.Abort(_('cannot delete queue that does not exist'))
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3308
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3309 current = _getcurrent()
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3310
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3311 if name == current:
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3312 raise util.Abort(_('cannot delete currently active queue'))
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3313
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3314 fh = repo.opener('patches.queues.new', 'w')
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3315 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
3316 if queue == name:
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3317 continue
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3318 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
3319 fh.close()
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3320 util.rename(repo.join('patches.queues.new'), repo.join(_allqueues))
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3321
14987
3709cca378ff mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14943
diff changeset
3322 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
3323 current = _getcurrent()
14987
3709cca378ff mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14943
diff changeset
3324 if opts.get('active'):
3709cca378ff mq/qqueue: print current queue name
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14943
diff changeset
3325 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
3326 return
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3327 for queue in _getqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3328 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
3329 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
3330 ui.write(_(' (active)\n'))
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3331 else:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3332 ui.write('\n')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3333 return
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3334
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3335 if not _validname(name):
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3336 raise util.Abort(
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3337 _('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
3338
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3339 existing = _getqueues()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3340
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3341 if opts.get('create'):
11271
d1aca0863a9d mq: prevent the creation of a queue whose name is already taken
Cédric Duval <cedricduval@free.fr>
parents: 11270
diff changeset
3342 if name in existing:
d1aca0863a9d mq: prevent the creation of a queue whose name is already taken
Cédric Duval <cedricduval@free.fr>
parents: 11270
diff changeset
3343 raise util.Abort(_('queue "%s" already exists') % name)
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3344 if _noqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3345 _addqueue(_defaultqueue)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3346 _addqueue(name)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3347 _setactive(name)
11939
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3348 elif opts.get('rename'):
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3349 current = _getcurrent()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3350 if name == current:
11939
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3351 raise util.Abort(_('can\'t rename "%s" to its current name') % name)
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3352 if name in existing:
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3353 raise util.Abort(_('queue "%s" already exists') % name)
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3354
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3355 olddir = _queuedir(current)
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3356 newdir = _queuedir(name)
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3357
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3358 if os.path.exists(newdir):
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3359 raise util.Abort(_('non-queue directory "%s" already exists') %
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3360 newdir)
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3361
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3362 fh = repo.opener('patches.queues.new', 'w')
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3363 for queue in existing:
11939
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3364 if queue == current:
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3365 fh.write('%s\n' % (name,))
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3366 if os.path.exists(olddir):
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3367 util.rename(olddir, newdir)
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3368 else:
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3369 fh.write('%s\n' % (queue,))
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3370 fh.close()
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
3371 util.rename(repo.join('patches.queues.new'), repo.join(_allqueues))
11939
7d2ea5ce4aac mq/qqueue: enable renaming of active queue
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11938
diff changeset
3372 _setactivenocheck(name)
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3373 elif opts.get('delete'):
11966
22f1994fb669 mq/qqueue: commonalise the queue deletion code
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 11947
diff changeset
3374 _delete(name)
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
3375 elif opts.get('purge'):
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
3376 if name in existing:
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
3377 _delete(name)
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
3378 qdir = _queuedir(name)
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
3379 if os.path.exists(qdir):
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
3380 shutil.rmtree(qdir)
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3381 else:
11271
d1aca0863a9d mq: prevent the creation of a queue whose name is already taken
Cédric Duval <cedricduval@free.fr>
parents: 11270
diff changeset
3382 if name not in existing:
d1aca0863a9d mq: prevent the creation of a queue whose name is already taken
Cédric Duval <cedricduval@free.fr>
parents: 11270
diff changeset
3383 raise util.Abort(_('use --create to create a new queue'))
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3384 _setactive(name)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3385
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
3386 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
3387 """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
3388 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
3389 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
3390 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
3391 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
3392 mqphase = phases.draft
15972
341c58282b25 mq: pass qbase node instead of mq statusentry in phasedefaults
Augie Fackler <durin42@gmail.com>
parents: 15952
diff changeset
3393 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
3394 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
3395 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
3396
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3397 def reposetup(ui, repo):
2818
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2816
diff changeset
3398 class mqrepo(repo.__class__):
8524
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
3399 @util.propertycache
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
3400 def mq(self):
15878
914b013d3263 mq: minor cleanup
Mads Kiilerich <mads@kiilerich.com>
parents: 15801
diff changeset
3401 return queue(self.ui, self.path)
8524
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
3402
14596
6a0070d00bc8 mq: rename abort_if_wdir_patched to abortifwdirpatched
Adrian Buehlmann <adrian@cadifra.com>
parents: 14595
diff changeset
3403 def abortifwdirpatched(self, errmsg, force=False):
2848
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2845
diff changeset
3404 if self.mq.applied and not force:
13520
9510ddf87c43 mq: forbid commit of merge involving mq patches
Martin Geisler <mg@aragost.com>
parents: 13508
diff changeset
3405 parents = self.dirstate.parents()
9510ddf87c43 mq: forbid commit of merge involving mq patches
Martin Geisler <mg@aragost.com>
parents: 13508
diff changeset
3406 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
3407 if parents[0] in patches or parents[1] in patches:
2848
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2845
diff changeset
3408 raise util.Abort(errmsg)
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
3409
8711
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
3410 def commit(self, text="", user=None, date=None, match=None,
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
3411 force=False, editor=False, extra={}):
14596
6a0070d00bc8 mq: rename abort_if_wdir_patched to abortifwdirpatched
Adrian Buehlmann <adrian@cadifra.com>
parents: 14595
diff changeset
3412 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
3413 _('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
3414 force)
2845
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2844
diff changeset
3415
8711
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
3416 return super(mqrepo, self).commit(text, user, date, match, force,
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
3417 editor, extra)
2845
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2844
diff changeset
3418
13327
dc11e30b48a3 mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents: 13256
diff changeset
3419 def checkpush(self, force, revs):
12378
ab237534d800 mq: always require --force when pushing patches (issue2363)
Patrick Mezard <pmezard@gmail.com>
parents: 12352
diff changeset
3420 if self.mq.applied and not 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
3421 outapplied = [e.node for e in self.mq.applied]
12378
ab237534d800 mq: always require --force when pushing patches (issue2363)
Patrick Mezard <pmezard@gmail.com>
parents: 12352
diff changeset
3422 if 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
3423 # 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
3424 # 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
3425 # pushed.
ec8a9e06cf05 mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15934
diff changeset
3426 heads = set(revs)
ec8a9e06cf05 mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15934
diff changeset
3427 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
3428 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
3429 break
ec8a9e06cf05 mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15934
diff changeset
3430 else:
ec8a9e06cf05 mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15934
diff changeset
3431 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
3432 # 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
3433 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
3434 if self[node].phase() < phases.secret:
15952
ec8a9e06cf05 mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15934
diff changeset
3435 raise util.Abort(_('source has mq patches applied'))
ec8a9e06cf05 mq-safety: don't apply safety on non-outgoing changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15934
diff changeset
3436 # no non-secret patches pushed
13327
dc11e30b48a3 mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents: 13256
diff changeset
3437 super(mqrepo, self).checkpush(force, revs)
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
3438
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3439 def _findtags(self):
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3440 '''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
3441 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
3442
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
3443 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
3444 if not q.applied:
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3445 return result
2663
96950d39171d Mq: modify repo.lookup to resolve applied patches too.
Brendan Cully <brendan@kublai.com>
parents: 2554
diff changeset
3446
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
3447 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
3448
13508
0396ca8015be mq: fix qpush recursion in _findtags when status file is wrong (issue2664)
Matt Mackall <mpm@selenic.com>
parents: 13507
diff changeset
3449 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
3450 # 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
3451 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
3452 except error.LookupError:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
3453 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
3454 % short(mqtags[-1][0]))
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3455 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
3456
2723
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
3457 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
3458 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
3459 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
3460 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
3461 for patch in mqtags:
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3462 if patch[1] in tags:
16929
4b02d7006169 mq: lowercase warning messages
Martin Geisler <mg@aragost.com>
parents: 16867
diff changeset
3463 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
3464 '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
3465 else:
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3466 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
3467
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
3468 return result
2664
9b8df8dceeed Add qtip and qbase to mq qlookup.
Brendan Cully <brendan@kublai.com>
parents: 2663
diff changeset
3469
2851
82f50658c72b mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2850
diff changeset
3470 if repo.local():
82f50658c72b mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2850
diff changeset
3471 repo.__class__ = mqrepo
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3472
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
3473 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
3474
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
3475 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
3476 if (util.safehasattr(repo, 'abortifwdirpatched')
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
3477 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
3478 repo.abortifwdirpatched(_('cannot import over an applied patch'),
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
3479 kwargs.get('force'))
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
3480 return orig(ui, repo, *args, **kwargs)
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
3481
10402
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3482 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
3483 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
3484
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3485 if not mq:
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3486 return orig(ui, *args, **kwargs)
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3487
10691
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3488 if args:
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3489 repopath = args[0]
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3490 if not hg.islocal(repopath):
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3491 raise util.Abort(_('only a local queue repository '
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3492 'may be initialized'))
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3493 else:
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3494 repopath = cmdutil.findrepo(os.getcwd())
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
3495 if not repopath:
12067
a4fbbe0fbc38 Lowercase error messages
Martin Geisler <mg@lazybytes.net>
parents: 11965
diff changeset
3496 raise util.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
3497 '(.hg not found)'))
10402
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3498 repo = hg.repository(ui, repopath)
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
3499 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
3500
10359
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3501 def mqcommand(orig, ui, repo, *args, **kwargs):
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3502 """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
3503
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3504 # some commands do not like getting unknown options
10558
6505773080e4 mq: simplify --mq handling / keep compatibility with other extensions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10510
diff changeset
3505 mq = kwargs.pop('mq', None)
10359
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3506
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3507 if not mq:
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3508 return orig(ui, repo, *args, **kwargs)
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3509
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3510 q = repo.mq
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3511 r = q.qrepo()
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
3512 if not r:
11120
0bedcbcb3ae2 mq: mark error message for translation
Martin Geisler <mg@lazybytes.net>
parents: 11119
diff changeset
3513 raise util.Abort(_('no queue repository'))
10407
2e8926e9cc32 mq: incorporate mq repo config when using --mq
Brendan Cully <brendan@kublai.com>
parents: 10402
diff changeset
3514 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
3515
11107
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3516 def summary(orig, ui, repo, *args, **kwargs):
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3517 r = orig(ui, repo, *args, **kwargs)
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3518 q = repo.mq
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3519 m = []
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3520 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
3521 if a:
11121
d061ef1d781c mq: make use of output labeling for summary
Eric Eisner <ede@mit.edu>
parents: 11120
diff changeset
3522 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
3523 if u:
11121
d061ef1d781c mq: make use of output labeling for summary
Eric Eisner <ede@mit.edu>
parents: 11120
diff changeset
3524 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
3525 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
3526 # 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
3527 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
3528 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
3529 # i18n: column positioning for "hg summary"
11119
2e270443a2c6 mq: mark string for translation
Martin Geisler <mg@lazybytes.net>
parents: 11107
diff changeset
3530 ui.note(_("mq: (empty queue)\n"))
11107
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3531 return r
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3532
14210
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3533 def revsetmq(repo, subset, x):
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3534 """``mq()``
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3535 Changesets managed by MQ.
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3536 """
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3537 revset.getargs(x, 0, 0, _("mq takes no arguments"))
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3538 applied = set([repo[r.node].rev() for r in repo.mq.applied])
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3539 return [r for r in subset if r in applied]
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3540
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3541 # 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
3542 i18nfunctions = [revsetmq]
68ade2a6b30a mq: add a 'mq()' revset predicate that returns applied mq csets
Idan Kamara <idankk86@gmail.com>
parents: 14191
diff changeset
3543
17101
6bc275593d07 mq: defer command wrapping to extsetup (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17059
diff changeset
3544 def extsetup(ui):
6bc275593d07 mq: defer command wrapping to extsetup (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17059
diff changeset
3545 # 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
3546 # 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
3547 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
3548
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
3549 extensions.wrapcommand(commands.table, 'import', mqimport)
11107
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
3550 extensions.wrapcommand(commands.table, 'summary', summary)
10402
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3551
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3552 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
3553 entry[1].extend(mqopt)
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
3554
14448
7d367e8f892d mq: allow --mq for qrecord
Idan Kamara <idankk86@gmail.com>
parents: 14435
diff changeset
3555 nowrap = set(commands.norepo.split(" "))
12036
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3556
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3557 def dotable(cmdtable):
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3558 for cmd in cmdtable.keys():
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3559 cmd = cmdutil.parsealiases(cmd)[0]
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3560 if cmd in nowrap:
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3561 continue
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3562 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
3563 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
3564
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3565 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
3566
31f02288bbc4 mq: extend support for the --mq argument to extension commands
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11970
diff changeset
3567 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
3568 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
3569 dotable(getattr(extmodule, 'cmdtable', {}))
7142
88f1b8081f1c Prevent import over an applied patch (closes issue795)
Brendan Cully <brendan@kublai.com>
parents: 7113
diff changeset
3570
17101
6bc275593d07 mq: defer command wrapping to extsetup (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17059
diff changeset
3571 revset.symbols['mq'] = revsetmq
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3572
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3573 colortable = {'qguard.negative': 'red',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3574 'qguard.positive': 'yellow',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3575 'qguard.unguarded': 'green',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3576 '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
3577 'qseries.guarded': 'black bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3578 'qseries.missing': 'red bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3579 'qseries.unapplied': 'black bold'}
17773
434e5bd615fc commands: don't infer repo for commands like update (issue2748)
Siddharth Agarwal <sid0@fb.com>
parents: 17730
diff changeset
3580
434e5bd615fc commands: don't infer repo for commands like update (issue2748)
Siddharth Agarwal <sid0@fb.com>
parents: 17730
diff changeset
3581 commands.inferrepo += " qnew qrefresh qdiff qcommit"