annotate hgext/mq.py @ 11709:3e561b6af810 stable

mq: clarify the fact that qimport is trying to read a file "hg qimport tip" would throw "abort: unable to read tip" before this.
author Nicolas Dumazet <nicdumz.commits@gmail.com>
date Sat, 31 Jul 2010 10:50:29 +0900
parents 64f284da1278
children aae1dd12fce6 4f9dfb54c8b5
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
1ebe048902d9 mq: mention qqueue in module docstring
Martin Geisler <mg@lazybytes.net>
parents: 11230
diff changeset
41 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
42 create other, independent patch queues with the :hg:`qqueue` command.
2554
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
43 '''
8264c2034970 help: add help to mq extension
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2531
diff changeset
44
3891
6b4127c7d52a Simplify i18n imports
Matt Mackall <mpm@selenic.com>
parents: 3877
diff changeset
45 from mercurial.i18n import _
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
46 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
47 from mercurial.lock import release
10410
b59fba37e5e6 mq: remove unused import
Henrik Stuart <hg@hstuart.dk>
parents: 10407
diff changeset
48 from mercurial import commands, cmdutil, hg, patch, util
7637
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7627
diff changeset
49 from mercurial import repair, extensions, url, error
7271
8046f0a070a6 use our urlopener (proxy handling, etc) instead of urllib
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7216
diff changeset
50 import os, sys, re, errno
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
51
5645
1f044b04fa0a mq: drop obsolete reference to 'qversion'
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5534
diff changeset
52 commands.norepo += " qclone"
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
53
4037
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
54 # 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
55 # 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
56 normname = util.normpath
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
57
8778
c5f36402daad use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8761
diff changeset
58 class statusentry(object):
10682
8ed350051896 mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10681
diff changeset
59 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
60 self.node, self.name = node, name
11375
0f33abfccaa1 mq: __str__ falls back to __repr__
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11365
diff changeset
61 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
62 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
63
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
64 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
65 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
66 def eatdiff(lines):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
67 while lines:
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
68 l = lines[-1]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
69 if (l.startswith("diff -") or
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
70 l.startswith("Index:") or
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
71 l.startswith("===========")):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
72 del lines[-1]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
73 else:
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
74 break
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
75 def eatempty(lines):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
76 while lines:
10688
d4d3a8a65248 mq: don't use regexp when not necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10687
diff changeset
77 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
78 del lines[-1]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
79 else:
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
80 break
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
81
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
82 message = []
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
83 comments = []
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
84 user = None
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
85 date = None
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
86 parent = None
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
87 format = None
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
88 subject = None
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
89 diffstart = 0
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
90
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
91 for line in file(pf):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
92 line = line.rstrip()
10730
4d6bd7b8b6d8 mq: allow lines starting with '--- ' in patch messages
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10691
diff changeset
93 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
94 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
95 diffstart = 2
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
96 break
10730
4d6bd7b8b6d8 mq: allow lines starting with '--- ' in patch messages
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10691
diff changeset
97 diffstart = 0 # reset
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
98 if line.startswith("--- "):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
99 diffstart = 1
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
100 continue
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
101 elif format == "hgpatch":
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
102 # 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
103 if line.startswith("# User "):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
104 user = line[7:]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
105 elif line.startswith("# Date "):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
106 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
107 elif line.startswith("# Parent "):
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
108 parent = line[9:]
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
109 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
110 message.append(line)
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 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
113 message = []
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
114 format = "hgpatch"
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
115 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
116 line.startswith("subject: "))):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
117 subject = line[9:]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
118 format = "tag"
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
119 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
120 line.startswith("from: "))):
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
121 user = line[6:]
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
122 format = "tag"
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
123 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
124 line.startswith("date: "))):
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
125 date = line[6:]
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
126 format = "tag"
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
127 elif format == "tag" and line == "":
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
128 # 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
129 # 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
130 format = "tagdone"
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
131 elif message or line:
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
132 message.append(line)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
133 comments.append(line)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
134
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
135 eatdiff(message)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
136 eatdiff(comments)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
137 eatempty(message)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
138 eatempty(comments)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
139
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
140 # 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
141 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
142 message.insert(0, "")
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
143 message.insert(0, subject)
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
144
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
145 self.message = message
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
146 self.comments = comments
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
147 self.user = user
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
148 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
149 self.parent = parent
8653
aa011d123f71 mq: initializing patchheader class directly from patch content
Cédric Duval <cedricduval@free.fr>
parents: 8632
diff changeset
150 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
151 self.plainmode = plainmode
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
152
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
153 def setuser(self, user):
8654
f6cc3638f468 mq: rename setheader to updateheader and fix comment
Cédric Duval <cedricduval@free.fr>
parents: 8653
diff changeset
154 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
155 try:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
156 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
157 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
158 except ValueError:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
159 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
160 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
161 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
162 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
163 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
164 self.user = user
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
165
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
166 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
167 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
168 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
169 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
170 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
171 except ValueError:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
172 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
173 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
174 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
175 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
176 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
177 self.date = date
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
178
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
179 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
180 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
181 try:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
182 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
183 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
184 except ValueError:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
185 pass
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
186 self.parent = parent
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
187
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
188 def setmessage(self, message):
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
189 if self.comments:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
190 self._delmsg()
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
191 self.message = [message]
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
192 self.comments += self.message
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
193
8654
f6cc3638f468 mq: rename setheader to updateheader and fix comment
Cédric Duval <cedricduval@free.fr>
parents: 8653
diff changeset
194 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
195 '''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
196 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
197 res = False
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
198 for prefix in prefixes:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
199 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
200 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
201 self.comments[i] = prefix + new
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
202 res = True
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
203 break
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
204 return res
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
205
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
206 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
207 '''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
208 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
209 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
210 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
211 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
212 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
213
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
214 def __str__(self):
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
215 if not self.comments:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
216 return ''
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
217 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
218
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
219 def _delmsg(self):
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
220 '''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
221 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
222 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
223 if self.message:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
224 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
225 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
226 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
227 del self.comments[i]
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
228 self.message = self.message[2:]
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
229 break
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
230 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
231 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
232 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
233 ci += 1
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
234 del self.comments[ci]
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
235
8778
c5f36402daad use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8761
diff changeset
236 class queue(object):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
237 def __init__(self, ui, path, patchdir=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
238 self.basepath = path
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
239 try:
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
240 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
241 cur = fh.read().rstrip()
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
242 if not cur:
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
243 curpath = os.path.join(path, 'patches')
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
244 else:
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
245 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
246 except IOError:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
247 curpath = os.path.join(path, 'patches')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
248 self.path = patchdir or curpath
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
249 self.opener = util.opener(self.path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
250 self.ui = ui
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
251 self.applied_dirty = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
252 self.series_dirty = 0
11462
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
253 self.added = []
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
254 self.series_path = "series"
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
255 self.status_path = "status"
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
256 self.guards_path = "guards"
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
257 self.active_guards = None
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
258 self.guards_dirty = False
10190
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
259 # 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
260 try:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
261 gitmode = ui.configbool('mq', 'git', None)
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
262 if gitmode is None:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
263 raise error.ConfigError()
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
264 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
265 except error.ConfigError:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
266 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
267 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
268
8524
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
269 @util.propertycache
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
270 def applied(self):
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
271 if os.path.exists(self.join(self.status_path)):
10682
8ed350051896 mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10681
diff changeset
272 def parse(l):
8ed350051896 mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10681
diff changeset
273 n, name = l.split(':', 1)
8ed350051896 mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10681
diff changeset
274 return statusentry(bin(n), name)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
275 lines = self.opener(self.status_path).read().splitlines()
10682
8ed350051896 mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10681
diff changeset
276 return [parse(l) for l in lines]
8524
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
277 return []
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
278
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
279 @util.propertycache
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
280 def full_series(self):
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
281 if os.path.exists(self.join(self.series_path)):
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
282 return self.opener(self.series_path).read().splitlines()
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
283 return []
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
284
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
285 @util.propertycache
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
286 def series(self):
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
287 self.parse_series()
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
288 return self.series
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
289
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
290 @util.propertycache
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
291 def series_guards(self):
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
292 self.parse_series()
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
293 return self.series_guards
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
294
8525
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
295 def invalidate(self):
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
296 for a in 'applied full_series series series_guards'.split():
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
297 if a in self.__dict__:
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
298 delattr(self, a)
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
299 self.applied_dirty = 0
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
300 self.series_dirty = 0
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
301 self.guards_dirty = False
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
302 self.active_guards = None
b169ba60eebe mq: new method invalidate
Simon Heimberg <simohe@besonet.ch>
parents: 8524
diff changeset
303
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
304 def diffopts(self, opts={}, patchfn=None):
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
305 diffopts = patch.diffopts(self.ui, opts)
10190
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
306 if self.gitmode == 'auto':
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
307 diffopts.upgrade = True
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
308 elif self.gitmode == 'keep':
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
309 pass
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
310 elif self.gitmode in ('yes', 'no'):
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
311 diffopts.git = self.gitmode == 'yes'
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
312 else:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
313 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
314 ' got %s') % self.gitmode)
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
315 if patchfn:
10185
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
316 diffopts = self.patchopts(diffopts, patchfn)
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
317 return diffopts
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
318
10186
296a0b14a686 mq: preserve --git flag when folding patches
Patrick Mezard <pmezard@gmail.com>
parents: 10185
diff changeset
319 def patchopts(self, diffopts, *patches):
10185
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
320 """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
321 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
322 """
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
323 diffopts = diffopts.copy()
10190
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
324 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
325 for patchfn in patches:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
326 patchf = self.opener(patchfn, 'r')
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
327 # 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
328 for line in patchf:
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
329 if line.startswith('diff --git'):
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
330 diffopts.git = True
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
331 break
9c2c94934f0d mq: upgrade to git patch when necessary (issue767)
Patrick Mezard <pmezard@gmail.com>
parents: 10188
diff changeset
332 patchf.close()
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
333 return diffopts
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
334
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
335 def join(self, *p):
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
336 return os.path.join(self.path, *p)
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
337
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
338 def find_series(self, patch):
10685
10248fc845db mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10684
diff changeset
339 def matchpatch(l):
10248fc845db mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10684
diff changeset
340 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
341 return l.strip() == patch
10248fc845db mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10684
diff changeset
342 for index, l in enumerate(self.full_series):
10248fc845db mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10684
diff changeset
343 if matchpatch(l):
10248fc845db mq: find_series() simplify and don't use regexps
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10684
diff changeset
344 return index
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
345 return None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
346
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
347 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
348
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
349 def parse_series(self):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
350 self.series = []
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
351 self.series_guards = []
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
352 for l in self.full_series:
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
353 h = l.find('#')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
354 if h == -1:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
355 patch = l
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
356 comment = ''
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
357 elif h == 0:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
358 continue
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
359 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
360 patch = l[:h]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
361 comment = l[h:]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
362 patch = patch.strip()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
363 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
364 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
365 raise util.Abort(_('%s appears more than once in %s') %
87b7ae306d54 mq: bail out if a patch appears more than once in the series file.
Brendan Cully <brendan@kublai.com>
parents: 3183
diff changeset
366 (patch, self.join(self.series_path)))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
367 self.series.append(patch)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
368 self.series_guards.append(self.guard_re.findall(comment))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
369
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
370 def check_guard(self, guard):
6607
75b506f0e571 mq: make qselect fail properly on an empty guard
Patrick Mezard <pmezard@gmail.com>
parents: 6606
diff changeset
371 if not guard:
75b506f0e571 mq: make qselect fail properly on an empty guard
Patrick Mezard <pmezard@gmail.com>
parents: 6606
diff changeset
372 return _('guard cannot be an empty string')
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
373 bad_chars = '# \t\r\n\f'
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
374 first = guard[0]
8288
9de088320e9a mq: simpler check of first character of guard name
Simon Heimberg <simohe@besonet.ch>
parents: 8225
diff changeset
375 if first in '-+':
9de088320e9a mq: simpler check of first character of guard name
Simon Heimberg <simohe@besonet.ch>
parents: 8225
diff changeset
376 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
377 (guard, first))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
378 for c in bad_chars:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
379 if c in guard:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
380 return _('invalid character in guard %r: %r') % (guard, c)
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
381
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
382 def set_active(self, guards):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
383 for guard in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
384 bad = self.check_guard(guard)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
385 if bad:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
386 raise util.Abort(bad)
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8188
diff changeset
387 guards = sorted(set(guards))
9467
4c041f1ee1b4 do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents: 9440
diff changeset
388 self.ui.debug('active guards: %s\n' % ' '.join(guards))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
389 self.active_guards = guards
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
390 self.guards_dirty = True
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
391
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
392 def active(self):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
393 if self.active_guards is None:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
394 self.active_guards = []
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
395 try:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
396 guards = self.opener(self.guards_path).read().split()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
397 except IOError, err:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
398 if err.errno != errno.ENOENT:
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
399 raise
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
400 guards = []
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
401 for i, guard in enumerate(guards):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
402 bad = self.check_guard(guard)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
403 if bad:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
404 self.ui.warn('%s:%d: %s\n' %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
405 (self.join(self.guards_path), i + 1, bad))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
406 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
407 self.active_guards.append(guard)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
408 return self.active_guards
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
409
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
410 def set_guards(self, idx, guards):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
411 for g in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
412 if len(g) < 2:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
413 raise util.Abort(_('guard %r too short') % g)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
414 if g[0] not in '-+':
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
415 raise util.Abort(_('guard %r starts with invalid char') % g)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
416 bad = self.check_guard(g[1:])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
417 if bad:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
418 raise util.Abort(bad)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
419 drop = self.guard_re.sub('', self.full_series[idx])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
420 self.full_series[idx] = drop + ''.join([' #' + g for g in guards])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
421 self.parse_series()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
422 self.series_dirty = True
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
423
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
424 def pushable(self, idx):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
425 if isinstance(idx, str):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
426 idx = self.series.index(idx)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
427 patchguards = self.series_guards[idx]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
428 if not patchguards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
429 return True, None
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
430 guards = self.active()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
431 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
432 if exactneg:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
433 return False, exactneg[0]
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
434 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
435 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
436 if pos:
2850
851b07ec450c mq: apply patch is any posative guard matches
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2848
diff changeset
437 if exactpos:
851b07ec450c mq: apply patch is any posative guard matches
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2848
diff changeset
438 return True, exactpos[0]
851b07ec450c mq: apply patch is any posative guard matches
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2848
diff changeset
439 return False, pos
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
440 return True, ''
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
441
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
442 def explain_pushable(self, idx, all_patches=False):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
443 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
444 if all_patches or self.ui.verbose:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
445 if isinstance(idx, str):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
446 idx = self.series.index(idx)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
447 pushable, why = self.pushable(idx)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
448 if all_patches and pushable:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
449 if why is None:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
450 write(_('allowing %s - no guards in effect\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
451 self.series[idx])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
452 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
453 if not why:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
454 write(_('allowing %s - no matching negative guards\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
455 self.series[idx])
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
456 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
457 write(_('allowing %s - guarded by %r\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
458 (self.series[idx], why))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
459 if not pushable:
2829
05316bb57d01 mq: make guards more strict, add tests
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2828
diff changeset
460 if why:
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
461 write(_('skipping %s - guarded by %r\n') %
3870
22d18051f9e5 mq: fix explain_pushable for negative guards
Brendan Cully <brendan@kublai.com>
parents: 3857
diff changeset
462 (self.series[idx], why))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
463 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
464 write(_('skipping %s - no matching guards\n') %
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
465 self.series[idx])
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
466
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
467 def save_dirty(self):
2772
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
468 def write_list(items, path):
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
469 fp = self.opener(path, 'w')
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
470 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
471 fp.write("%s\n" % i)
2772
4720e79486d3 mq: simplify save_dirty
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2771
diff changeset
472 fp.close()
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
473 if self.applied_dirty:
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
474 write_list(map(str, self.applied), self.status_path)
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
475 if self.series_dirty:
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
476 write_list(self.full_series, self.series_path)
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
477 if self.guards_dirty:
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
478 write_list(self.active_guards, self.guards_path)
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
479 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
480 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
481 if 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
482 qrepo[None].add(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
483 self.added = []
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
484
4207
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
485 def removeundo(self, repo):
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
486 undo = repo.sjoin('undo')
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
487 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
488 return
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
489 try:
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
490 os.unlink(undo)
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
491 except OSError, inst:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
492 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
493
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
494 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
495 fp=None, changes=None, opts={}):
9640
9e76232fbfbe diff: add --stat for diffstat output
Brodie Rao <me+hg@dackz.net>
parents: 9599
diff changeset
496 stat = opts.get('stat')
6582
5acbdd3941c4 walk: remove remaining users of cmdutils.matchpats
Matt Mackall <mpm@selenic.com>
parents: 6562
diff changeset
497 m = cmdutil.match(repo, files, opts)
11050
5d35f7d93514 commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents: 11049
diff changeset
498 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
499 changes, stat, fp)
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2873
diff changeset
500
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
501 def mergeone(self, repo, mergeq, head, patch, rev, diffopts):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
502 # first try just applying the patch
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
503 (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
504 strict=True, merge=rev)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
505
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
506 if err == 0:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
507 return (err, n)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
508
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
509 if n is None:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
510 raise util.Abort(_("apply failed for patch %s") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
511
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
512 self.ui.warn(_("patch didn't work out, merging %s\n") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
513
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
514 # 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
515 hg.clean(repo, head)
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
516 self.strip(repo, n, update=False, backup='strip')
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
517
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6668
diff changeset
518 ctx = repo[rev]
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
519 ret = hg.merge(repo, rev)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
520 if ret:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
521 raise util.Abort(_("update returned %d") % ret)
8706
25e9c71b89de commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents: 8700
diff changeset
522 n = repo.commit(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
523 if n is None:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
524 raise util.Abort(_("repo commit failed"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
525 try:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
526 ph = patchheader(mergeq.join(patch), self.plainmode)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
527 except:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
528 raise util.Abort(_("unable to read %s") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
529
10185
7637fe4f525d mq: preserve --git flag when merging patches
Patrick Mezard <pmezard@gmail.com>
parents: 10184
diff changeset
530 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
531 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
532 comments = str(ph)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
533 if comments:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
534 patchf.write(comments)
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
535 self.printdiff(repo, diffopts, head, n, fp=patchf)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
536 patchf.close()
4207
b7e66db28571 Remove undo log after mq operations that rollback would break
Brendan Cully <brendan@kublai.com>
parents: 4206
diff changeset
537 self.removeundo(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
538 return (0, n)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
539
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
540 def qparents(self, repo, rev=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
541 if rev is None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
542 (p1, p2) = repo.dirstate.parents()
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
543 if p2 == nullid:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
544 return p1
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
545 if not self.applied:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
546 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
547 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
548 p1, p2 = repo.changelog.parents(rev)
10680
45eb9b5dacf6 mq: simplify qparents calculation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10679
diff changeset
549 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
550 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
551 return p1
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
552
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
553 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
554 if not self.applied:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
555 # each of the patches merged in will have two parents. This
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
556 # can confuse the qrefresh, qdiff, and strip code because it
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
557 # needs to know which parent is actually in the patch queue.
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
558 # so, we insert a merge marker with only one parent. This way
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
559 # the first patch in the queue is never a merge patch
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
560 #
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
561 pname = ".hg.patches.merge.marker"
8706
25e9c71b89de commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents: 8700
diff changeset
562 n = repo.commit('[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
563 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
564 self.applied.append(statusentry(n, pname))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
565 self.applied_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
566
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
567 head = self.qparents(repo)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
568
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
569 for patch in series:
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
570 patch = mergeq.lookup(patch, strict=True)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
571 if not patch:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
572 self.ui.warn(_("patch %s does not exist\n") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
573 return (1, None)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
574 pushable, reason = self.pushable(patch)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
575 if not pushable:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
576 self.explain_pushable(patch, all_patches=True)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
577 continue
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
578 info = mergeq.isapplied(patch)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
579 if not info:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
580 self.ui.warn(_("patch %s is not applied\n") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
581 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
582 rev = info[1]
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
583 err, head = self.mergeone(repo, mergeq, head, patch, rev, diffopts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
584 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
585 self.applied.append(statusentry(head, patch))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
586 self.applied_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
587 if err:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
588 return (err, head)
4437
a210b40d0860 Make mergepatch save queue now that qpush isn't.
Brendan Cully <brendan@kublai.com>
parents: 4432
diff changeset
589 self.save_dirty()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
590 return (0, head)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
591
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
592 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
593 '''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
594 patchfile: name of patch file'''
3465
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3375
diff changeset
595 files = {}
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
596 try:
3465
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3375
diff changeset
597 fuzz = patch.patch(patchfile, self.ui, strip=1, cwd=repo.root,
8811
8b35b08724eb Make mq, record and transplant honor patch.eol
Patrick Mezard <pmezard@gmail.com>
parents: 8795
diff changeset
598 files=files, eolmode=None)
2919
b70740aefa4d Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents: 2905
diff changeset
599 except Exception, inst:
b70740aefa4d Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents: 2905
diff changeset
600 self.ui.note(str(inst) + '\n')
b70740aefa4d Unify mq and hg patch invocation.
Brendan Cully <brendan@kublai.com>
parents: 2905
diff changeset
601 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
602 self.ui.warn(_("patch failed, unable to continue (try -v)\n"))
3465
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3375
diff changeset
603 return (False, files, False)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
604
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
605 return (True, files, fuzz)
2796
4c39568007f9 mq: codingstyle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2795
diff changeset
606
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
607 def apply(self, repo, series, list=False, update_status=True,
10661
c4859aad1980 mq: all_files can be a set, remove dangerous default values
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10611
diff changeset
608 strict=False, patchdir=None, merge=None, all_files=None):
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
609 wlock = lock = tr = None
4418
0532491f7476 MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4406
diff changeset
610 try:
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
611 wlock = repo.wlock()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
612 lock = repo.lock()
10881
a685011ed38e localrepo: add desc parameter to transaction
Steve Borho <steve@borho.org>
parents: 10873
diff changeset
613 tr = repo.transaction("qpush")
4418
0532491f7476 MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4406
diff changeset
614 try:
4970
30d4d8985dd8 transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents: 4917
diff changeset
615 ret = self._apply(repo, series, list, update_status,
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
616 strict, patchdir, merge, all_files=all_files)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
617 tr.close()
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
618 self.save_dirty()
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
619 return ret
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
620 except:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
621 try:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
622 tr.abort()
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
623 finally:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
624 repo.invalidate()
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
625 repo.dirstate.invalidate()
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
626 raise
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
627 finally:
11230
5116a077c3da make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 11229
diff changeset
628 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
629 self.removeundo(repo)
4418
0532491f7476 MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4406
diff changeset
630
4970
30d4d8985dd8 transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents: 4917
diff changeset
631 def _apply(self, repo, series, list=False, update_status=True,
10661
c4859aad1980 mq: all_files can be a set, remove dangerous default values
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10611
diff changeset
632 strict=False, patchdir=None, merge=None, all_files=None):
8875
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
633 '''returns (error, hash)
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
634 error = 1 for unable to read, 2 for patch failed, 3 for patch fuzz'''
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
635 # TODO unify with commands.py
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
636 if not patchdir:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
637 patchdir = self.path
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
638 err = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
639 n = None
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
640 for patchname in series:
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
641 pushable, reason = self.pushable(patchname)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
642 if not pushable:
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
643 self.explain_pushable(patchname, all_patches=True)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
644 continue
9111
ac3f1e6696eb mq: use ui.status when pushing and popping patches
Martin Geisler <mg@lazybytes.net>
parents: 9110
diff changeset
645 self.ui.status(_("applying %s\n") % patchname)
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
646 pf = os.path.join(patchdir, patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
647
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
648 try:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
649 ph = patchheader(self.join(patchname), self.plainmode)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
650 except:
8875
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
651 self.ui.warn(_("unable to read %s\n") % patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
652 err = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
653 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
654
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
655 message = ph.message
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
656 if not message:
10274
04207f5e7344 mq: Do not translate import message that are appended to commits.
David Soria Parra <dsp@php.net>
parents: 10263
diff changeset
657 message = "imported patch %s\n" % patchname
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
658 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
659 if list:
10274
04207f5e7344 mq: Do not translate import message that are appended to commits.
David Soria Parra <dsp@php.net>
parents: 10263
diff changeset
660 message.append("\nimported patch %s" % patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
661 message = '\n'.join(message)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
662
7782
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
663 if ph.haspatch:
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
664 (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
665 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
666 all_files.update(files)
7782
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
667 patcherr = not patcherr
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
668 else:
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
669 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
670 patcherr, files, fuzz = 0, [], 0
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
671
2934
2f190e998eb3 Teach mq about git patches
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
672 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
673 # 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
674 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
675 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
676 for f in files:
4905
fc61495ea9cf dirstate: make wjoin function private
Matt Mackall <mpm@selenic.com>
parents: 4904
diff changeset
677 if os.path.exists(repo.wjoin(f)):
4332
4e5e1638b165 mq: don't abort when merging a patch that removes files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4242
diff changeset
678 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
679 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
680 removed.append(f)
4904
6fd953d5faea dirstate: break update into separate functions
Matt Mackall <mpm@selenic.com>
parents: 4890
diff changeset
681 for f in removed:
6fd953d5faea dirstate: break update into separate functions
Matt Mackall <mpm@selenic.com>
parents: 4890
diff changeset
682 repo.dirstate.remove(f)
6fd953d5faea dirstate: break update into separate functions
Matt Mackall <mpm@selenic.com>
parents: 4890
diff changeset
683 for f in merged:
6fd953d5faea dirstate: break update into separate functions
Matt Mackall <mpm@selenic.com>
parents: 4890
diff changeset
684 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
685 p1, p2 = repo.dirstate.parents()
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
686 repo.dirstate.setparents(p1, merge)
6603
41eb20cc1c02 match: remove files arg from repo.status and friends
Matt Mackall <mpm@selenic.com>
parents: 6602
diff changeset
687
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
688 files = patch.updatedir(self.ui, repo, files)
6603
41eb20cc1c02 match: remove files arg from repo.status and friends
Matt Mackall <mpm@selenic.com>
parents: 6602
diff changeset
689 match = cmdutil.matchfiles(repo, files or [])
8706
25e9c71b89de commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents: 8700
diff changeset
690 n = repo.commit(message, ph.user, ph.date, match=match, force=True)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
691
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
692 if n is None:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
693 raise util.Abort(_("repo commit failed"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
694
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
695 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
696 self.applied.append(statusentry(n, patchname))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
697
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
698 if patcherr:
7782
140429276b63 mq: handle empty patches more gracefully (issue1501)
Matt Mackall <mpm@selenic.com>
parents: 7772
diff changeset
699 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
700 err = 2
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
701 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
702
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
703 if fuzz and strict:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
704 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
705 err = 3
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
706 break
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
707 return (err, n)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
708
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
709 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
710 if not keep:
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
711 r = self.qrepo()
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
712 if r:
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11302
diff changeset
713 r[None].remove(patches, True)
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
714 else:
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
715 for p in patches:
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
716 os.unlink(self.join(p))
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
717
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
718 if numrevs:
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
719 del self.applied[:numrevs]
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
720 self.applied_dirty = 1
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
721
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8188
diff changeset
722 for i in sorted([self.find_series(p) for p in patches], reverse=True):
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
723 del self.full_series[i]
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
724 self.parse_series()
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
725 self.series_dirty = 1
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
726
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
727 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
728 firstrev = repo[self.applied[0].node].rev()
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
729 patches = []
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
730 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
731
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
732 if rev < firstrev:
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
733 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
734
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
735 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
736 base = self.applied[i].node
8832
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
737 if ctx.node() != base:
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
738 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
739 raise util.Abort(msg % rev)
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
740
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
741 patch = self.applied[i].name
8832
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
742 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
743 if ctx.description() == fmt % patch:
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
744 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
745 repo.ui.status(msg % patch)
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
746 break
6e6f5b80e056 mq: warn about finalizing patches without cset message
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8811
diff changeset
747
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
748 patches.append(patch)
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
749 return patches
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
750
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
751 def finish(self, repo, revs):
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
752 patches = self._revpatches(repo, sorted(revs))
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
753 self._cleanup(patches, len(patches))
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
754
3088
dc784839516d mq: add qdelete --forget option
Brendan Cully <brendan@kublai.com>
parents: 3087
diff changeset
755 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
756 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
757 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
758 'patch name'))
4736
04b2c1e27c26 mq: require patch argument or revision for qdelete
Brendan Cully <brendan@kublai.com>
parents: 4730
diff changeset
759
11365
c3d7daa0928e mq: make 'qdelete <patchidx>' work again.
Greg Ward <greg-hg@gerg.ca>
parents: 11327
diff changeset
760 realpatches = []
2905
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
761 for patch in patches:
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
762 patch = self.lookup(patch, strict=True)
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
763 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
764 if info:
2905
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
765 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
766 if patch not in self.series:
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
767 raise util.Abort(_("patch %s not in series file") % patch)
11365
c3d7daa0928e mq: make 'qdelete <patchidx>' work again.
Greg Ward <greg-hg@gerg.ca>
parents: 11327
diff changeset
768 realpatches.append(patch)
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
769
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
770 numrevs = 0
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
771 if opts.get('rev'):
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
772 if not self.applied:
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
773 raise util.Abort(_('no patches applied'))
3707
67f44b825784 Removed unused ui parameter from revpair/revrange and fix its users.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3700
diff changeset
774 revs = cmdutil.revrange(repo, opts['rev'])
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
775 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
776 revs.reverse()
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
777 revpatches = self._revpatches(repo, revs)
11365
c3d7daa0928e mq: make 'qdelete <patchidx>' work again.
Greg Ward <greg-hg@gerg.ca>
parents: 11327
diff changeset
778 realpatches += revpatches
8833
14639c050251 mq: unify code for qdel -r and qfin
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8832
diff changeset
779 numrevs = len(revpatches)
2905
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
780
11365
c3d7daa0928e mq: make 'qdelete <patchidx>' work again.
Greg Ward <greg-hg@gerg.ca>
parents: 11327
diff changeset
781 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
782
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
783 def check_toppatch(self, repo):
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
784 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
785 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
786 patch = self.applied[-1].name
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
787 pp = repo.dirstate.parents()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
788 if top not in pp:
5432
bfbd9b954315 mq: clarify queue top message
Matt Mackall <mpm@selenic.com>
parents: 5336
diff changeset
789 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
790 return top, patch
99d285ac5da4 mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents: 10190
diff changeset
791 return None, None
99d285ac5da4 mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents: 10190
diff changeset
792
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
793 def check_localchanges(self, repo, force=False, refresh=True):
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
794 m, a, r, d = repo.status()[:4]
10372
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
795 if (m or a or r or d) and not force:
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
796 if refresh:
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
797 raise util.Abort(_("local changes found, refresh first"))
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
798 else:
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
799 raise util.Abort(_("local changes found"))
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
800 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
801
5981
ca2af0c81c9a mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5980
diff changeset
802 _reserved = ('series', 'status', 'guards')
ca2af0c81c9a mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5980
diff changeset
803 def check_reserved_name(self, name):
ca2af0c81c9a mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5980
diff changeset
804 if (name in self._reserved or name.startswith('.hg')
10589
92b8c79b34c2 mq: disallow : in patch names (issue2065)
Sune Foldager <cryo@cyanite.org>
parents: 10588
diff changeset
805 or name.startswith('.mq') or '#' in name or ':' in name):
5981
ca2af0c81c9a mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5980
diff changeset
806 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
807 % name)
ca2af0c81c9a mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5980
diff changeset
808
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
809 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
810 """options:
fd3cba5e73ae mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents: 7142
diff changeset
811 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
812 """
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
813 msg = opts.get('msg')
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
814 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
815 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
816 if date:
989467e8e3a9 Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 6120
diff changeset
817 date = util.parsedate(date)
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
818 diffopts = self.diffopts({'git': opts.get('git')})
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
819 self.check_reserved_name(patchfn)
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
820 if os.path.exists(self.join(patchfn)):
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
821 raise util.Abort(_('patch "%s" already exists') % patchfn)
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
822 if opts.get('include') or opts.get('exclude') or pats:
6582
5acbdd3941c4 walk: remove remaining users of cmdutils.matchpats
Matt Mackall <mpm@selenic.com>
parents: 6562
diff changeset
823 match = cmdutil.match(repo, pats, opts)
7161
b420ef2c812b mq: abort qnew -f if any file in an explicit list cannot be read
Brendan Cully <brendan@kublai.com>
parents: 7160
diff changeset
824 # 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
825 def badfn(f, msg):
b420ef2c812b mq: abort qnew -f if any file in an explicit list cannot be read
Brendan Cully <brendan@kublai.com>
parents: 7160
diff changeset
826 raise util.Abort('%s: %s' % (f, msg))
b420ef2c812b mq: abort qnew -f if any file in an explicit list cannot be read
Brendan Cully <brendan@kublai.com>
parents: 7160
diff changeset
827 match.bad = badfn
6603
41eb20cc1c02 match: remove files arg from repo.status and friends
Matt Mackall <mpm@selenic.com>
parents: 6602
diff changeset
828 m, a, r, d = repo.status(match=match)[:4]
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
829 else:
10372
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
830 m, a, r, d = self.check_localchanges(repo, force=True)
7297
bd6deb7525f4 mq: use cmdutil.matchfiles instead of match for qnew -f.
Brendan Cully <brendan@kublai.com>
parents: 7280
diff changeset
831 match = cmdutil.matchfiles(repo, m + a + r)
10372
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
832 if len(repo[None].parents()) > 1:
27d542bc0f5b qnew: ignore force option
Augie Fackler <durin42@gmail.com>
parents: 10370
diff changeset
833 raise util.Abort(_('cannot manage merge changesets'))
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
834 commitfiles = m + a + r
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
835 self.check_toppatch(repo)
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
836 insert = self.full_series_end()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
837 wlock = repo.wlock()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
838 try:
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
839 # if patch file write fails, abort early
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
840 p = self.opener(patchfn, "w")
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
841 try:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
842 if self.plainmode:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
843 if user:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
844 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
845 if not date:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
846 p.write("\n")
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
847 if date:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
848 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
849 else:
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
850 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
851 p.write("# Parent "
e433002acb05 fix up a bunch of check-code warnings
Matt Mackall <mpm@selenic.com>
parents: 10410
diff changeset
852 + hex(repo[None].parents()[0].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
853 if user:
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
854 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
855 if date:
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
856 p.write("# Date %s %s\n\n" % date)
8366
0bf0045000b5 some modernization cleanups, forward compatibility
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8362
diff changeset
857 if hasattr(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
858 msg = msg()
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
859 commitmsg = msg and msg or ("[mq]: %s" % patchfn)
8706
25e9c71b89de commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents: 8700
diff changeset
860 n = repo.commit(commitmsg, user, date, match=match, force=True)
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
861 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
862 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
863 try:
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
864 self.full_series[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
865 self.applied.append(statusentry(n, patchfn))
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
866 self.parse_series()
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
867 self.series_dirty = 1
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
868 self.applied_dirty = 1
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
869 if msg:
7614
f9fcb189c8e2 mq: make qnew patch format consistent with qrefresh (issue1457)
Bernhard Leiner <bleiner@gmail.com>
parents: 7568
diff changeset
870 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
871 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
872 if commitfiles:
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
873 parent = self.qparents(repo, n)
7308
b6f5490effbf patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7307
diff changeset
874 chunks = patch.diff(repo, node1=parent, node2=n,
b6f5490effbf patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7307
diff changeset
875 match=match, opts=diffopts)
b6f5490effbf patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7307
diff changeset
876 for chunk in chunks:
b6f5490effbf patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7307
diff changeset
877 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
878 p.close()
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
879 wlock.release()
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
880 wlock = None
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
881 r = self.qrepo()
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
882 if r:
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11302
diff changeset
883 r[None].add([patchfn])
7162
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
884 except:
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
885 repo.rollback()
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
886 raise
7280
810ca383da9c remove unused variables
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7271
diff changeset
887 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
888 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
889 try:
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
890 os.unlink(patchpath)
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
891 except:
ce10a2f22258 mq: heavy rearrangement of qnew to make it recover reliably from errors.
Brendan Cully <brendan@kublai.com>
parents: 7161
diff changeset
892 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
893 raise
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
894 self.removeundo(repo)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
895 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
896 release(wlock)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
897
6472
8c4cd80afd3e mq: add --force option to strip
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6382
diff changeset
898 def strip(self, repo, rev, update=True, backup="all", force=None):
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
899 wlock = lock = None
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
900 try:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
901 wlock = repo.wlock()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
902 lock = repo.lock()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
903
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
904 if update:
6472
8c4cd80afd3e mq: add --force option to strip
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6382
diff changeset
905 self.check_localchanges(repo, force=force, refresh=False)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
906 urev = self.qparents(repo, rev)
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
907 hg.clean(repo, urev)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
908 repo.dirstate.write()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
909
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
910 self.removeundo(repo)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
911 repair.strip(self.ui, repo, rev, backup)
5527
0b3f910dfd17 mq: really remove undo after a qpush (and after a strip)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5432
diff changeset
912 # strip may have unbundled a set of backed up revisions after
0b3f910dfd17 mq: really remove undo after a qpush (and after a strip)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5432
diff changeset
913 # the actual strip
0b3f910dfd17 mq: really remove undo after a qpush (and after a strip)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5432
diff changeset
914 self.removeundo(repo)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
915 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
916 release(lock, wlock)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
917
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
918 def isapplied(self, patch):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
919 """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
920 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
921 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
922 return (i, a.node, a.name)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
923 return None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
924
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
925 # 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
926 # variations. If strict is passed, we try only #1
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
927 #
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
928 # 1) a number to indicate an offset in the series file
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
929 # 2) a unique substring of the patch name was given
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
930 # 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
931 def lookup(self, patch, strict=False):
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
932 patch = patch and str(patch)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
933
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
934 def partial_name(s):
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
935 if s in self.series:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
936 return s
2765
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
937 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
938 if len(matches) > 1:
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
939 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
940 for m in matches:
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
941 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
942 return None
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
943 if matches:
0327bd1c831c mq: print matches if patch name not unique
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2757
diff changeset
944 return matches[0]
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
945 if self.series and self.applied:
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
946 if s == 'qtip':
3874
e88d03c2a3d9 mq: fix qheader without args when guards are applied after qtop
Brendan Cully <brendan@kublai.com>
parents: 3871
diff changeset
947 return self.series[self.series_end(True)-1]
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
948 if s == 'qbase':
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
949 return self.series[0]
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
950 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
951
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
952 if patch is None:
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
953 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
954 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
955 return patch
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
956
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
957 if not os.path.isfile(self.join(patch)):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
958 try:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
959 sno = int(patch)
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
960 except (ValueError, OverflowError):
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
961 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
962 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
963 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
964 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
965
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
966 if not strict:
7568
12df451ce205 mq: don't warn about ambiguous patch name when using patch index (issue1439)
Jason Orendorff <jorendorff@mozilla.com>
parents: 7566
diff changeset
967 res = partial_name(patch)
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
968 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
969 return res
3082
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3076
diff changeset
970 minus = patch.rfind('-')
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3076
diff changeset
971 if minus >= 0:
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3076
diff changeset
972 res = partial_name(patch[:minus])
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
973 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
974 i = self.series.index(res)
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
975 try:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
976 off = int(patch[minus + 1:] or 1)
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
977 except (ValueError, OverflowError):
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
978 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
979 else:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
980 if i - off >= 0:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
981 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
982 plus = patch.rfind('+')
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3076
diff changeset
983 if plus >= 0:
bed7cb835d8d Fixed python2.3 incompatibility (rsplit) in qpush/qpop with index.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3076
diff changeset
984 res = partial_name(patch[:plus])
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
985 if res:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
986 i = self.series.index(res)
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
987 try:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
988 off = int(patch[plus + 1:] or 1)
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
989 except (ValueError, OverflowError):
2696
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
990 pass
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
991 else:
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
992 if i + off < len(self.series):
be273f6074de mq: patch naming shortcuts
Chris Mason <mason@suse.com>
parents: 2694
diff changeset
993 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
994 raise util.Abort(_("patch %s not in series") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
995
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
996 def push(self, repo, patch=None, force=False, list=False,
11064
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
997 mergeq=None, all=False, move=False):
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
998 diffopts = self.diffopts()
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
999 wlock = repo.wlock()
8795
51c29aec0b75 mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents: 8778
diff changeset
1000 try:
10362
2e3ec7ef5349 mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10361
diff changeset
1001 heads = []
2e3ec7ef5349 mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10361
diff changeset
1002 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
1003 heads += ls
2e3ec7ef5349 mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10361
diff changeset
1004 if not heads:
2e3ec7ef5349 mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10361
diff changeset
1005 heads = [nullid]
2e3ec7ef5349 mq: don't warn on qpush against a branch head
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10361
diff changeset
1006 if repo.dirstate.parents()[0] not in heads:
8795
51c29aec0b75 mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents: 8778
diff changeset
1007 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
1008
8795
51c29aec0b75 mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents: 8778
diff changeset
1009 if not self.series:
51c29aec0b75 mq: eliminate warning on qpush with empty series
Adrian Buehlmann <adrian@cadifra.com>
parents: 8778
diff changeset
1010 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
1011 return 0
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1012
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1013 patch = self.lookup(patch)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1014 # 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
1015 # 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
1016 # 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
1017 # go backwards with qpush)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1018 if patch:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1019 info = self.isapplied(patch)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1020 if info:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1021 if info[0] < len(self.applied) - 1:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1022 raise util.Abort(
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1023 _("cannot push to a previous patch: %s") % patch)
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1024 self.ui.warn(
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1025 _('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
1026 return 0
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1027 pushable, reason = self.pushable(patch)
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1028 if not pushable:
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1029 if reason:
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1030 reason = _('guarded by %r') % reason
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1031 else:
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1032 reason = _('no matching guards')
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1033 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
1034 return 1
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1035 elif all:
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1036 patch = self.series[-1]
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1037 if self.isapplied(patch):
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1038 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
1039 return 0
4100
c30c922f907a Modify qpush/qpop idempotent operations to return success
Ben Thomas <bthomas@virtualiron.com>
parents: 4099
diff changeset
1040
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1041 # 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
1042 # 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
1043 # 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
1044 # 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
1045 # work as it detects an error when done
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1046 start = self.series_end()
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1047 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
1048 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
1049 return 1
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1050 if not force:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1051 self.check_localchanges(repo)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1052
11064
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
1053 if move:
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
1054 try:
11438
88fc876a4833 mq: fix qpush --move for selected guarded patches
Gilles Moris <gilles.moris@free.fr>
parents: 11375
diff changeset
1055 index = self.series.index(patch, start)
88fc876a4833 mq: fix qpush --move for selected guarded patches
Gilles Moris <gilles.moris@free.fr>
parents: 11375
diff changeset
1056 fullpatch = self.full_series[index]
88fc876a4833 mq: fix qpush --move for selected guarded patches
Gilles Moris <gilles.moris@free.fr>
parents: 11375
diff changeset
1057 del self.full_series[index]
11064
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
1058 except ValueError:
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
1059 raise util.Abort(_("patch '%s' not found") % patch)
11438
88fc876a4833 mq: fix qpush --move for selected guarded patches
Gilles Moris <gilles.moris@free.fr>
parents: 11375
diff changeset
1060 self.full_series.insert(start, fullpatch)
11064
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
1061 self.parse_series()
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
1062 self.series_dirty = 1
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
1063
7398
2cd1308cb588 mq: gracefully abort qpush/qgoto to guarded patch (issue1186)
Brendan Cully <brendan@kublai.com>
parents: 7308
diff changeset
1064 self.applied_dirty = 1
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1065 if start > 0:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1066 self.check_toppatch(repo)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1067 if not patch:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1068 patch = self.series[start]
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1069 end = start + 1
4418
0532491f7476 MQ: tidy up if a qpush is interrupted.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4406
diff changeset
1070 else:
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1071 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
1072
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1073 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
1074 all_files = set()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1075 try:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1076 if mergeq:
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
1077 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
1078 else:
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1079 ret = self.apply(repo, s, list, all_files=all_files)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1080 except:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1081 self.ui.warn(_('cleaning up working directory...'))
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1082 node = repo.dirstate.parents()[0]
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1083 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
1084 # 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
1085 # 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
1086 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
1087 if f not in repo.dirstate:
10693
2c2b2d384a47 mq: do not try to delete non-existent files (regression from e8e56d8377ab)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10692
diff changeset
1088 try:
2c2b2d384a47 mq: do not try to delete non-existent files (regression from e8e56d8377ab)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10692
diff changeset
1089 util.unlink(repo.wjoin(f))
2c2b2d384a47 mq: do not try to delete non-existent files (regression from e8e56d8377ab)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10692
diff changeset
1090 except OSError, inst:
2c2b2d384a47 mq: do not try to delete non-existent files (regression from e8e56d8377ab)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10692
diff changeset
1091 if inst.errno != errno.ENOENT:
2c2b2d384a47 mq: do not try to delete non-existent files (regression from e8e56d8377ab)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10692
diff changeset
1092 raise
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1093 self.ui.warn(_('done\n'))
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1094 raise
8875
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
1095
9590
07a62819b309 mq: fix traceback for qpush inexistant-patch with no patch applied
Benoit Allard <benoit@aeteurope.nl>
parents: 9588
diff changeset
1096 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
1097 return ret[0]
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1098 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
1099 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
1100 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
1101 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
1102 else:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1103 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
1104 return ret[0]
8875
801cacf46e62 mq: fix error message for qpush inexistent-patch (issue1702)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8833
diff changeset
1105
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1106 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
1107 wlock.release()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1108
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1109 def pop(self, repo, patch=None, force=False, update=True, all=False):
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1110 wlock = repo.wlock()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1111 try:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1112 if patch:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1113 # index, rev, patch
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1114 info = self.isapplied(patch)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1115 if not info:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1116 patch = self.lookup(patch)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1117 info = self.isapplied(patch)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1118 if not info:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1119 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
1120
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
1121 if not self.applied:
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1122 # 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
1123 # 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
1124 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
1125 return not all
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1126
7620
fbfd92d51540 mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7619
diff changeset
1127 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
1128 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
1129 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
1130 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
1131 else:
fbfd92d51540 mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7619
diff changeset
1132 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
1133
fbfd92d51540 mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7619
diff changeset
1134 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
1135 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
1136 return
fbfd92d51540 mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7619
diff changeset
1137
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1138 if not update:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1139 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
1140 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
1141 for p in parents:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1142 if p in rr:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1143 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
1144 update = True
7621
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1145 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
1146 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
1147 needupdate = False
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1148 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
1149 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
1150 needupdate = True
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1151 break
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1152 update = needupdate
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1153
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1154 if not force and update:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1155 self.check_localchanges(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1156
7620
fbfd92d51540 mq: refactor the pop code to be more readable and allow more changes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7619
diff changeset
1157 self.applied_dirty = 1
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1158 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
1159 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
1160 if update:
10191
99d285ac5da4 mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents: 10190
diff changeset
1161 top = self.check_toppatch(repo)[0]
5980
dcda0c90125c mq: pop/refresh: avoid losing revisions not managed by mq
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5979
diff changeset
1162
7621
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1163 try:
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1164 heads = repo.changelog.heads(rev)
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
1165 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
1166 node = short(rev)
6d891df43a5f mq: allow qpop if popped revisions are not working dir parents
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7620
diff changeset
1167 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
1168
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
1169 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
1170 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
1171 "managed by this patch queue"))
5980
dcda0c90125c mq: pop/refresh: avoid losing revisions not managed by mq
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5979
diff changeset
1172
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1173 # 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
1174 # form of hg.update.
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1175 if update:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1176 qp = self.qparents(repo, rev)
10663
85e81d9bfb7a mq: simplify and use context API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10662
diff changeset
1177 ctx = repo[qp]
6760
4faaa0535ea7 status: clean up all users for unknown files
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
1178 m, a, r, d = repo.status(qp, top)[:4]
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1179 if d:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1180 raise util.Abort(_("deletions found between repo revs"))
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1181 for f in a:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1182 try:
10872
9606edb8777e mq: use util.unlink instead of os.unlink and os.removedirs
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 10809
diff changeset
1183 util.unlink(repo.wjoin(f))
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1184 except OSError, e:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1185 if e.errno != errno.ENOENT:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1186 raise
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1187 repo.dirstate.forget(f)
10048
46de82e50790 mq: qpop: remove added files before re-adding removed files
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9874
diff changeset
1188 for f in m + r:
10663
85e81d9bfb7a mq: simplify and use context API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10662
diff changeset
1189 fctx = ctx[f]
85e81d9bfb7a mq: simplify and use context API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10662
diff changeset
1190 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
1191 repo.dirstate.normal(f)
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
1192 repo.dirstate.setparents(qp, nullid)
9110
561ff8d9e4f0 mq: qpop now tells which patches are popped
Mads Kiilerich <mads@kiilerich.com>
parents: 9067
diff changeset
1193 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
1194 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
1195 del self.applied[start:end]
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1196 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
1197 if self.applied:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1198 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
1199 else:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1200 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
1201 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
1202 wlock.release()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1203
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
1204 def diff(self, repo, pats, opts):
10191
99d285ac5da4 mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents: 10190
diff changeset
1205 top, patch = self.check_toppatch(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1206 if not top:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1207 self.ui.write(_("no patches applied\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1208 return
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1209 qp = self.qparents(repo, top)
9857
24bc6e414610 diff: change --inverse to --reverse
Martin Geisler <mg@lazybytes.net>
parents: 9824
diff changeset
1210 if opts.get('reverse'):
9725
3f522d2fa633 diff: add --inverse option
Yannick Gingras <ygingras@ygingras.net>
parents: 9642
diff changeset
1211 node1, node2 = None, qp
3f522d2fa633 diff: add --inverse option
Yannick Gingras <ygingras@ygingras.net>
parents: 9642
diff changeset
1212 else:
3f522d2fa633 diff: add --inverse option
Yannick Gingras <ygingras@ygingras.net>
parents: 9642
diff changeset
1213 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
1214 diffopts = self.diffopts(opts, patch)
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
1215 self.printdiff(repo, diffopts, node1, node2, files=pats, opts=opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1216
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
1217 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
1218 if not self.applied:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1219 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
1220 return 1
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1221 msg = opts.get('msg', '').rstrip()
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1222 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
1223 newdate = opts.get('date')
989467e8e3a9 Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 6120
diff changeset
1224 if newdate:
989467e8e3a9 Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 6120
diff changeset
1225 newdate = '%d %d' % util.parsedate(newdate)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1226 wlock = repo.wlock()
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1227
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1228 try:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1229 self.check_toppatch(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
1230 (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
1231 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
1232 raise util.Abort(_("cannot refresh a revision with children"))
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1233
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1234 cparents = repo.changelog.parents(top)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1235 patchparent = self.qparents(repo, top)
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1236 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
1237 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
1238 if msg:
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1239 ph.setmessage(msg)
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
1240 if newuser:
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1241 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
1242 if newdate:
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1243 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
1244 ph.setparent(hex(patchparent))
5180
5bbbd1f1d586 mq: truncate patch just before rewriting header
Brendan Cully <brendan@kublai.com>
parents: 4930
diff changeset
1245
7400
409a9b442308 mq: use atomictempfiles during patch refresh
Brendan Cully <brendan@kublai.com>
parents: 7399
diff changeset
1246 # only commit new patch when write is complete
409a9b442308 mq: use atomictempfiles during patch refresh
Brendan Cully <brendan@kublai.com>
parents: 7399
diff changeset
1247 patchf = self.opener(patchfn, 'w', atomictemp=True)
409a9b442308 mq: use atomictempfiles during patch refresh
Brendan Cully <brendan@kublai.com>
parents: 7399
diff changeset
1248
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
1249 comments = str(ph)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1250 if comments:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1251 patchf.write(comments)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1252
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1253 # 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
1254 # and then commit.
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1255 #
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1256 # this should really read:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1257 # mm, dd, aa, aa2 = repo.status(tip, patchparent)[:4]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1258 # but we do it backwards to take advantage of manifest/chlog
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1259 # caching against the next repo.status call
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1260 mm, aa, dd, aa2 = repo.status(patchparent, top)[:4]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1261 changes = repo.changelog.read(top)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1262 man = repo.manifest.read(changes[0])
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1263 aaa = aa[:]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1264 matchfn = cmdutil.match(repo, pats, opts)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1265 # 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
1266 # patch already plus specified files
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1267 if opts.get('short'):
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1268 # 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
1269 # files plus specified files - unfiltered
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1270 match = cmdutil.matchfiles(repo, mm + aa + dd + matchfn.files())
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1271 # filter with inc/exl options
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1272 matchfn = cmdutil.match(repo, opts=opts)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1273 else:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1274 match = cmdutil.matchall(repo)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1275 m, a, r, d = repo.status(match=match)[:4]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1276
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1277 # 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
1278 # 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
1279 # 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
1280 # show up in the added section
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1281 for x in m:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1282 if x not in aa:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1283 mm.append(x)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1284 # 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
1285 # 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
1286 # show up in the changed section.
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1287 for x in a:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1288 if x in dd:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1289 del dd[dd.index(x)]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1290 mm.append(x)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1291 else:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1292 aa.append(x)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1293 # 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
1294 # 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
1295 forget = []
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1296 for x in d + r:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1297 if x in aa:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1298 del aa[aa.index(x)]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1299 forget.append(x)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1300 continue
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1301 elif x in mm:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1302 del mm[mm.index(x)]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1303 dd.append(x)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1304
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1305 m = list(set(mm))
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1306 r = list(set(dd))
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1307 a = list(set(aa))
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1308 c = [filter(matchfn, l) for l in (m, a, r)]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1309 match = cmdutil.matchfiles(repo, set(c[0] + c[1] + c[2]))
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1310 chunks = patch.diff(repo, patchparent, match=match,
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1311 changes=c, opts=diffopts)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1312 for chunk in chunks:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1313 patchf.write(chunk)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1314
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1315 try:
10368
f05e0d54f424 Merge with crew-stable
Patrick Mezard <pmezard@gmail.com>
parents: 10362 10366
diff changeset
1316 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
1317 copies = {}
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1318 for dst in a:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1319 src = repo.dirstate.copied(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1320 # 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
1321 # 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
1322 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
1323 copies.setdefault(src, []).append(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1324 repo.dirstate.add(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1325 # 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
1326 for dst in aaa:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1327 f = repo.file(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1328 src = f.renamed(man[dst])
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1329 if src:
10368
f05e0d54f424 Merge with crew-stable
Patrick Mezard <pmezard@gmail.com>
parents: 10362 10366
diff changeset
1330 copies.setdefault(src[0], []).extend(
f05e0d54f424 Merge with crew-stable
Patrick Mezard <pmezard@gmail.com>
parents: 10362 10366
diff changeset
1331 copies.get(dst, []))
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1332 if dst in a:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1333 copies[src[0]].append(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1334 # 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
1335 if dst in copies:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1336 del copies[dst]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1337 for src, dsts in copies.iteritems():
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1338 for dst in dsts:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1339 repo.dirstate.copy(src, dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1340 else:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1341 for dst in a:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1342 repo.dirstate.add(dst)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1343 # Drop useless copy information
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1344 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
1345 repo.dirstate.copy(None, f)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1346 for f in r:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1347 repo.dirstate.remove(f)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1348 # 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
1349 # 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
1350 mm = []
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1351 for i in xrange(len(m)-1, -1, -1):
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1352 if not matchfn(m[i]):
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1353 mm.append(m[i])
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1354 del m[i]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1355 for f in m:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1356 repo.dirstate.normal(f)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1357 for f in mm:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1358 repo.dirstate.normallookup(f)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1359 for f in forget:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1360 repo.dirstate.forget(f)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1361
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1362 if not msg:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1363 if not ph.message:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1364 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
1365 else:
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1366 message = "\n".join(ph.message)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1367 else:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1368 message = msg
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
1369
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1370 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
1371
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1372 # assumes strip can roll itself back if interrupted
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1373 repo.dirstate.setparents(*cparents)
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1374 self.applied.pop()
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1375 self.applied_dirty = 1
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1376 self.strip(repo, top, update=False,
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1377 backup='strip')
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1378 except:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1379 repo.dirstate.invalidate()
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1380 raise
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1381
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1382 try:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1383 # might be nice to attempt to roll back strip after this
7400
409a9b442308 mq: use atomictempfiles during patch refresh
Brendan Cully <brendan@kublai.com>
parents: 7399
diff changeset
1384 patchf.rename()
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1385 n = repo.commit(message, user, ph.date, match=match,
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1386 force=True)
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
1387 self.applied.append(statusentry(n, patchfn))
10366
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1388 except:
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1389 ctx = repo[cparents[0]]
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1390 repo.dirstate.rebuild(ctx.node(), ctx.manifest())
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1391 self.save_dirty()
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1392 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
1393 '(revert --all, qpush to recover)\n'))
d355cebde5e6 mq: remove qrefresh slow path (issue2025)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10274
diff changeset
1394 raise
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
1395 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
1396 wlock.release()
7401
41e87b4d0c9d mq: recover more gracefully from interrupted qrefresh (issue1216)
Brendan Cully <brendan@kublai.com>
parents: 7400
diff changeset
1397 self.removeundo(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1398
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1399 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
1400 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
1401 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
1402 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
1403 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
1404 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
1405 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
1406 raise
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1407 if create:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1408 return self.qrepo(create=True)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1409
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1410 def unapplied(self, repo, patch=None):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1411 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
1412 raise util.Abort(_("patch %s is not in series file") % patch)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1413 if not patch:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1414 start = self.series_end()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1415 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1416 start = self.series.index(patch) + 1
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1417 unapplied = []
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1418 for i in xrange(start, len(self.series)):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1419 pushable, reason = self.pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1420 if pushable:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1421 unapplied.append((i, self.series[i]))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1422 self.explain_pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1423 return unapplied
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1424
4239
417c2068cb92 Simplified qseries and hg qapplied to fix some bugs caused by optimization:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4238
diff changeset
1425 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
1426 summary=False):
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1427 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
1428 if pfx:
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1429 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
1430 if summary:
10397
8cb81d75730c mq: add parent node IDs to MQ patches on qrefresh/qnew
Steve Losh <steve@stevelosh.com>
parents: 10382
diff changeset
1431 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
1432 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
1433 if self.ui.formatted():
9874
c51494c53841 qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9867
diff changeset
1434 width = util.termwidth() - len(pfx) - len(patchname) - 2
c51494c53841 qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9867
diff changeset
1435 if width > 0:
c51494c53841 qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9867
diff changeset
1436 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
1437 else:
c51494c53841 qseries: don't truncate the patch name (issue1912)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9867
diff changeset
1438 msg = ''
10932
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1439 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
1440 self.ui.write(': ')
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1441 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
1442 else:
10932
29c39fe2491b mq: only highlight/label patch name for qseries.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10890
diff changeset
1443 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
1444 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
1445
8152
08e1baf924ca replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents: 8151
diff changeset
1446 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
1447 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
1448 length = len(self.series) - start
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1449 if not missing:
9016
894c5b4be275 mq: align columns in verbose qseries output.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8948
diff changeset
1450 if self.ui.verbose:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1451 idxwidth = len(str(start + length - 1))
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1452 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
1453 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
1454 if patch in applied:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1455 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
1456 elif self.pushable(i)[0]:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1457 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
1458 else:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1459 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
1460 pfx = ''
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1461 if self.ui.verbose:
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1462 pfx = '%*d %s ' % (idxwidth, i, char)
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1463 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
1464 continue
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1465 displayname(pfx, patch, state)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1466 else:
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
1467 msng_list = []
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1468 for root, dirs, files in os.walk(self.path):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1469 d = root[len(self.path) + 1:]
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1470 for f in files:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1471 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
1472 if (fl not in self.series and
4241
7c59ade0f0d6 hg qseries -m: guards file was not ignored
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4239
diff changeset
1473 fl not in (self.status_path, self.series_path,
7c59ade0f0d6 hg qseries -m: guards file was not ignored
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4239
diff changeset
1474 self.guards_path)
1852
fdf9cbf56ec7 Fix mq's usage of opener, which don't allow absolute paths now.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1839
diff changeset
1475 and not fl.startswith('.')):
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
1476 msng_list.append(fl)
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8188
diff changeset
1477 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
1478 pfx = self.ui.verbose and ('D ') or ''
10824
18def0d5692d qseries: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10823
diff changeset
1479 displayname(pfx, x, 'missing')
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1480
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1481 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
1482 if l.name == '.hg.patches.save.line':
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1483 return True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1484
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1485 def qrepo(self, create=False):
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
1486 if create or os.path.isdir(self.join(".hg")):
1839
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1810
diff changeset
1487 return hg.repository(self.ui, path=self.path, create=create)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1488
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1489 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
1490 desc = repo[rev].description().strip()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1491 lines = desc.splitlines()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1492 i = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1493 datastart = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1494 series = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1495 applied = []
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1496 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
1497 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
1498 if line == 'Patch Data:':
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1499 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
1500 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
1501 l = line.rstrip()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1502 l = l[10:].split(' ')
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1503 qpp = [bin(x) for x in l]
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1504 elif datastart != None:
8632
9e055cfdd620 replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
1505 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
1506 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
1507 if n:
cfbf064f0069 mq: qsave creates entries with the left part empty (':patchname')
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10682
diff changeset
1508 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
1509 else:
10682
8ed350051896 mq: simplify statusentry(), fix restore broken by ee48e5ef8753
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10681
diff changeset
1510 series.append(l)
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
1511 if datastart is None:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1512 self.ui.warn(_("No saved patch data found\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1513 return 1
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1514 self.ui.warn(_("restoring status: %s\n") % lines[0])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1515 self.full_series = series
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1516 self.applied = applied
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
1517 self.parse_series()
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1518 self.series_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1519 self.applied_dirty = 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1520 heads = repo.changelog.heads()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1521 if delete:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1522 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
1523 self.ui.warn(_("save entry has children, leaving it alone\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1524 else:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1525 self.ui.warn(_("removing save entry %s\n") % short(rev))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1526 pp = repo.dirstate.parents()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1527 if rev in pp:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1528 update = True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1529 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1530 update = False
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1531 self.strip(repo, rev, update=update, backup='strip')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1532 if qpp:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1533 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
1534 (short(qpp[0]), short(qpp[1])))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1535 if qupdate:
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5788
diff changeset
1536 self.ui.status(_("queue directory updating\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1537 r = self.qrepo()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1538 if not r:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1539 self.ui.warn(_("Unable to load queue repository\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1540 return 1
2808
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2804
diff changeset
1541 hg.clean(r, qpp[0])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1542
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1543 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
1544 if not self.applied:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1545 self.ui.warn(_("save: no patches applied, exiting\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1546 return 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1547 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
1548 self.ui.warn(_("status is already saved\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1549 return 1
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1550
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1551 if not msg:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1552 msg = _("hg patches saved state")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1553 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1554 msg = "hg patches: " + msg.rstrip('\r\n')
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1555 r = self.qrepo()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1556 if r:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1557 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
1558 msg += "\nDirstate: %s %s" % (hex(pp[0]), hex(pp[1]))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1559 msg += "\n\nPatch Data:\n"
10679
35abaea778dc mq: simplify commit message generation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10678
diff changeset
1560 msg += ''.join('%s\n' % x for x in self.applied)
35abaea778dc mq: simplify commit message generation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10678
diff changeset
1561 msg += ''.join(':%s\n' % x for x in self.full_series)
35abaea778dc mq: simplify commit message generation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10678
diff changeset
1562 n = repo.commit(msg, force=True)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1563 if not n:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
1564 self.ui.warn(_("repo commit failed\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1565 return 1
10684
485c1d7f8a77 mq: fix coding style (missing space)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10683
diff changeset
1566 self.applied.append(statusentry(n, '.hg.patches.save.line'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1567 self.applied_dirty = 1
4209
dbc3846c09a1 Merge with -stable, fix small test failure
Matt Mackall <mpm@selenic.com>
parents: 4207
diff changeset
1568 self.removeundo(repo)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1569
2698
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1570 def full_series_end(self):
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
1571 if self.applied:
2780
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1572 p = self.applied[-1].name
2698
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1573 end = self.find_series(p)
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
1574 if end is None:
2698
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1575 return len(self.full_series)
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1576 return end + 1
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1577 return 0
c1123e83c8e2 mq: fix qnew and qimport to deal with series file comments
Chris Mason <mason@suse.com>
parents: 2697
diff changeset
1578
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1579 def series_end(self, all_patches=False):
4406
f700ea2b0689 mq: fix qtop failure when the series ends with guarded patches.
Patrick Mezard <pmezard@gmail.com>
parents: 4341
diff changeset
1580 """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
1581 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
1582 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
1583 """
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1584 end = 0
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1585 def next(start):
10687
583adcf63f80 mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10686
diff changeset
1586 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
1587 return start
10687
583adcf63f80 mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10686
diff changeset
1588 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
1589 p, reason = self.pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1590 if p:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1591 break
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1592 self.explain_pushable(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1593 return i
10686
0c68c2c36ed8 mq: don't use len(list) unless necessary
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10685
diff changeset
1594 if self.applied:
2780
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1595 p = self.applied[-1].name
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1596 try:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1597 end = self.series.index(p)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1598 except ValueError:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1599 return 0
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1600 return next(end + 1)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
1601 return next(end)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1602
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1603 def appliedname(self, index):
2780
ee48e5ef8753 Use StatusEntry class instead of repeated status line parsing.
Brendan Cully <brendan@kublai.com>
parents: 2765
diff changeset
1604 pname = self.applied[index].name
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1605 if not self.ui.verbose:
2677
ec05ce9cbf47 mq: uniform verbose display of patche[s].
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2664
diff changeset
1606 p = pname
ec05ce9cbf47 mq: uniform verbose display of patche[s].
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2664
diff changeset
1607 else:
2941
d32df6452323 mq: fix appliedname
Brendan Cully <brendan@kublai.com>
parents: 2940
diff changeset
1608 p = str(self.series.index(pname)) + " " + pname
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1609 return p
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
1610
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1611 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
1612 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
1613 def checkseries(patchname):
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1614 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
1615 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
1616 % patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1617 def checkfile(patchname):
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1618 if not force and os.path.exists(self.join(patchname)):
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1619 raise util.Abort(_('patch "%s" already exists')
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1620 % patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1621
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1622 if rev:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1623 if files:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1624 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
1625 'files'))
3707
67f44b825784 Removed unused ui parameter from revpair/revrange and fix its users.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3700
diff changeset
1626 rev = cmdutil.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
1627 rev.sort(reverse=True)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1628 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
1629 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
1630 'patches'))
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1631 if rev:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1632 # 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
1633 # 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
1634 # 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
1635 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
1636 if len(heads) > 1:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1637 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
1638 'branch') % rev[-1])
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1639 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
1640 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
1641 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
1642 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
1643 % 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
1644 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
1645 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
1646 '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
1647 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
1648 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
1649 else:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1650 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
1651 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
1652 % rev[0])
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1653 lastparent = None
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1654
10184
8a47347d298b mq: stop caching and sharing diff options
Patrick Mezard <pmezard@gmail.com>
parents: 10114
diff changeset
1655 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
1656 for r in rev:
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1657 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
1658 n = repo.changelog.node(r)
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
1659 if p2 != nullrev:
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1660 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
1661 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
1662 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
1663 % (r, lastparent))
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1664 lastparent = p1
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1665
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1666 if not patchname:
4037
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
1667 patchname = normname('%d.diff' % r)
5981
ca2af0c81c9a mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5980
diff changeset
1668 self.check_reserved_name(patchname)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1669 checkseries(patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1670 checkfile(patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1671 self.full_series.insert(0, patchname)
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1672
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1673 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
1674 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
1675 patchf.close()
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1676
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
1677 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
1678 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
1679
11462
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
1680 self.added.append(patchname)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1681 patchname = None
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1682 self.parse_series()
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1683 self.applied_dirty = 1
11462
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
1684 self.series_dirty = True
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1685
10687
583adcf63f80 mq: use xrange/enumerate instead of += 1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10686
diff changeset
1686 for i, filename in enumerate(files):
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1687 if existing:
3547
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
1688 if filename == '-':
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
1689 raise util.Abort(_('-e is incompatible with import from -'))
3133
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3091
diff changeset
1690 if not patchname:
4037
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
1691 patchname = normname(filename)
5981
ca2af0c81c9a mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5980
diff changeset
1692 self.check_reserved_name(patchname)
3133
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3091
diff changeset
1693 if not os.path.isfile(self.join(patchname)):
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3091
diff changeset
1694 raise util.Abort(_("patch %s does not exist") % patchname)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1695 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1696 try:
3547
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
1697 if filename == '-':
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
1698 if not patchname:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1699 raise util.Abort(
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1700 _('need --name to import a patch from -'))
3547
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
1701 text = sys.stdin.read()
891c8d20f80f mq: support qimport -
Brendan Cully <brendan@kublai.com>
parents: 3492
diff changeset
1702 else:
7271
8046f0a070a6 use our urlopener (proxy handling, etc) instead of urllib
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7216
diff changeset
1703 text = url.open(self.ui, filename).read()
7421
4c4324476be6 Catch both IOError and OSError, fix regression introduced by 8046f0a070a6
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7414
diff changeset
1704 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
1705 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
1706 if not patchname:
4037
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
1707 patchname = normname(os.path.basename(filename))
5981
ca2af0c81c9a mq: don't allow patches with some reserved names
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5980
diff changeset
1708 self.check_reserved_name(patchname)
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1709 checkfile(patchname)
3133
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3091
diff changeset
1710 patchf = self.opener(patchname, "w")
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1711 patchf.write(text)
7160
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
1712 if not force:
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
1713 checkseries(patchname)
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
1714 if patchname not in self.series:
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
1715 index = self.full_series_end() + i
1b7b21b634f2 mq: make qimport -f work properly. Closes issue1255.
Brendan Cully <brendan@kublai.com>
parents: 7158
diff changeset
1716 self.full_series[index:index] = [patchname]
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
1717 self.parse_series()
11462
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
1718 self.series_dirty = True
7597
81f68565281c mq, i18n: mark strings for translation
Martin Geisler <mg@daimi.au.dk>
parents: 7454
diff changeset
1719 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
1720 self.added.append(patchname)
3133
15fde1970003 qimport: rename patch to patchname to avoid shadowing module
Brendan Cully <brendan@kublai.com>
parents: 3091
diff changeset
1721 patchname = None
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1722
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
1723 def delete(ui, repo, *patches, **opts):
2905
790fd342b6c7 Allow qdel to delete multiple patches.
Brendan Cully <brendan@kublai.com>
parents: 2904
diff changeset
1724 """remove patches from queue
2752
5dfeda163bb7 Add -f option to qdelete, to remove patch file.
Brendan Cully <brendan@kublai.com>
parents: 2751
diff changeset
1725
8929
cb05e2a00291 mq: compact & rewrap documentation for qdelete command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8904
diff changeset
1726 The patches must not be applied, and at least one patch is required. With
cb05e2a00291 mq: compact & rewrap documentation for qdelete command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8904
diff changeset
1727 -k/--keep, the patch files are 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
1728
8be38b624902 mq: no longer mention the deprecated qdelete's --revision option
Cédric Duval <cedricduval@free.fr>
parents: 8894
diff changeset
1729 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
1730 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
1731 q = repo.mq
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
1732 q.delete(repo, patches, opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1733 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1734 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1735
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1736 def applied(ui, repo, patch=None, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1737 """print the patches already applied"""
9364
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1738
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1739 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
1740 l = len(q.applied)
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1741
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1742 if patch:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1743 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
1744 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
1745 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
1746 else:
4239
417c2068cb92 Simplified qseries and hg qapplied to fix some bugs caused by optimization:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4238
diff changeset
1747 end = q.series_end(True)
9364
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1748
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1749 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
1750 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
1751 return 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1752 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
1753 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
1754 return 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1755 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
1756 start = end - 2
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1757 end = 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1758 else:
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1759 start = 0
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1760
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1761 return q.qseries(repo, length=end, start=start, status='A',
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1762 summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1763
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1764 def unapplied(ui, repo, patch=None, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1765 """print the patches not yet applied"""
9364
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1766
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1767 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1768 if patch:
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1769 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
1770 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
1771 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
1772 else:
4238
ce6c364ebb2a Fix issue443: inconsistent output of "hg qunapplied -v"
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4173
diff changeset
1773 start = q.series_end(True)
9364
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1774
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1775 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
1776 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
1777 return 1
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1778
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1779 length = opts.get('first') and 1 or None
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1780 return q.qseries(repo, start=start, length=length, status='U',
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
1781 summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1782
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1783 def qimport(ui, repo, *filename, **opts):
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1784 """import a patch
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1785
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
1786 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
1787 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
1788 to the series.
d6caebe9c293 mq: qimport: explain insertion point in doc string
Adrian Buehlmann <adrian@cadifra.com>
parents: 6627
diff changeset
1789
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1790 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
1791 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
1792
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
1793 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
1794 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
1795
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
1796 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
1797 overwritten.
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1798
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
1799 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
1800 (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
1801 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
1802 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
1803 important for preserving rename/copy information and permission
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
1804 changes.
8075
1f0a5a5fff43 Update qimport help explaining how to read a patch from stdin (Issue371)
David Frey <dpfrey@shaw.ca>
parents: 8028
diff changeset
1805
1f0a5a5fff43 Update qimport help explaining how to read a patch from stdin (Issue371)
David Frey <dpfrey@shaw.ca>
parents: 8028
diff changeset
1806 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
1807 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
1808 using the --name flag.
3141
e21337e06952 mq: Add --rev argument to qimport, to adopt existing changesets.
Brendan Cully <brendan@kublai.com>
parents: 3133
diff changeset
1809 """
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1810 q = repo.mq
11462
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
1811 try:
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
1812 q.qimport(repo, filename, patchname=opts['name'],
3691
79151c94c3b4 mq: add --git option to qimport -r
Brendan Cully <brendan@kublai.com>
parents: 3685
diff changeset
1813 existing=opts['existing'], force=opts['force'], rev=opts['rev'],
79151c94c3b4 mq: add --git option to qimport -r
Brendan Cully <brendan@kublai.com>
parents: 3685
diff changeset
1814 git=opts['git'])
11462
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
1815 finally:
1b82a26635d7 mq: qimport cleanup on fail (issue2214)
Vishakh H <vsh426@gmail.com>
parents: 11439
diff changeset
1816 q.save_dirty()
8362
bbc74c05b8a4 mq: add -P/--push option to qimport
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8288
diff changeset
1817
bbc74c05b8a4 mq: add -P/--push option to qimport
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8288
diff changeset
1818 if opts.get('push') and not opts.get('rev'):
bbc74c05b8a4 mq: add -P/--push option to qimport
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8288
diff changeset
1819 return q.push(repo, None)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1820 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1821
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1822 def qinit(ui, repo, create):
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1823 """initialize a new queue repository
2754
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1824
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1825 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
1826 an mq-specific .hgignore file in the queue repository, to exclude
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1827 the status and guards files (these contain mostly transient state)."""
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
1828 q = repo.mq
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1829 r = q.init(repo, create)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1830 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1831 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
1832 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
1833 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
1834 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
1835 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
1836 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
1837 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
1838 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
1839 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
1840 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
1841 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
1842 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
1843 commands.add(ui, r)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1844 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1845
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1846 def init(ui, repo, **opts):
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1847 """init a new queue repository (DEPRECATED)
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1848
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1849 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
1850 -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
1851 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
1852 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
1853 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
1854
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1855 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
1856 commands. With -c, use :hg:`init --mq` instead."""
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1857 return qinit(ui, repo, create=opts['create_repo'])
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
1858
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1859 def clone(ui, source, dest=None, **opts):
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1860 '''clone main and patch repository at same time
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1861
7983
7b813bdbd5d0 Change double spaces to single spaces in help texts.
Martin Geisler <mg@daimi.au.dk>
parents: 7874
diff changeset
1862 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
1863 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
1864 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
1865 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
1866 before that it has no patches applied.
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1867
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1868 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
1869 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
1870
8760
bf17aeafb869 Spell Mercurial as a proper noun
timeless <timeless@gmail.com>
parents: 8711
diff changeset
1871 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
1872 would be created by :hg:`init --mq`.
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1873 '''
5226
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
1874 def patchdir(repo):
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
1875 url = repo.url()
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
1876 if url.endswith('/'):
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
1877 url = url[:-1]
438ff951df70 avoid double slash problem mentioned in issue695
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5180
diff changeset
1878 return url + '/.hg/patches'
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1879 if dest is None:
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1880 dest = hg.defaultdest(source)
11273
d1908cb95a82 remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents: 11271
diff changeset
1881 sr = hg.repository(hg.remoteui(ui, opts), ui.expandpath(source))
7729
dd08e1e0cea1 mq: allow qclone's -p option to use path alias
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7639
diff changeset
1882 if opts['patches']:
dd08e1e0cea1 mq: allow qclone's -p option to use path alias
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7639
diff changeset
1883 patchespath = ui.expandpath(opts['patches'])
dd08e1e0cea1 mq: allow qclone's -p option to use path alias
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7639
diff changeset
1884 else:
dd08e1e0cea1 mq: allow qclone's -p option to use path alias
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7639
diff changeset
1885 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
1886 try:
7874
d812029cda85 cleanup: drop variables for unused return values
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7782
diff changeset
1887 hg.repository(ui, patchespath)
7637
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7627
diff changeset
1888 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
1889 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
1890 ' (see init --mq)'))
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1891 qbase, destrev = None, None
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1892 if sr.local():
2725
9ffee4f07323 mq: update to handle repomap not longer used
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2724
diff changeset
1893 if sr.mq.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
1894 qbase = sr.mq.applied[0].node
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1895 if not hg.islocal(dest):
8152
08e1baf924ca replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents: 8151
diff changeset
1896 heads = set(sr.heads())
08e1baf924ca replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents: 8151
diff changeset
1897 destrev = list(heads.difference(sr.heads(qbase)))
4171
1df1baf2002e fix qclone to a remote repo
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4133
diff changeset
1898 destrev.append(sr.changelog.parents(qbase)[0])
6164
0c2b443fb3c3 mq: make qclone ask remote source repo for qbase using lookup protocol
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 6139
diff changeset
1899 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
1900 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
1901 qbase = sr.lookup('qbase')
7637
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7627
diff changeset
1902 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
1903 pass
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
1904 ui.note(_('cloning main repository\n'))
4476
4ef8fdf57e39 mq: pass a URL to clone
Matt Mackall <mpm@selenic.com>
parents: 4437
diff changeset
1905 sr, dr = hg.clone(ui, sr.url(), dest,
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1906 pull=opts['pull'],
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1907 rev=destrev,
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1908 update=False,
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1909 stream=opts['uncompressed'])
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
1910 ui.note(_('cloning patch repository\n'))
7874
d812029cda85 cleanup: drop variables for unused return values
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7782
diff changeset
1911 hg.clone(ui, opts['patches'] or patchdir(sr), patchdir(dr),
d812029cda85 cleanup: drop variables for unused return values
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7782
diff changeset
1912 pull=opts['pull'], update=not opts['noupdate'],
d812029cda85 cleanup: drop variables for unused return values
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7782
diff changeset
1913 stream=opts['uncompressed'])
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1914 if dr.local():
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1915 if qbase:
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
1916 ui.note(_('stripping applied patches from destination '
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
1917 'repository\n'))
2725
9ffee4f07323 mq: update to handle repomap not longer used
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2724
diff changeset
1918 dr.mq.strip(dr, qbase, update=False, backup=None)
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1919 if not opts['noupdate']:
8027
9c7ca86fc658 expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 8026
diff changeset
1920 ui.note(_('updating destination repository\n'))
2775
b550cd82f92a Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents: 2772
diff changeset
1921 hg.update(dr, dr.changelog.tip())
2720
c91ca61c8953 mq: add qclone command
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2713
diff changeset
1922
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1923 def commit(ui, repo, *pats, **opts):
10361
49cd2e7fd91c mq: deprecate qinit and qcommit
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10360
diff changeset
1924 """commit changes in the queue repository (DEPRECATED)
49cd2e7fd91c mq: deprecate qinit and qcommit
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10360
diff changeset
1925
11193
687c7d395f20 Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents: 11121
diff changeset
1926 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
1927 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1928 r = q.qrepo()
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1929 if not r:
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1930 raise util.Abort('no queue repository')
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1931 commands.commit(r.ui, r, *pats, **opts)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1932
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1933 def series(ui, repo, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1934 """print the entire series file"""
2756
caa6d992608b Add -s option to qseries: display first line of patch header.
Brendan Cully <brendan@kublai.com>
parents: 2754
diff changeset
1935 repo.mq.qseries(repo, missing=opts['missing'], summary=opts['summary'])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1936 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1937
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1938 def top(ui, repo, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1939 """print the name of the current patch"""
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1940 q = repo.mq
4406
f700ea2b0689 mq: fix qtop failure when the series ends with guarded patches.
Patrick Mezard <pmezard@gmail.com>
parents: 4341
diff changeset
1941 t = q.applied and q.series_end(True) or 0
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1942 if t:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1943 return q.qseries(repo, start=t - 1, length=1, status='A',
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1944 summary=opts.get('summary'))
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1945 else:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1946 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
1947 return 1
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1948
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1949 def next(ui, repo, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1950 """print the name of the next patch"""
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1951 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1952 end = q.series_end()
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1953 if end == len(q.series):
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1954 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
1955 return 1
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1956 return q.qseries(repo, start=end, length=1, summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1957
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1958 def prev(ui, repo, **opts):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1959 """print the name of the previous patch"""
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1960 q = repo.mq
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1961 l = len(q.applied)
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1962 if l == 1:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1963 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
1964 return 1
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1965 if not l:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
1966 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
1967 return 1
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
1968 return q.qseries(repo, start=l - 2, length=1, status='A',
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
1969 summary=opts.get('summary'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
1970
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
1971 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
1972 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
1973 opts['user'] = ui.username()
f16ec85f125c mq: do not call ui.username unless it is necessary
Martin Geisler <mg@lazybytes.net>
parents: 9725
diff changeset
1974 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
1975 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
1976
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
1977 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
1978 """create a new patch
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1979
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
1980 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
1981 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
1982 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
1983 -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
1984 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
1985 as uncommitted modifications.
2754
19041b8cbc86 Add more verbose help text to mq commands.
Brendan Cully <brendan@kublai.com>
parents: 2753
diff changeset
1986
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
1987 -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
1988 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
1989 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
1990
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
1991 -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
1992 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
1993 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
1994
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
1995 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
1996 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
1997 is important for preserving permission changes and copy/rename
7e9a15fa6c8f update help on git diffs
Matt Mackall <mpm@selenic.com>
parents: 7308
diff changeset
1998 information.
7306
8e46e59aaf4c mq: reflow qnew help, add help for options
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7297
diff changeset
1999 """
7157
fd3cba5e73ae mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents: 7142
diff changeset
2000 msg = cmdutil.logmessage(opts)
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2001 def getmsg():
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2002 return ui.edit(msg, ui.username())
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2003 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
2004 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
2005 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
2006 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
2007 else:
fd3cba5e73ae mq: do not invoke editor until just before patch creation. Closes issue1346.
Brendan Cully <brendan@kublai.com>
parents: 7142
diff changeset
2008 opts['msg'] = msg
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
2009 setupheaderopts(ui, opts)
4713
c29ee52e0b68 mq: support qnew -I/-X and file name lists
Brendan Cully <brendan@kublai.com>
parents: 4712
diff changeset
2010 q.new(repo, patch, *args, **opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2011 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2012 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2013
2938
5b7a118f5b6c allow qrefresh to take a list of files; closes #96.
Brendan Cully <brendan@kublai.com>
parents: 2937
diff changeset
2014 def refresh(ui, repo, *pats, **opts):
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2015 """update the current patch
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2016
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2017 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
2018 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
2019 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
2020
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2021 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
2022 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
2023
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2024 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
2025 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
2026 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
2027 git diff format.
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2028 """
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2029 q = repo.mq
4549
0c61124ad877 dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents: 4476
diff changeset
2030 message = cmdutil.logmessage(opts)
2746
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
2031 if opts['edit']:
5334
448eb46d4d84 mq: fix qrefresh -e with no patches applied
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5226
diff changeset
2032 if not q.applied:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2033 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
2034 return 1
2746
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
2035 if message:
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
2036 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
2037 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
2038 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
2039 message = ui.edit('\n'.join(ph.message), ph.user or ui.username())
5673
dd3ce7515f4d mq: add --currentuser and --user options to qnew and qrefresh
peter.arrenbrecht@gmail.com
parents: 5645
diff changeset
2040 setupheaderopts(ui, opts)
3004
ac74046f8f58 qrefresh: exit with status 1 if no patches applied.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2984
diff changeset
2041 ret = q.refresh(repo, pats, msg=message, **opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2042 q.save_dirty()
3004
ac74046f8f58 qrefresh: exit with status 1 if no patches applied.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2984
diff changeset
2043 return ret
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2044
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
2045 def diff(ui, repo, *pats, **opts):
6606
088ba40585b9 mq: expand help text for qdiff
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6561
diff changeset
2046 """diff of the current patch and subsequent modifications
6621
d5cbbe2c49ce mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6611
diff changeset
2047
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2048 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
2049 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
2050 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
2051 after a qrefresh).
6621
d5cbbe2c49ce mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6611
diff changeset
2052
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10962
diff changeset
2053 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
2054 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
2055 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
2056 qrefresh.
6606
088ba40585b9 mq: expand help text for qdiff
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6561
diff changeset
2057 """
2937
9dc568f5e03d Fix test-mq-qdiff; add -I and -X options to qdiff
Brendan Cully <brendan@kublai.com>
parents: 2936
diff changeset
2058 repo.mq.diff(repo, pats, opts)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2059 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2060
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2061 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
2062 """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
2063
2771
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
2064 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
2065 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
2066 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
2067 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
2068 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
2069 removed afterwards.
2771
519bf0cd28d2 Add -f option to qfold; improve qfold documentation.
Brendan Cully <brendan@kublai.com>
parents: 2770
diff changeset
2070
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2071 The header for each folded patch will be concatenated with the
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2072 current patch header, separated by a line of '* * *'."""
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2073
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2074 q = repo.mq
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2075
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2076 if not files:
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2077 raise util.Abort(_('qfold requires at least one patch name'))
10191
99d285ac5da4 mq: qdiff with the same diff options than qrefresh (issue1350)
Patrick Mezard <pmezard@gmail.com>
parents: 10190
diff changeset
2078 if not q.check_toppatch(repo)[0]:
3072
bc3fe3b5b785 Never apply string formatting to generated errors with util.Abort.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3027
diff changeset
2079 raise util.Abort(_('No patches applied'))
8425
73d80d5bf478 mq: abort qfold upon local changes (issue1662)
David Frey <dpfrey@shaw.ca>
parents: 7782
diff changeset
2080 q.check_localchanges(repo)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2081
4549
0c61124ad877 dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents: 4476
diff changeset
2082 message = cmdutil.logmessage(opts)
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2083 if opts['edit']:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2084 if message:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2085 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
2086
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2087 parent = q.lookup('qtip')
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2088 patches = []
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2089 messages = []
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2090 for f in files:
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2091 p = q.lookup(f)
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2092 if p in patches or p == parent:
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2093 ui.warn(_('Skipping already folded patch %s') % p)
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2094 if q.isapplied(p):
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2095 raise util.Abort(_('qfold cannot fold already applied patch %s') % p)
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2096 patches.append(p)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2097
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2098 for p in patches:
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2099 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
2100 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
2101 if ph.message:
1d5ecaa47abb mq: filter out empty commit messages in qfold
Brendan Cully <brendan@kublai.com>
parents: 7453
diff changeset
2102 messages.append(ph.message)
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2103 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
2104 (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
2105 if not patchsuccess:
2936
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2106 raise util.Abort(_('Error folding patch %s') % p)
21bf8929efc8 Fix qfold after recent changes
Brendan Cully <brendan@kublai.com>
parents: 2934
diff changeset
2107 patch.updatedir(ui, repo, files)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2108
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2109 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
2110 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
2111 message, user = ph.message, ph.user
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2112 for msg in messages:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2113 message.append('* * *')
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2114 message.extend(msg)
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2115 message = '\n'.join(message)
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2116
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2117 if opts['edit']:
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2118 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
2119
10186
296a0b14a686 mq: preserve --git flag when folding patches
Patrick Mezard <pmezard@gmail.com>
parents: 10185
diff changeset
2120 diffopts = q.patchopts(q.diffopts(), *patches)
296a0b14a686 mq: preserve --git flag when folding patches
Patrick Mezard <pmezard@gmail.com>
parents: 10185
diff changeset
2121 q.refresh(repo, msg=message, git=diffopts.git)
3243
1d3aceae87c1 mq: update qfold to call delete correctly
Brendan Cully <brendan@kublai.com>
parents: 3223
diff changeset
2122 q.delete(repo, patches, opts)
2748
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2123 q.save_dirty()
752b9475a700 New mq command qfold: Merge patches into the current patch.
Brendan Cully <brendan@kublai.com>
parents: 2747
diff changeset
2124
4432
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2125 def goto(ui, repo, patch, **opts):
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2126 '''push or pop patches until named patch is at top of stack'''
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2127 q = repo.mq
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2128 patch = q.lookup(patch)
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2129 if q.isapplied(patch):
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2130 ret = q.pop(repo, patch, force=opts['force'])
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2131 else:
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2132 ret = q.push(repo, patch, force=opts['force'])
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2133 q.save_dirty()
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2134 return ret
905397be7688 mq: add qgoto command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4430
diff changeset
2135
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2136 def guard(ui, repo, *args, **opts):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2137 '''set or print guards for a patch
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2138
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2139 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
2140 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
2141 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
2142 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
2143 has activated it.
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2144
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2145 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
2146 With arguments, set guards for the named patch.
7772
88887054d277 fancyopts: Parse options that occur after arguments.
Augie Fackler <durin42@gmail.com>
parents: 7729
diff changeset
2147 NOTE: Specifying negative guards now requires '--'.
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2148
9824
87c92b260710 mq: fix literal blocks in docstrings
Martin Geisler <mg@lazybytes.net>
parents: 9733
diff changeset
2149 To set guards on another patch::
87c92b260710 mq: fix literal blocks in docstrings
Martin Geisler <mg@lazybytes.net>
parents: 9733
diff changeset
2150
10476
3113736dbac5 mq: more instructive use of "--" in qguard help (issue2040)
Martin Geisler <mg@lazybytes.net>
parents: 10413
diff changeset
2151 hg qguard other.patch -- +2.6.17 -stable
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2152 '''
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2153 def status(idx):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2154 guards = q.series_guards[idx] or ['unguarded']
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2155 ui.write('%s: ' % ui.label(q.series[idx], 'qguard.patch'))
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2156 for i, guard in enumerate(guards):
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2157 if guard.startswith('+'):
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2158 ui.write(guard, label='qguard.positive')
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2159 elif guard.startswith('-'):
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2160 ui.write(guard, label='qguard.negative')
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2161 else:
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2162 ui.write(guard, label='qguard.unguarded')
10822
4c63f8e787b8 qguard: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10814
diff changeset
2163 if i != len(guards) - 1:
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2164 ui.write(' ')
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2165 ui.write('\n')
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2166 q = repo.mq
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2167 patch = None
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2168 args = list(args)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2169 if opts['list']:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2170 if args or opts['none']:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2171 raise util.Abort(_('cannot mix -l/--list with options or arguments'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2172 for i in xrange(len(q.series)):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2173 status(i)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2174 return
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2175 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
2176 if not q.applied:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2177 raise util.Abort(_('no patches applied'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2178 patch = q.applied[-1].name
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2179 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
2180 patch = args.pop(0)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2181 if patch is None:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2182 raise util.Abort(_('no patch to work with'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2183 if args or opts['none']:
4133
a9ee6c53af8d mq: abort cleanly when invalid patch name is given to qguard
Christian Ebert <blacktrash@gmx.net>
parents: 4090
diff changeset
2184 idx = q.find_series(patch)
a9ee6c53af8d mq: abort cleanly when invalid patch name is given to qguard
Christian Ebert <blacktrash@gmx.net>
parents: 4090
diff changeset
2185 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
2186 raise util.Abort(_('no patch named %s') % patch)
a9ee6c53af8d mq: abort cleanly when invalid patch name is given to qguard
Christian Ebert <blacktrash@gmx.net>
parents: 4090
diff changeset
2187 q.set_guards(idx, args)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2188 q.save_dirty()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2189 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2190 status(q.series.index(q.lookup(patch)))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2191
2747
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2192 def header(ui, repo, patch=None):
7598
26adfaccdf73 lowercase help output
Martin Geisler <mg@daimi.au.dk>
parents: 7597
diff changeset
2193 """print the header of the topmost or specified patch"""
2747
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2194 q = repo.mq
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2195
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2196 if patch:
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2197 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
2198 else:
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2199 if not q.applied:
10510
f77f3383c666 i18n: mark more strings for translation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10498
diff changeset
2200 ui.write(_('no patches applied\n'))
3008
c203ccd7d838 qheader: exit withh meaningful error code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3006
diff changeset
2201 return 1
2747
0016fc748f61 Add command qheader to display the header of a given patch.
Brendan Cully <brendan@kublai.com>
parents: 2746
diff changeset
2202 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
2203 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
2204
7399
e71bda2d2087 mq: create patch header class to abstract header manipulation
Brendan Cully <brendan@kublai.com>
parents: 7398
diff changeset
2205 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
2206
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2207 def lastsavename(path):
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
2208 (directory, base) = os.path.split(path)
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
2209 names = os.listdir(directory)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2210 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
2211 maxindex = None
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2212 maxname = None
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2213 for f in names:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2214 m = namere.match(f)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2215 if m:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2216 index = int(m.group(1))
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8525
diff changeset
2217 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
2218 maxindex = index
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2219 maxname = f
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2220 if maxname:
2794
86c54b7cd331 mq: fix variables shadowing builtin
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2792
diff changeset
2221 return (os.path.join(directory, maxname), maxindex)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2222 return (None, None)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2223
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2224 def savename(path):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2225 (last, index) = lastsavename(path)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2226 if last is None:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2227 index = 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2228 newpath = path + ".%d" % (index + 1)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2229 return newpath
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2230
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2231 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
2232 """push the next patch onto the stack
6553
0bb76d168437 remove trailing spaces
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6552
diff changeset
2233
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2234 When -f/--force is applied, all local changes in patched files
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2235 will be lost.
6552
315b36ce6251 mq: add a little documentation on qpush -f
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6382
diff changeset
2236 """
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2237 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2238 mergeq = None
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2239
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2240 if opts['merge']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2241 if opts['name']:
6627
d9266e48cd27 mq: qpush -n fix
teki321@gmail.com
parents: 6621
diff changeset
2242 newpath = repo.join(opts['name'])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2243 else:
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2244 newpath, i = lastsavename(q.path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2245 if not newpath:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2246 ui.warn(_("no saved queues found, please use -n\n"))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2247 return 1
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2248 mergeq = queue(ui, repo.join(""), newpath)
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2249 ui.warn(_("merging with queue at: %s\n") % mergeq.path)
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2250 ret = q.push(repo, patch, force=opts['force'], list=opts['list'],
11064
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
2251 mergeq=mergeq, all=opts.get('all'), move=opts.get('move'))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2252 return ret
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2253
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2254 def pop(ui, repo, patch=None, **opts):
6611
f4c612da788d mq: add correct documentation for qpop
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6610
diff changeset
2255 """pop the current patch off the stack
6621
d5cbbe2c49ce mq: lose the trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6611
diff changeset
2256
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2257 By default, pops off the top of the patch stack. If given a patch
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2258 name, keeps popping off patches until the named patch is at the
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2259 top of the stack.
6611
f4c612da788d mq: add correct documentation for qpop
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6610
diff changeset
2260 """
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2261 localupdate = True
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2262 if opts['name']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2263 q = queue(ui, repo.join(""), repo.join(opts['name']))
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2264 ui.warn(_('using patch queue: %s\n') % q.path)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2265 localupdate = False
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2266 else:
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2267 q = repo.mq
4099
cf5580c16b13 mq: propagate the return error of pop
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4096
diff changeset
2268 ret = q.pop(repo, patch, force=opts['force'], update=localupdate,
cf5580c16b13 mq: propagate the return error of pop
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4096
diff changeset
2269 all=opts['all'])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2270 q.save_dirty()
4099
cf5580c16b13 mq: propagate the return error of pop
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4096
diff changeset
2271 return ret
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2272
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2273 def rename(ui, repo, patch, name=None, **opts):
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2274 """rename a patch
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2275
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2276 With one argument, renames the current patch to PATCH1.
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2277 With two arguments, renames PATCH1 to PATCH2."""
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2278
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2279 q = repo.mq
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2280
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2281 if not name:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2282 name = patch
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2283 patch = None
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2284
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2285 if patch:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2286 patch = q.lookup(patch)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2287 else:
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2288 if not q.applied:
7627
fb32ae9c76e7 mq: lowercase output
Martin Geisler <mg@daimi.au.dk>
parents: 7621
diff changeset
2289 ui.write(_('no patches applied\n'))
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2290 return
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2291 patch = q.lookup('qtip')
3083
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
2292 absdest = q.join(name)
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
2293 if os.path.isdir(absdest):
4037
bbdba01cce28 Enforce unixish style for all generated patch names.
Patrick Mezard <pmezard@gmail.com>
parents: 4016
diff changeset
2294 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
2295 absdest = q.join(name)
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
2296 if os.path.exists(absdest):
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
2297 raise util.Abort(_('%s already exists') % absdest)
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
2298
3083
82c9d1aac308 Make qrename handle directory targets; closes #333.
Brendan Cully <brendan@kublai.com>
parents: 3082
diff changeset
2299 if name in q.series:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2300 raise util.Abort(
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2301 _('A patch named %s already exists in the series file') % name)
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2302
10510
f77f3383c666 i18n: mark more strings for translation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10498
diff changeset
2303 ui.note(_('renaming %s to %s\n') % (patch, name))
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2304 i = q.find_series(patch)
3685
193e9c6d1a6d Issue424: mq patch loses guard when qrenamed
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3681
diff changeset
2305 guards = q.guard_re.findall(q.full_series[i])
193e9c6d1a6d Issue424: mq patch loses guard when qrenamed
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3681
diff changeset
2306 q.full_series[i] = name + ''.join([' #' + g for g in guards])
2767
60683ab1ed33 mq: rename read_series as parse_series, make simpler and faster
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2766
diff changeset
2307 q.parse_series()
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2308 q.series_dirty = 1
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2309
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2310 info = q.isapplied(patch)
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2311 if info:
2818
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2816
diff changeset
2312 q.applied[info[0]] = statusentry(info[1], name)
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2313 q.applied_dirty = 1
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2314
11513
0c944b7af564 mq: fixed ENOENT when qrename to new/directory.patch
Yuya Nishihara <yuya@tcha.org>
parents: 11462
diff changeset
2315 destdir = os.path.dirname(absdest)
0c944b7af564 mq: fixed ENOENT when qrename to new/directory.patch
Yuya Nishihara <yuya@tcha.org>
parents: 11462
diff changeset
2316 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
2317 os.makedirs(destdir)
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
2318 util.rename(q.join(patch), absdest)
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2319 r = q.qrepo()
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2320 if r:
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11302
diff changeset
2321 wctx = r[None]
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2322 wlock = r.wlock()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
2323 try:
6648
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
2324 if r.dirstate[patch] == 'a':
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
2325 r.dirstate.forget(patch)
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
2326 r.dirstate.add(name)
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
2327 else:
2519976a998b mq: handle added patch renaming correctly
Weijun Wang <weijun.wang@sun.com>
parents: 6635
diff changeset
2328 if r.dirstate[name] == 'r':
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11302
diff changeset
2329 wctx.undelete([name])
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11302
diff changeset
2330 wctx.copy(patch, name)
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11302
diff changeset
2331 wctx.remove([patch], False)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4906
diff changeset
2332 finally:
8112
6ee71f78497c switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8076
diff changeset
2333 wlock.release()
2750
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2334
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2335 q.save_dirty()
8c814c1ab31e New self-explanatory command qrename.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2336
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2337 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
2338 """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
2339
bcf90e712dc3 mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10359
diff changeset
2340 This command is deprecated, use rebase --mq instead."""
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2341 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
2342 q = repo.mq
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2343 q.restore(repo, rev, delete=opts['delete'],
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2344 qupdate=opts['update'])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2345 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2346 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2347
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2348 def save(ui, repo, **opts):
10360
bcf90e712dc3 mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10359
diff changeset
2349 """save current queue state (DEPRECATED)
bcf90e712dc3 mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10359
diff changeset
2350
bcf90e712dc3 mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10359
diff changeset
2351 This command is deprecated, use rebase --mq instead."""
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2352 q = repo.mq
4549
0c61124ad877 dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents: 4476
diff changeset
2353 message = cmdutil.logmessage(opts)
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2682
diff changeset
2354 ret = q.save(repo, msg=message)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2355 if ret:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2356 return ret
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2357 q.save_dirty()
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2358 if opts['copy']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2359 path = q.path
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2360 if opts['name']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2361 newpath = os.path.join(q.basepath, opts['name'])
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2362 if os.path.exists(newpath):
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2363 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
2364 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
2365 'a directory') % newpath)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2366 if not opts['force']:
2712
8e5cd8d11b51 mq: move many error messages to util.Abort
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2711
diff changeset
2367 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
2368 'use -f to force') % newpath)
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2369 else:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2370 newpath = savename(path)
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2371 ui.warn(_("copy %s to %s\n") % (path, newpath))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2372 util.copyfiles(path, newpath)
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2373 if opts['empty']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2374 try:
2819
766ecdc83e43 mq: add join method
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2818
diff changeset
2375 os.unlink(q.join(q.status_path))
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2376 except:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2377 pass
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2378 return 0
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2379
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2380 def strip(ui, repo, rev, **opts):
11073
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2381 """strip a changeset and all its descendants from the repository
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2382
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2383 The strip command removes all changesets whose local revision
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2384 number is greater than or equal to REV, and then restores any
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2385 changesets that are not descendants of REV. If the working
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2386 directory has uncommitted changes, the operation is aborted unless
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2387 the --force flag is supplied.
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
2388
11073
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2389 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
2390 directory will automatically be updated to the most recent
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2391 available ancestor of the stripped parent after the operation
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2392 completes.
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2393
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2394 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
2395 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
2396 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
2397 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
2398 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
2399 restore.
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2400
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2401 Use the --nobackup option to discard the backup bundle once the
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2402 operation completes.
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
2403 """
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2404 backup = 'all'
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2405 if opts['backup']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2406 backup = 'strip'
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2407 elif opts['nobackup']:
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2408 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
2409
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2410 rev = repo.lookup(rev)
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2411 p = repo.dirstate.parents()
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2412 cl = repo.changelog
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2413 update = True
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
2414 if p[0] == nullid:
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
2415 update = False
7639
ae7a614a6a57 mq: remove import of revlog
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
2416 elif p[1] == nullid and rev != cl.ancestor(p[0], rev):
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
2417 update = False
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2418 elif rev not in (cl.ancestor(p[0], rev), cl.ancestor(p[1], rev)):
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2419 update = False
d90d83ebea9e mq: don't update the working copy on strip if parents aren't stripped
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6634
diff changeset
2420
11637
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2421 q = repo.mq
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2422 if q.applied:
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2423 if rev == cl.ancestor(repo.lookup('qtip'), rev):
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2424 q.applied_dirty = True
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2425 start = 0
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2426 end = len(q.applied)
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2427 applied_list = [i.node for i in q.applied]
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2428 if rev in applied_list:
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2429 start = applied_list.index(rev)
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2430 del q.applied[start:end]
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2431 q.save_dirty()
64f284da1278 mq: cleanup status if applied mq is stripped (issue1881)
Vishakh H <vsh426@gmail.com>
parents: 11546
diff changeset
2432
6472
8c4cd80afd3e mq: add --force option to strip
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6382
diff changeset
2433 repo.mq.strip(repo, rev, backup=backup, update=update, force=opts['force'])
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2434 return 0
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2435
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2436 def select(ui, repo, *args, **opts):
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2437 '''set or print guarded patches to push
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2438
11307
7f72031d4047 mq: use hg reST role some more
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
2439 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
2440 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
2441 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
2442 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
2443 match the current guard. For example::
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2444
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2445 qguard foo.patch -stable (negative guard)
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2446 qguard bar.patch +stable (positive guard)
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2447 qselect stable
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2448
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2449 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
2450 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
2451 positive match).
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2452
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2453 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
2454 With one argument, sets the active guard.
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
2455
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2456 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
2457 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
2458 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
2459
2940
b1e6d701a03a mq help text updates and speling fixes
Brendan Cully <brendan@kublai.com>
parents: 2939
diff changeset
2460 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
2461 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
2462 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
2463 --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
2464 guarded patches.
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2465
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2466 Use -s/--series to print a list of all guards in the series file
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2467 (no other arguments needed). Use -v for more information.'''
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2468
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2469 q = repo.mq
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2470 guards = q.active()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2471 if args or opts['none']:
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2472 old_unapplied = q.unapplied(repo)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2473 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
2474 not q.pushable(i)[0]]
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2475 q.set_active(args)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2476 q.save_dirty()
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2477 if not args:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2478 ui.status(_('guards deactivated\n'))
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2479 if not opts['pop'] and not opts['reapply']:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2480 unapplied = q.unapplied(repo)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2481 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
2482 if not q.pushable(i)[0]]
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2483 if len(unapplied) != len(old_unapplied):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2484 ui.status(_('number of unguarded, unapplied patches has '
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2485 'changed from %d to %d\n') %
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2486 (len(old_unapplied), len(unapplied)))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2487 if len(guarded) != len(old_guarded):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2488 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
2489 'from %d to %d\n') %
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2490 (len(old_guarded), len(guarded)))
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2491 elif opts['series']:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2492 guards = {}
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2493 noguards = 0
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2494 for gs in q.series_guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2495 if not gs:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2496 noguards += 1
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2497 for g in gs:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2498 guards.setdefault(g, 0)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2499 guards[g] += 1
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2500 if ui.verbose:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2501 guards['NONE'] = noguards
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2502 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
2503 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
2504 if guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2505 ui.note(_('guards in series file:\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2506 for guard, count in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2507 ui.note('%2d ' % count)
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2508 ui.write(guard, '\n')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2509 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2510 ui.note(_('no guards in series file\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2511 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2512 if guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2513 ui.note(_('active guards:\n'))
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2514 for g in guards:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2515 ui.write(g, '\n')
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2516 else:
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2517 ui.write(_('no active guards\n'))
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2518 reapply = opts['reapply'] and q.applied and q.appliedname(-1)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2519 popped = False
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2520 if opts['pop'] or opts['reapply']:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2521 for i in xrange(len(q.applied)):
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2522 pushable, reason = q.pushable(i)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2523 if not pushable:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2524 ui.status(_('popping guarded patches\n'))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2525 popped = True
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2526 if i == 0:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2527 q.pop(repo, all=True)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2528 else:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2529 q.pop(repo, i - 1)
2844
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2530 break
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2531 if popped:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2532 try:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2533 if reapply:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2534 ui.status(_('reapplying unguarded patches\n'))
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2535 q.push(repo, reapply)
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2536 finally:
582cbc4392cb qselect: add --pop, --reapply options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2830
diff changeset
2537 q.save_dirty()
2821
2e4ace008c94 mq: new commands qselect, qguard
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2819
diff changeset
2538
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2539 def finish(ui, repo, *revrange, **opts):
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2540 """move applied patches into repository history
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2541
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2542 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
2543 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
2544 history.
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2545
8076
5ec526c1a32f help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents: 8075
diff changeset
2546 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
2547 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
2548 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
2549 stack of applied patches.
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2550
7994
3c22fdc741d8 mq: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
2551 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
2552 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
2553 to upstream.
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2554 """
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2555 if not opts['applied'] and not revrange:
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2556 raise util.Abort(_('no revisions specified'))
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2557 elif opts['applied']:
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2558 revrange = ('qbase:qtip',) + revrange
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2559
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2560 q = repo.mq
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2561 if not q.applied:
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2562 ui.status(_('no patches applied\n'))
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2563 return 0
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2564
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2565 revs = cmdutil.revrange(repo, revrange)
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2566 q.finish(repo, revs)
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2567 q.save_dirty()
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2568 return 0
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2569
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2570 def qqueue(ui, repo, name=None, **opts):
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2571 '''manage multiple patch queues
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2572
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2573 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
2574 new patch queues and deleting existing ones.
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2575
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2576 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
2577 queues - by default the "normal" patches queue is registered. The currently
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2578 active queue will be marked with "(active)".
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2579
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2580 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
2581 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
2582 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
2583 created and switching will fail.
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2584
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2585 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
2586 active queue.
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2587 '''
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2588
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2589 q = repo.mq
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2590
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2591 _defaultqueue = 'patches'
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2592 _allqueues = 'patches.queues'
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2593 _activequeue = 'patches.queue'
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2594
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2595 def _getcurrent():
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2596 cur = os.path.basename(q.path)
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2597 if cur.startswith('patches-'):
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2598 cur = cur[8:]
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2599 return cur
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2600
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2601 def _noqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2602 try:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2603 fh = repo.opener(_allqueues, 'r')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2604 fh.close()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2605 except IOError:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2606 return True
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2607
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2608 return False
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2609
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2610 def _getqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2611 current = _getcurrent()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2612
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2613 try:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2614 fh = repo.opener(_allqueues, 'r')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2615 queues = [queue.strip() for queue in fh if queue.strip()]
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2616 if current not in queues:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2617 queues.append(current)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2618 except IOError:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2619 queues = [_defaultqueue]
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2620
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2621 return sorted(queues)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2622
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2623 def _setactive(name):
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2624 if q.applied:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2625 raise util.Abort(_('patches applied - cannot set new queue active'))
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2626
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2627 fh = repo.opener(_activequeue, 'w')
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2628 if name != 'patches':
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2629 fh.write(name)
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2630 fh.close()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2631
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2632 def _addqueue(name):
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2633 fh = repo.opener(_allqueues, 'a')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2634 fh.write('%s\n' % (name,))
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2635 fh.close()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2636
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2637 def _validname(name):
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2638 for n in name:
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2639 if n in ':\\/.':
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2640 return False
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2641 return True
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2642
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2643 if not name or opts.get('list'):
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2644 current = _getcurrent()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2645 for queue in _getqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2646 ui.write('%s' % (queue,))
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2647 if queue == current:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2648 ui.write(_(' (active)\n'))
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2649 else:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2650 ui.write('\n')
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2651 return
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2652
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2653 if not _validname(name):
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2654 raise util.Abort(
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2655 _('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
2656
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2657 existing = _getqueues()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2658
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2659 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
2660 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
2661 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
2662 if _noqueues():
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2663 _addqueue(_defaultqueue)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2664 _addqueue(name)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2665 _setactive(name)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2666 elif opts.get('delete'):
11271
d1aca0863a9d mq: prevent the creation of a queue whose name is already taken
Cédric Duval <cedricduval@free.fr>
parents: 11270
diff changeset
2667 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
2668 raise util.Abort(_('cannot delete queue that does not exist'))
d1aca0863a9d mq: prevent the creation of a queue whose name is already taken
Cédric Duval <cedricduval@free.fr>
parents: 11270
diff changeset
2669
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2670 current = _getcurrent()
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2671
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2672 if name == current:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2673 raise util.Abort(_('cannot delete currently active queue'))
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2674
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2675 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
2676 for queue in existing:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2677 if queue == name:
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2678 continue
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2679 fh.write('%s\n' % (queue,))
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2680 fh.close()
11270
457813cb3024 mq: fix naming issues for qqueue directories
Henrik Stuart <hg@hstuart.dk>
parents: 11234
diff changeset
2681 util.rename(repo.join('patches.queues.new'), repo.join(_allqueues))
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2682 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
2683 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
2684 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
2685 _setactive(name)
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
2686
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2687 def reposetup(ui, repo):
2818
bdc067ff6cf5 Make mq camelcase consistent with the rest of hg.
Brendan Cully <brendan@kublai.com>
parents: 2816
diff changeset
2688 class mqrepo(repo.__class__):
8524
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
2689 @util.propertycache
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
2690 def mq(self):
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
2691 return queue(self.ui, self.join(""))
21c87b299a04 mq: only read files when needed
Simon Heimberg <simohe@besonet.ch>
parents: 8484
diff changeset
2692
2848
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2845
diff changeset
2693 def abort_if_wdir_patched(self, errmsg, force=False):
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2845
diff changeset
2694 if self.mq.applied and not force:
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
2695 parent = self.dirstate.parents()[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
2696 if parent in [s.node for s in self.mq.applied]:
2848
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2845
diff changeset
2697 raise util.Abort(errmsg)
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
2698
8711
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
2699 def commit(self, text="", user=None, date=None, match=None,
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
2700 force=False, editor=False, extra={}):
2848
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2845
diff changeset
2701 self.abort_if_wdir_patched(
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2845
diff changeset
2702 _('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
2703 force)
2845
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2844
diff changeset
2704
8711
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
2705 return super(mqrepo, self).commit(text, user, date, match, force,
1b95c6f13155 mq: fix commit prototype
Matt Mackall <mpm@selenic.com>
parents: 8706
diff changeset
2706 editor, extra)
2845
addd03c7fbfa Disallow commit over an applied mq patch.
Brendan Cully <brendan@kublai.com>
parents: 2844
diff changeset
2707
11211
e43c23d189a5 push: add --new-branch option to allow intial push of new branches
Sune Foldager <cryo@cyanite.org>
parents: 11199
diff changeset
2708 def push(self, remote, force=False, revs=None, newbranch=False):
4040
55578a8d7e84 mq: allow push if -r is given explicitly
Brendan Cully <brendan@kublai.com>
parents: 4037
diff changeset
2709 if self.mq.applied and not force and not revs:
2848
307439d6fede mq: do not allow to push from repo with patches applied
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2845
diff changeset
2710 raise util.Abort(_('source has mq patches applied'))
11211
e43c23d189a5 push: add --new-branch option to allow intial push of new branches
Sune Foldager <cryo@cyanite.org>
parents: 11199
diff changeset
2711 return super(mqrepo, self).push(remote, force, revs, newbranch)
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3186
diff changeset
2712
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
2713 def _findtags(self):
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
2714 '''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
2715 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
2716
2724
9c41ae1908c7 mq: replace module-wide repo hash with a repo attribute
Brendan Cully <brendan@kublai.com>
parents: 2723
diff changeset
2717 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
2718 if not q.applied:
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
2719 return result
2663
96950d39171d Mq: modify repo.lookup to resolve applied patches too.
Brendan Cully <brendan@kublai.com>
parents: 2554
diff changeset
2720
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
2721 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
2722
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
2723 if mqtags[-1][0] not in self.changelog.nodemap:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2724 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
2725 % short(mqtags[-1][0]))
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
2726 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
2727
2723
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2728 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
2729 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
2730 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
2731 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
2732 for patch in mqtags:
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
2733 if patch[1] in tags:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2734 self.ui.warn(_('Tag %s overrides mq patch of the same name\n')
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2735 % patch[1])
2723
04d9b31faeca mq: do not hold a reference to repo in tags override
Brendan Cully <brendan@kublai.com>
parents: 2720
diff changeset
2736 else:
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
2737 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
2738
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9111
diff changeset
2739 return result
2664
9b8df8dceeed Add qtip and qbase to mq qlookup.
Brendan Cully <brendan@kublai.com>
parents: 2663
diff changeset
2740
6120
f89878df40fe move the reading of branch.cache from _branchtags to branchtags
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6048
diff changeset
2741 def _branchtags(self, partial, lrev):
3492
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2742 q = self.mq
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2743 if not q.applied:
6120
f89878df40fe move the reading of branch.cache from _branchtags to branchtags
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6048
diff changeset
2744 return super(mqrepo, self)._branchtags(partial, lrev)
3492
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2745
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
2746 cl = self.changelog
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
2747 qbasenode = q.applied[0].node
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
2748 if qbasenode not in cl.nodemap:
6960
46da38eef1b0 i18n: mark strings for translation in mq extension
Martin Geisler <mg@daimi.au.dk>
parents: 6940
diff changeset
2749 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
2750 % short(qbasenode))
6120
f89878df40fe move the reading of branch.cache from _branchtags to branchtags
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6048
diff changeset
2751 return super(mqrepo, self)._branchtags(partial, lrev)
3492
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2752
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
2753 qbase = cl.rev(qbasenode)
3492
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2754 start = lrev + 1
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2755 if start < qbase:
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2756 # update the cache (excluding the patches) and save it
10770
fe39f0160c74 localrepo: change _updatebranchcache to use a context generator
Sune Foldager <cryo@cyanite.org>
parents: 10755
diff changeset
2757 ctxgen = (self[r] for r in xrange(lrev + 1, qbase))
fe39f0160c74 localrepo: change _updatebranchcache to use a context generator
Sune Foldager <cryo@cyanite.org>
parents: 10755
diff changeset
2758 self._updatebranchcache(partial, ctxgen)
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2759 self._writebranchcache(partial, cl.node(qbase - 1), qbase - 1)
3492
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2760 start = qbase
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2761 # if start = qbase, the cache is as updated as it should be.
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2762 # if start > qbase, the cache includes (part of) the patches.
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2763 # we might as well use it, but we won't save it.
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2764
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2765 # update the cache up to the tip
10770
fe39f0160c74 localrepo: change _updatebranchcache to use a context generator
Sune Foldager <cryo@cyanite.org>
parents: 10755
diff changeset
2766 ctxgen = (self[r] for r in xrange(start, len(cl)))
fe39f0160c74 localrepo: change _updatebranchcache to use a context generator
Sune Foldager <cryo@cyanite.org>
parents: 10755
diff changeset
2767 self._updatebranchcache(partial, ctxgen)
3492
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2768
3826
b3b868113d24 fix encoding conversion of branch names when mq is loaded
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3763
diff changeset
2769 return partial
3492
fbf8320f25c8 make mq play nicely with the branch cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3473
diff changeset
2770
2851
82f50658c72b mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2850
diff changeset
2771 if repo.local():
82f50658c72b mq: only add mq attribute to local repo
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2850
diff changeset
2772 repo.__class__ = mqrepo
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2773
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
2774 def mqimport(orig, ui, repo, *args, **kwargs):
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2775 if (hasattr(repo, 'abort_if_wdir_patched')
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2776 and not kwargs.get('no_commit', False)):
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
2777 repo.abort_if_wdir_patched(_('cannot import over an applied patch'),
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
2778 kwargs.get('force'))
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
2779 return orig(ui, repo, *args, **kwargs)
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
2780
10402
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
2781 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
2782 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
2783
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
2784 if not mq:
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
2785 return orig(ui, *args, **kwargs)
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
2786
10691
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
2787 if args:
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
2788 repopath = args[0]
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
2789 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
2790 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
2791 'may be initialized'))
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
2792 else:
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
2793 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
2794 if not repopath:
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
2795 raise util.Abort(_('There is no Mercurial repository here '
a778a367c20b mq: fix init with nonexistent or non-local repository
Cédric Duval <cedricduval@free.fr>
parents: 10690
diff changeset
2796 '(.hg not found)'))
10402
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
2797 repo = hg.repository(ui, repopath)
10480
3076b39d7f3e mq: unify implementation of qinit and init -Q
Brendan Cully <brendan@kublai.com>
parents: 10476
diff changeset
2798 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
2799
10359
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2800 def mqcommand(orig, ui, repo, *args, **kwargs):
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2801 """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
2802
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2803 # 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
2804 mq = kwargs.pop('mq', None)
10359
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2805
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2806 if not mq:
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2807 return orig(ui, repo, *args, **kwargs)
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2808
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2809 q = repo.mq
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2810 r = q.qrepo()
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2811 if not r:
11120
0bedcbcb3ae2 mq: mark error message for translation
Martin Geisler <mg@lazybytes.net>
parents: 11119
diff changeset
2812 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
2813 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
2814
11107
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
2815 def summary(orig, ui, repo, *args, **kwargs):
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
2816 r = orig(ui, repo, *args, **kwargs)
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
2817 q = repo.mq
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
2818 m = []
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
2819 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
2820 if a:
11121
d061ef1d781c mq: make use of output labeling for summary
Eric Eisner <ede@mit.edu>
parents: 11120
diff changeset
2821 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
2822 if u:
11121
d061ef1d781c mq: make use of output labeling for summary
Eric Eisner <ede@mit.edu>
parents: 11120
diff changeset
2823 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
2824 if m:
11310
ac873ecfc3c2 Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents: 11302
diff changeset
2825 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
2826 else:
11119
2e270443a2c6 mq: mark string for translation
Martin Geisler <mg@lazybytes.net>
parents: 11107
diff changeset
2827 ui.note(_("mq: (empty queue)\n"))
11107
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
2828 return r
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
2829
7142
88f1b8081f1c Prevent import over an applied patch (closes issue795)
Brendan Cully <brendan@kublai.com>
parents: 7113
diff changeset
2830 def uisetup(ui):
10591
ff2704a8ded3 mq: drop -Q in favor of --mq only
Matt Mackall <mpm@selenic.com>
parents: 10589
diff changeset
2831 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
2832
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
2833 extensions.wrapcommand(commands.table, 'import', mqimport)
11107
9c72c5c094aa mq: add a line to hg summary
Matt Mackall <mpm@selenic.com>
parents: 11078
diff changeset
2834 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
2835
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
2836 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
2837 entry[1].extend(mqopt)
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
2838
10796
ce2ae8bf3ae3 Add missing --mq option to hg log.
Michael Glassford <glassfordmjg@gmail.com>
parents: 10770
diff changeset
2839 norepo = commands.norepo.split(" ")
10498
dc9a803c1800 mq: iterate over a copy of the command table keys (fixes issue2045).
Brendan Cully <brendan@kublai.com>
parents: 10480
diff changeset
2840 for cmd in commands.table.keys():
10401
6252852b4332 mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents: 10397
diff changeset
2841 cmd = cmdutil.parsealiases(cmd)[0]
10796
ce2ae8bf3ae3 Add missing --mq option to hg log.
Michael Glassford <glassfordmjg@gmail.com>
parents: 10770
diff changeset
2842 if cmd in norepo:
10401
6252852b4332 mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents: 10397
diff changeset
2843 continue
10359
ec02cf8d1628 mq: add --mq option to some commands
Brendan Cully <brendan@kublai.com>
parents: 10282
diff changeset
2844 entry = extensions.wrapcommand(commands.table, cmd, mqcommand)
10402
d216fa04e48a mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents: 10401
diff changeset
2845 entry[1].extend(mqopt)
7142
88f1b8081f1c Prevent import over an applied patch (closes issue795)
Brendan Cully <brendan@kublai.com>
parents: 7113
diff changeset
2846
3183
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2847 seriesopts = [('s', 'summary', None, _('print first line of patch header'))]
0e6b58c7beea mq: add --summary to qapplied, qunapplied, qtop, qnext and qprev
Brendan Cully <brendan@kublai.com>
parents: 3141
diff changeset
2848
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
2849 cmdtable = {
9364
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2850 "qapplied":
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2851 (applied,
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2852 [('1', 'last', None, _('show only the last patch'))] + seriesopts,
9438
b2f3b9c82ac0 Add new flag [-1] to synopsis of qapplied/qunapplied
Thomas Arendsen Hein <thomas@intevation.de>
parents: 9375
diff changeset
2853 _('hg qapplied [-1] [-s] [PATCH]')),
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2854 "qclone":
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2855 (clone,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2856 [('', 'pull', None, _('use pull protocol to copy metadata')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2857 ('U', 'noupdate', None, _('do not update the new working directories')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2858 ('', 'uncompressed', None,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2859 _('use uncompressed transfer (fast over LAN)')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2860 ('p', 'patches', '',
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2861 _('location of source patch repository'), _('REPO')),
5147
c80af96943aa refactor options from cmdtable
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 5053
diff changeset
2862 ] + commands.remoteopts,
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2863 _('hg qclone [OPTION]... SOURCE [DEST]')),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2864 "qcommit|qci":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2865 (commit,
2185
5acd648770d0 Better help for mq: Corrected synopses, get qcommit options from commands.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2097
diff changeset
2866 commands.table["^commit|ci"][1],
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2867 _('hg qcommit [OPTION]... [FILE]...')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2868 "^qdiff":
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2869 (diff,
6668
034f444902d9 mq: qdiff: support all diffopts
Jason Orendorff <jorendorff@mozilla.com>
parents: 6650
diff changeset
2870 commands.diffopts + commands.diffopts2 + commands.walkopts,
034f444902d9 mq: qdiff: support all diffopts
Jason Orendorff <jorendorff@mozilla.com>
parents: 6650
diff changeset
2871 _('hg qdiff [OPTION]... [FILE]...')),
2904
57b88b86a845 Replace qdel/qfold -f option with -k/--keep.
Brendan Cully <brendan@kublai.com>
parents: 2883
diff changeset
2872 "qdelete|qremove|qrm":
2752
5dfeda163bb7 Add -f option to qdelete, to remove patch file.
Brendan Cully <brendan@kublai.com>
parents: 2751
diff changeset
2873 (delete,
3373
9851f46d6ecc mq: change qdel --forget to --rev; accept any revision symbol
Brendan Cully <brendan@kublai.com>
parents: 3243
diff changeset
2874 [('k', 'keep', None, _('keep patch file')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2875 ('r', 'rev', [],
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2876 _('stop managing a revision (DEPRECATED)'), _('REV'))],
4737
2ececafa5859 mq: more qdelete help text tweaks
Brendan Cully <brendan@kublai.com>
parents: 4736
diff changeset
2877 _('hg qdelete [-k] [-r REV]... [PATCH]...')),
2753
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2878 'qfold':
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2879 (fold,
84218111e80f Add -m, -l, -e options to qfold.
Brendan Cully <brendan@kublai.com>
parents: 2748
diff changeset
2880 [('e', 'edit', None, _('edit patch header')),
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2881 ('k', 'keep', None, _('keep folded patch files')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2882 ] + commands.commitopts,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2883 _('hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH...')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2884 'qgoto':
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2885 (goto,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2886 [('f', 'force', None, _('overwrite any local changes'))],
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2887 _('hg qgoto [OPTION]... PATCH')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2888 'qguard':
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2889 (guard,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2890 [('l', 'list', None, _('list all patches and guards')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2891 ('n', 'none', None, _('drop all guards'))],
10476
3113736dbac5 mq: more instructive use of "--" in qguard help (issue2040)
Martin Geisler <mg@lazybytes.net>
parents: 10413
diff changeset
2892 _('hg qguard [-l] [-n] [PATCH] [-- [+GUARD]... [-GUARD]...]')),
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2893 'qheader': (header, [], _('hg qheader [PATCH]')),
10890
301633755dec mq: promote qnew, demote qinit in short help
Matt Mackall <mpm@selenic.com>
parents: 10881
diff changeset
2894 "qimport":
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2895 (qimport,
8026
683d8ebcf434 expand "dir" to "directory" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 7994
diff changeset
2896 [('e', 'existing', None, _('import file in patch directory')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2897 ('n', 'name', '',
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2898 _('name of patch file'), _('NAME')),
7002
07c8396fa001 i18n, mq: mark command line options for translation
Martin Geisler <mg@daimi.au.dk>
parents: 6960
diff changeset
2899 ('f', 'force', None, _('overwrite existing files')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2900 ('r', 'rev', [],
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2901 _('place existing revisions under mq control'), _('REV')),
8362
bbc74c05b8a4 mq: add -P/--push option to qimport
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8288
diff changeset
2902 ('g', 'git', None, _('use git extended diff format')),
bbc74c05b8a4 mq: add -P/--push option to qimport
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8288
diff changeset
2903 ('P', 'push', None, _('qpush after importing'))],
bbc74c05b8a4 mq: add -P/--push option to qimport
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8288
diff changeset
2904 _('hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE...')),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2905 "^qinit":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2906 (init,
7002
07c8396fa001 i18n, mq: mark command line options for translation
Martin Geisler <mg@daimi.au.dk>
parents: 6960
diff changeset
2907 [('c', 'create-repo', None, _('create queue repository'))],
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2908 _('hg qinit [-c]')),
10890
301633755dec mq: promote qnew, demote qinit in short help
Matt Mackall <mpm@selenic.com>
parents: 10881
diff changeset
2909 "^qnew":
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2910 (new,
2939
abd0be815c9c Add qnew -e option.
Brendan Cully <brendan@kublai.com>
parents: 2938
diff changeset
2911 [('e', 'edit', None, _('edit commit message')),
10382
e54e3f6e6789 mq: fix deprecation mention, line length
Augie Fackler <durin42@gmail.com>
parents: 10372
diff changeset
2912 ('f', 'force', None, _('import uncommitted changes (DEPRECATED)')),
5025
7041869a1bf6 mq: add qnew --git option
Patrick Mezard <pmezard@gmail.com>
parents: 4970
diff changeset
2913 ('g', 'git', None, _('use git extended diff format')),
6915
ef14c773b3d6 mq: fix docs for qrefresh -D (issue1234)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 6801
diff changeset
2914 ('U', 'currentuser', None, _('add "From: <current user>" to patch')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2915 ('u', 'user', '',
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2916 _('add "From: <USER>" to patch'), _('USER')),
6915
ef14c773b3d6 mq: fix docs for qrefresh -D (issue1234)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 6801
diff changeset
2917 ('D', 'currentdate', None, _('add "Date: <current date>" to patch')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2918 ('d', 'date', '',
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2919 _('add "Date: <DATE>" to patch'), _('DATE'))
6915
ef14c773b3d6 mq: fix docs for qrefresh -D (issue1234)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 6801
diff changeset
2920 ] + commands.walkopts + commands.commitopts,
10947
ede19417c3c4 mq: Remove -f from qnew command syntax.
Isaac Jurado <diptongo@gmail.com>
parents: 10946
diff changeset
2921 _('hg qnew [-e] [-m TEXT] [-l FILE] PATCH [FILE]...')),
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2922 "qnext": (next, [] + seriesopts, _('hg qnext [-s]')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2923 "qprev": (prev, [] + seriesopts, _('hg qprev [-s]')),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2924 "^qpop":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2925 (pop,
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2926 [('a', 'all', None, _('pop all patches')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2927 ('n', 'name', '',
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2928 _('queue name to pop (DEPRECATED)'), _('NAME')),
9588
a9d1e7c8160e mq: changed help for qpop -f to reflect actual behaviour
Stephen Rasku <mercurial@srasku.net>
parents: 9287
diff changeset
2929 ('f', 'force', None, _('forget any local changes to patched files'))],
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2930 _('hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]')),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2931 "^qpush":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2932 (push,
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2933 [('f', 'force', None, _('apply if the patch has rejects')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2934 ('l', 'list', None, _('list patch name in commit text')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2935 ('a', 'all', None, _('apply all patches')),
10360
bcf90e712dc3 mq: deprecate qsave, qrestore and related options
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents: 10359
diff changeset
2936 ('m', 'merge', None, _('merge from another queue (DEPRECATED)')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2937 ('n', 'name', '',
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2938 _('merge queue name (DEPRECATED)'), _('NAME')),
11064
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
2939 ('', 'move', None, _('reorder patch series and apply only the patch'))],
590b1d6ef50b mq: qpush --move, reorder patch series and apply only the patch
Mads Kiilerich <mads@kiilerich.com>
parents: 11050
diff changeset
2940 _('hg qpush [-f] [-l] [-a] [-m] [-n NAME] [--move] [PATCH | INDEX]')),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2941 "^qrefresh":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2942 (refresh,
2746
0503eb5c0a33 Add option -e/--edit to qrefresh, to edit the existing header.
Brendan Cully <brendan@kublai.com>
parents: 2745
diff changeset
2943 [('e', 'edit', None, _('edit commit message')),
3086
17747e80ea6c mq: Add --git option to qrefresh
Brendan Cully <brendan@kublai.com>
parents: 3085
diff changeset
2944 ('g', 'git', None, _('use git extended diff format')),
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2945 ('s', 'short', None,
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2946 _('refresh only files already in the patch and specified files')),
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2947 ('U', 'currentuser', None,
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2948 _('add/update author field in patch with current user')),
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2949 ('u', 'user', '',
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2950 _('add/update author field in patch with given user'), _('USER')),
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2951 ('D', 'currentdate', None,
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2952 _('add/update date field in patch with current date')),
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10276
diff changeset
2953 ('d', 'date', '',
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2954 _('add/update date field in patch with given date'), _('DATE'))
6915
ef14c773b3d6 mq: fix docs for qrefresh -D (issue1234)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 6801
diff changeset
2955 ] + commands.walkopts + commands.commitopts,
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2956 _('hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...')),
2751
7d1de4545728 mq: add qmv as alias for qrename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2750
diff changeset
2957 'qrename|qmv':
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2958 (rename, [], _('hg qrename PATCH1 [PATCH2]')),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2959 "qrestore":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2960 (restore,
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2961 [('d', 'delete', None, _('delete save entry')),
8026
683d8ebcf434 expand "dir" to "directory" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 7994
diff changeset
2962 ('u', 'update', None, _('update queue working directory'))],
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2963 _('hg qrestore [-d] [-u] REV')),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2964 "qsave":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2965 (save,
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2966 [('c', 'copy', None, _('copy patch directory')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2967 ('n', 'name', '',
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11311
diff changeset
2968 _('copy directory name'), _('NAME')),
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2969 ('e', 'empty', None, _('clear queue status file')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2970 ('f', 'force', None, _('force copy'))] + commands.commitopts,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2971 _('hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2972 "qselect":
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2973 (select,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2974 [('n', 'none', None, _('disable all guards')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2975 ('s', 'series', None, _('list all guards in series file')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2976 ('', 'pop', None, _('pop to before first guarded applied patch')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2977 ('', 'reapply', None, _('pop, then reapply patches'))],
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2978 _('hg qselect [OPTION]... [GUARD]...')),
1810
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2979 "qseries":
7596611ab3d5 Whitespace, tab and formatting cleanups, mainly in mq.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1808
diff changeset
2980 (series,
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2981 [('m', 'missing', None, _('print patches not in series')),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4722
diff changeset
2982 ] + seriesopts,
11073
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2983 _('hg qseries [-ms]')),
11078
37d1b20168d1 Merge with stable
Matt Mackall <mpm@selenic.com>
parents: 11064 11073
diff changeset
2984 "strip":
11073
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2985 (strip,
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2986 [('f', 'force', None, _('force removal of changesets even if the '
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2987 'working directory has uncommitted changes')),
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2988 ('b', 'backup', None, _('bundle only changesets with local revision'
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2989 ' number greater than REV which are not'
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2990 ' descendants of REV (DEPRECATED)')),
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2991 ('n', 'nobackup', None, _('no backups'))],
11199
4b1f4e473c17 strip: drop deprecated -b from synopsis
Matt Mackall <mpm@selenic.com>
parents: 11193
diff changeset
2992 _('hg strip [-f] [-n] REV')),
11073
ee5b112aa529 mq: rewrite strip docstrings
Faheem Mitha <faheem@email.unc.edu>
parents: 10947
diff changeset
2993 "qtop": (top, [] + seriesopts, _('hg qtop [-s]')),
9364
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2994 "qunapplied":
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2995 (unapplied,
c7c2dd7524dd mq: add options to qapplied/qunapplied to act like qprev/qnext
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9338
diff changeset
2996 [('1', 'first', None, _('show only the first patch'))] + seriesopts,
9438
b2f3b9c82ac0 Add new flag [-1] to synopsis of qapplied/qunapplied
Thomas Arendsen Hein <thomas@intevation.de>
parents: 9375
diff changeset
2997 _('hg qunapplied [-1] [-s] [PATCH]')),
6645
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2998 "qfinish":
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
2999 (finish,
37eedb1a1848 mq: introduce the qfinish command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6644
diff changeset
3000 [('a', 'applied', None, _('finish all applied changesets'))],
8948
aa0fe57d4abe mq: standardize qfinish cmdline help string
Martin Geisler <mg@lazybytes.net>
parents: 8932
diff changeset
3001 _('hg qfinish [-a] [REV]...')),
11229
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3002 'qqueue':
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3003 (qqueue,
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3004 [
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3005 ('l', 'list', False, _('list all available queues')),
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3006 ('c', 'create', False, _('create new queue')),
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3007 ('', 'delete', False, _('delete reference to queue')),
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3008 ],
1e701ffd9df4 mq: support multiple patch queues using qqueue
Henrik Stuart <hg@hstuart.dk>
parents: 11216
diff changeset
3009 _('[OPTION] [QUEUE]')),
1808
7036cd7f770d Add mq extension
mason@suse.com
parents:
diff changeset
3010 }
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3011
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3012 colortable = {'qguard.negative': 'red',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3013 'qguard.positive': 'yellow',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3014 'qguard.unguarded': 'green',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3015 '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
3016 'qseries.guarded': 'black bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3017 'qseries.missing': 'red bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10824
diff changeset
3018 'qseries.unapplied': 'black bold'}