Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/cmdutil.py @ 16165:60101427d618 stable
log: fix --follow FILE ancestry calculation
Currently, --follow FILE looks for a FILE filelog, scans it and collects
linkrevs and renames, then filters them. The problem is the filelog scan does
not start at FILE filenode in parent revision but at the last filelog revision.
So:
- Files not in the parent revision can be followed, the starting node is
unexpected
- Files in the parent revision can be followed from an incorrect starting
node.
This patch makes log --follow FILE fail if FILE is not in parent revision, and
computes ancestors of the parent revision FILE filenode.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Fri, 24 Feb 2012 20:57:59 +0100 |
parents | f7e0d95d0a0b |
children | 6c4dbe28dda3 |
rev | line source |
---|---|
2957 | 1 # cmdutil.py - help for command processing in mercurial |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
2 # |
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4633
diff
changeset
|
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8210
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
7 |
6211
f89fd07fc51d
Expand import * to allow Pyflakes to find problems
Joel Rosdahl <joel@rosdahl.net>
parents:
6190
diff
changeset
|
8 from node import hex, nullid, nullrev, short |
3891 | 9 from i18n import _ |
14269
66257848c154
cmdutil: fix errors reported by pyflakes test
Sune Foldager <cryo@cyanite.org>
parents:
14259
diff
changeset
|
10 import os, sys, errno, re, tempfile |
15214
231aac5280ba
rebase: move updatedirstate into cmdutil so it can be shared
Matt Mackall <mpm@selenic.com>
parents:
14986
diff
changeset
|
11 import util, scmutil, templater, patch, error, templatekw, revlog, copies |
12085
6f833fc3ccab
Consistently import foo as foomod when foo to avoid shadowing
Martin Geisler <mg@aragost.com>
parents:
12032
diff
changeset
|
12 import match as matchmod |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14297
diff
changeset
|
13 import subrepo |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
14 |
10401
6252852b4332
mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents:
10344
diff
changeset
|
15 def parsealiases(cmd): |
6252852b4332
mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents:
10344
diff
changeset
|
16 return cmd.lstrip("^").split("|") |
6252852b4332
mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents:
10344
diff
changeset
|
17 |
7213
b4c035057d34
findcmd: have dispatch look up strict flag
Matt Mackall <mpm@selenic.com>
parents:
7121
diff
changeset
|
18 def findpossible(cmd, table, strict=False): |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
19 """ |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
20 Return cmd -> (aliases, command table entry) |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
21 for each matching command. |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
22 Return debug commands (or their aliases) only if no normal command matches. |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
23 """ |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
24 choice = {} |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
25 debugchoice = {} |
15600
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
26 |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
27 if cmd in table: |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
28 # short-circuit exact matches, "log" alias beats "^log|history" |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
29 keys = [cmd] |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
30 else: |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
31 keys = table.keys() |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
32 |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
33 for e in keys: |
10401
6252852b4332
mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents:
10344
diff
changeset
|
34 aliases = parsealiases(e) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
35 found = None |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
36 if cmd in aliases: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
37 found = cmd |
7213
b4c035057d34
findcmd: have dispatch look up strict flag
Matt Mackall <mpm@selenic.com>
parents:
7121
diff
changeset
|
38 elif not strict: |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
39 for a in aliases: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
40 if a.startswith(cmd): |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
41 found = a |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
42 break |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
43 if found is not None: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
44 if aliases[0].startswith("debug") or found.startswith("debug"): |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
5177
diff
changeset
|
45 debugchoice[found] = (aliases, table[e]) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
46 else: |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
5177
diff
changeset
|
47 choice[found] = (aliases, table[e]) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
48 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
49 if not choice and debugchoice: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
50 choice = debugchoice |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
51 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
52 return choice |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
53 |
7213
b4c035057d34
findcmd: have dispatch look up strict flag
Matt Mackall <mpm@selenic.com>
parents:
7121
diff
changeset
|
54 def findcmd(cmd, table, strict=True): |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
55 """Return (aliases, command table entry) for command string.""" |
7213
b4c035057d34
findcmd: have dispatch look up strict flag
Matt Mackall <mpm@selenic.com>
parents:
7121
diff
changeset
|
56 choice = findpossible(cmd, table, strict) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
57 |
5915
d0576d065993
Prefer i in d over d.has_key(i)
Christian Ebert <blacktrash@gmx.net>
parents:
5843
diff
changeset
|
58 if cmd in choice: |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
59 return choice[cmd] |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
60 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
61 if len(choice) > 1: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
62 clist = choice.keys() |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
63 clist.sort() |
7643
9a1ea6587557
error: move UnknownCommand and AmbiguousCommand
Matt Mackall <mpm@selenic.com>
parents:
7404
diff
changeset
|
64 raise error.AmbiguousCommand(cmd, clist) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
65 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
66 if choice: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
67 return choice.values()[0] |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
68 |
7643
9a1ea6587557
error: move UnknownCommand and AmbiguousCommand
Matt Mackall <mpm@selenic.com>
parents:
7404
diff
changeset
|
69 raise error.UnknownCommand(cmd) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
70 |
10402
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
71 def findrepo(p): |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
72 while not os.path.isdir(os.path.join(p, ".hg")): |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
73 oldp, p = p, os.path.dirname(p) |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
74 if p == oldp: |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
75 return None |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
76 |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
77 return p |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
78 |
14289
d68ddccf276b
cmdutil: bail_if_changed to bailifchanged
Matt Mackall <mpm@selenic.com>
parents:
14269
diff
changeset
|
79 def bailifchanged(repo): |
13878
a8d13ee0ce68
misc: replace .parents()[0] with p1()
Matt Mackall <mpm@selenic.com>
parents:
13769
diff
changeset
|
80 if repo.dirstate.p2() != nullid: |
5716
be367cbafe70
cmdutil: make bail_if_changed bail on uncommitted merge
Matt Mackall <mpm@selenic.com>
parents:
5610
diff
changeset
|
81 raise util.Abort(_('outstanding uncommitted merge')) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
82 modified, added, removed, deleted = repo.status()[:4] |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
83 if modified or added or removed or deleted: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
84 raise util.Abort(_("outstanding uncommitted changes")) |
15231
cd6f10dccf16
cmdutil.bailifchanged: abort for dirty subrepos
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15214
diff
changeset
|
85 ctx = repo[None] |
cd6f10dccf16
cmdutil.bailifchanged: abort for dirty subrepos
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15214
diff
changeset
|
86 for s in ctx.substate: |
cd6f10dccf16
cmdutil.bailifchanged: abort for dirty subrepos
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15214
diff
changeset
|
87 if ctx.sub(s).dirty(): |
cd6f10dccf16
cmdutil.bailifchanged: abort for dirty subrepos
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15214
diff
changeset
|
88 raise util.Abort(_("uncommitted changes in subrepo %s") % s) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
89 |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14518
diff
changeset
|
90 def logmessage(ui, opts): |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
91 """ get the log message according to -m and -l option """ |
7667
bd5c37d792e6
cmdutil.logmessage: options should be optional
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7643
diff
changeset
|
92 message = opts.get('message') |
bd5c37d792e6
cmdutil.logmessage: options should be optional
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7643
diff
changeset
|
93 logfile = opts.get('logfile') |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
94 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
95 if message and logfile: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
96 raise util.Abort(_('options --message and --logfile are mutually ' |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
97 'exclusive')) |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
98 if not message and logfile: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
99 try: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
100 if logfile == '-': |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14518
diff
changeset
|
101 message = ui.fin.read() |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
102 else: |
14249
f4766e1bb0b3
cmdutil: normalize log message eols when reading from file
Patrick Mezard <pmezard@gmail.com>
parents:
14232
diff
changeset
|
103 message = '\n'.join(util.readfile(logfile).splitlines()) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
104 except IOError, inst: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
105 raise util.Abort(_("can't read commit message '%s': %s") % |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
106 (logfile, inst.strerror)) |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
107 return message |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
108 |
6190
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
109 def loglimit(opts): |
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
110 """get the log limit according to option -l/--limit""" |
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
111 limit = opts.get('limit') |
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
112 if limit: |
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
113 try: |
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
114 limit = int(limit) |
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
115 except ValueError: |
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
116 raise util.Abort(_('limit must be a positive integer')) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
117 if limit <= 0: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
118 raise util.Abort(_('limit must be positive')) |
6190
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
119 else: |
10111
27457d31ae3f
cmdutil: replace sys.maxint with None as default value in loglimit
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10061
diff
changeset
|
120 limit = None |
6190
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
121 return limit |
a79d9408806f
Move finding/checking the log limit to cmdutil
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6145
diff
changeset
|
122 |
14986
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
123 def makefilename(repo, pat, node, desc=None, |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
124 total=None, seqno=None, revwidth=None, pathname=None): |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
125 node_expander = { |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
126 'H': lambda: hex(node), |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
127 'R': lambda: str(repo.changelog.rev(node)), |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
128 'h': lambda: short(node), |
14986
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
129 'm': lambda: re.sub('[^\w]', '_', str(desc)) |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
130 } |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
131 expander = { |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
132 '%': lambda: '%', |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
133 'b': lambda: os.path.basename(repo.root), |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
134 } |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
135 |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
136 try: |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
137 if node: |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
138 expander.update(node_expander) |
4836
0e2d0a78f81a
archive: make the %r escape work.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4825
diff
changeset
|
139 if node: |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
140 expander['r'] = (lambda: |
4836
0e2d0a78f81a
archive: make the %r escape work.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4825
diff
changeset
|
141 str(repo.changelog.rev(node)).zfill(revwidth or 0)) |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
142 if total is not None: |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
143 expander['N'] = lambda: str(total) |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
144 if seqno is not None: |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
145 expander['n'] = lambda: str(seqno) |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
146 if total is not None and seqno is not None: |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3657
diff
changeset
|
147 expander['n'] = lambda: str(seqno).zfill(len(str(total))) |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
148 if pathname is not None: |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
149 expander['s'] = lambda: os.path.basename(pathname) |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
150 expander['d'] = lambda: os.path.dirname(pathname) or '.' |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
151 expander['p'] = lambda: pathname |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
152 |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
153 newname = [] |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
154 patlen = len(pat) |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
155 i = 0 |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
156 while i < patlen: |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
157 c = pat[i] |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
158 if c == '%': |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
159 i += 1 |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
160 c = pat[i] |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
161 c = expander[c]() |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
162 newname.append(c) |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
163 i += 1 |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
164 return ''.join(newname) |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
165 except KeyError, inst: |
8761
0289f384e1e5
Generally replace "file name" with "filename" in help and comments.
timeless <timeless@gmail.com>
parents:
8731
diff
changeset
|
166 raise util.Abort(_("invalid format spec '%%%s' in output filename") % |
3072
bc3fe3b5b785
Never apply string formatting to generated errors with util.Abort.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2958
diff
changeset
|
167 inst.args[0]) |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
168 |
14986
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
169 def makefileobj(repo, pat, node=None, desc=None, total=None, |
14291
1a791993ce59
cmdutil: make_file to makefileobj
Matt Mackall <mpm@selenic.com>
parents:
14290
diff
changeset
|
170 seqno=None, revwidth=None, mode='wb', pathname=None): |
7319
eae1767cc6a8
export: fixed silent output file overwriting
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7308
diff
changeset
|
171 |
13769
8796fb6af67e
cmdutil: fix mode handling in make_file
Adrian Buehlmann <adrian@cadifra.com>
parents:
13534
diff
changeset
|
172 writable = mode not in ('r', 'rb') |
7319
eae1767cc6a8
export: fixed silent output file overwriting
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7308
diff
changeset
|
173 |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
174 if not pat or pat == '-': |
14637
5e9d691229d5
cmdutil: use ui descriptors in makefileobj
Idan Kamara <idankk86@gmail.com>
parents:
14635
diff
changeset
|
175 fp = writable and repo.ui.fout or repo.ui.fin |
14948
32302480b402
cmdutil: use safehasattr instead of hasattr
Augie Fackler <durin42@gmail.com>
parents:
14671
diff
changeset
|
176 if util.safehasattr(fp, 'fileno'): |
14638
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
177 return os.fdopen(os.dup(fp.fileno()), mode) |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
178 else: |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
179 # if this fp can't be duped properly, return |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
180 # a dummy object that can be closed |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
181 class wrappedfileobj(object): |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
182 noop = lambda x: None |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
183 def __init__(self, f): |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
184 self.f = f |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
185 def __getattr__(self, attr): |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
186 if attr == 'close': |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
187 return self.noop |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
188 else: |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
189 return getattr(self.f, attr) |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
190 |
1bdbca0b6604
cmdutil: return a dummy, closable file object if it cannot be duped
Idan Kamara <idankk86@gmail.com>
parents:
14637
diff
changeset
|
191 return wrappedfileobj(fp) |
14948
32302480b402
cmdutil: use safehasattr instead of hasattr
Augie Fackler <durin42@gmail.com>
parents:
14671
diff
changeset
|
192 if util.safehasattr(pat, 'write') and writable: |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
193 return pat |
14948
32302480b402
cmdutil: use safehasattr instead of hasattr
Augie Fackler <durin42@gmail.com>
parents:
14671
diff
changeset
|
194 if util.safehasattr(pat, 'read') and 'r' in mode: |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
195 return pat |
14986
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
196 return open(makefilename(repo, pat, node, desc, total, seqno, revwidth, |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
197 pathname), |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
198 mode) |
2882
cf98cd70d2c4
move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2874
diff
changeset
|
199 |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
200 def openrevlog(repo, cmd, file_, opts): |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
201 """opens the changelog, manifest, a filelog or a given revlog""" |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
202 cl = opts['changelog'] |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
203 mf = opts['manifest'] |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
204 msg = None |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
205 if cl and mf: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
206 msg = _('cannot specify --changelog and --manifest at the same time') |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
207 elif cl or mf: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
208 if file_: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
209 msg = _('cannot specify filename with --changelog or --manifest') |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
210 elif not repo: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
211 msg = _('cannot specify --changelog or --manifest ' |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
212 'without a repository') |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
213 if msg: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
214 raise util.Abort(msg) |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
215 |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
216 r = None |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
217 if repo: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
218 if cl: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
219 r = repo.changelog |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
220 elif mf: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
221 r = repo.manifest |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
222 elif file_: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
223 filelog = repo.file(file_) |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
224 if len(filelog): |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
225 r = filelog |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
226 if not r: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
227 if not file_: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
228 raise error.CommandError(cmd, _('invalid arguments')) |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
229 if not os.path.isfile(file_): |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
230 raise util.Abort(_("revlog '%s' not found") % file_) |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
231 r = revlog.revlog(scmutil.opener(os.getcwd(), audit=False), |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
232 file_[:-2] + ".i") |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
233 return r |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
234 |
5610
2493a478f395
copy: handle rename internally
Matt Mackall <mpm@selenic.com>
parents:
5609
diff
changeset
|
235 def copy(ui, repo, pats, opts, rename=False): |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
236 # called with the repo lock held |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
237 # |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
238 # hgsep => pathname that uses "/" to separate directories |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
239 # ossep => pathname that uses os.sep to separate directories |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
240 cwd = repo.getcwd() |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
241 targets = {} |
5607 | 242 after = opts.get("after") |
243 dryrun = opts.get("dry_run") | |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11290
diff
changeset
|
244 wctx = repo[None] |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
245 |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
246 def walkpat(pat): |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
247 srcs = [] |
11223
0d09f2244805
rename: make --after work if source is already in R state
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11177
diff
changeset
|
248 badstates = after and '?' or '?r' |
14671
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14638
diff
changeset
|
249 m = scmutil.match(repo[None], [pat], opts, globbed=True) |
6586
d3463007d368
walk: return a single value
Matt Mackall <mpm@selenic.com>
parents:
6585
diff
changeset
|
250 for abs in repo.walk(m): |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
251 state = repo.dirstate[abs] |
6584
29c77e5dfb3c
walk: remove rel and exact returns
Matt Mackall <mpm@selenic.com>
parents:
6582
diff
changeset
|
252 rel = m.rel(abs) |
29c77e5dfb3c
walk: remove rel and exact returns
Matt Mackall <mpm@selenic.com>
parents:
6582
diff
changeset
|
253 exact = m.exact(abs) |
11223
0d09f2244805
rename: make --after work if source is already in R state
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11177
diff
changeset
|
254 if state in badstates: |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
255 if exact and state == '?': |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
256 ui.warn(_('%s: not copying - file is not managed\n') % rel) |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
257 if exact and state == 'r': |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
258 ui.warn(_('%s: not copying - file has been marked for' |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
259 ' remove\n') % rel) |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
260 continue |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
261 # abs: hgsep |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
262 # rel: ossep |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
263 srcs.append((abs, rel, exact)) |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
264 return srcs |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
265 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
266 # abssrc: hgsep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
267 # relsrc: ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
268 # otarget: ossep |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
269 def copyfile(abssrc, relsrc, otarget, exact): |
13971
bfeaa88b875d
move canonpath from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13962
diff
changeset
|
270 abstarget = scmutil.canonpath(repo.root, cwd, otarget) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
271 reltarget = repo.pathto(abstarget, cwd) |
5607 | 272 target = repo.wjoin(abstarget) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
273 src = repo.wjoin(abssrc) |
5608 | 274 state = repo.dirstate[abstarget] |
5607 | 275 |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13945
diff
changeset
|
276 scmutil.checkportable(ui, abstarget) |
13945
03f3ce7ca2a8
copy: do not copy file if name is disallowed anyway
Adrian Buehlmann <adrian@cadifra.com>
parents:
13878
diff
changeset
|
277 |
5607 | 278 # check for collisions |
279 prevsrc = targets.get(abstarget) | |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
280 if prevsrc is not None: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
281 ui.warn(_('%s: not overwriting - %s collides with %s\n') % |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
282 (reltarget, repo.pathto(abssrc, cwd), |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
283 repo.pathto(prevsrc, cwd))) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
284 return |
5607 | 285 |
286 # check for overwrites | |
12342
70236d6fd844
rename: do not overwrite existing broken symlinks
Patrick Mezard <pmezard@gmail.com>
parents:
11950
diff
changeset
|
287 exists = os.path.lexists(target) |
8117
2b30d8488819
remove unnecessary outer parenthesis in if-statements
Martin Geisler <mg@lazybytes.net>
parents:
8013
diff
changeset
|
288 if not after and exists or after and state in 'mn': |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
289 if not opts['force']: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
290 ui.warn(_('%s: not overwriting - file exists\n') % |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
291 reltarget) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
292 return |
5607 | 293 |
294 if after: | |
5608 | 295 if not exists: |
11152
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
296 if rename: |
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
297 ui.warn(_('%s: not recording move - %s does not exist\n') % |
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
298 (relsrc, reltarget)) |
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
299 else: |
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
300 ui.warn(_('%s: not recording copy - %s does not exist\n') % |
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
301 (relsrc, reltarget)) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
302 return |
5608 | 303 elif not dryrun: |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
304 try: |
5608 | 305 if exists: |
306 os.unlink(target) | |
307 targetdir = os.path.dirname(target) or '.' | |
308 if not os.path.isdir(targetdir): | |
309 os.makedirs(targetdir) | |
310 util.copyfile(src, target) | |
14518
a67e866f46f9
workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents:
14442
diff
changeset
|
311 srcexists = True |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
312 except IOError, inst: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
313 if inst.errno == errno.ENOENT: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
314 ui.warn(_('%s: deleted in working copy\n') % relsrc) |
14518
a67e866f46f9
workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents:
14442
diff
changeset
|
315 srcexists = False |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
316 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
317 ui.warn(_('%s: cannot copy - %s\n') % |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
318 (relsrc, inst.strerror)) |
5606
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
319 return True # report a failure |
5607 | 320 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
321 if ui.verbose or not exact: |
7894
caef5fdf1375
cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents:
7879
diff
changeset
|
322 if rename: |
caef5fdf1375
cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents:
7879
diff
changeset
|
323 ui.status(_('moving %s to %s\n') % (relsrc, reltarget)) |
caef5fdf1375
cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents:
7879
diff
changeset
|
324 else: |
caef5fdf1375
cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents:
7879
diff
changeset
|
325 ui.status(_('copying %s to %s\n') % (relsrc, reltarget)) |
5608 | 326 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
327 targets[abstarget] = abssrc |
5607 | 328 |
329 # fix up dirstate | |
14321
003d63bb4fa5
scmutil: drop some aliases in cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14320
diff
changeset
|
330 scmutil.dirstatecopy(ui, repo, wctx, abssrc, abstarget, |
003d63bb4fa5
scmutil: drop some aliases in cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14320
diff
changeset
|
331 dryrun=dryrun, cwd=cwd) |
5610
2493a478f395
copy: handle rename internally
Matt Mackall <mpm@selenic.com>
parents:
5609
diff
changeset
|
332 if rename and not dryrun: |
14518
a67e866f46f9
workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents:
14442
diff
changeset
|
333 if not after and srcexists: |
a67e866f46f9
workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents:
14442
diff
changeset
|
334 util.unlinkpath(repo.wjoin(abssrc)) |
a67e866f46f9
workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents:
14442
diff
changeset
|
335 wctx.forget([abssrc]) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
336 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
337 # pat: ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
338 # dest ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
339 # srcs: list of (hgsep, hgsep, ossep, bool) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
340 # return: function that takes hgsep and returns ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
341 def targetpathfn(pat, dest, srcs): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
342 if os.path.isdir(pat): |
13971
bfeaa88b875d
move canonpath from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13962
diff
changeset
|
343 abspfx = scmutil.canonpath(repo.root, cwd, pat) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
344 abspfx = util.localpath(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
345 if destdirexists: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
346 striplen = len(os.path.split(abspfx)[0]) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
347 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
348 striplen = len(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
349 if striplen: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
350 striplen += len(os.sep) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
351 res = lambda p: os.path.join(dest, util.localpath(p)[striplen:]) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
352 elif destdirexists: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
353 res = lambda p: os.path.join(dest, |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
354 os.path.basename(util.localpath(p))) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
355 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
356 res = lambda p: dest |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
357 return res |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
358 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
359 # pat: ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
360 # dest ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
361 # srcs: list of (hgsep, hgsep, ossep, bool) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
362 # return: function that takes hgsep and returns ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
363 def targetpathafterfn(pat, dest, srcs): |
12085
6f833fc3ccab
Consistently import foo as foomod when foo to avoid shadowing
Martin Geisler <mg@aragost.com>
parents:
12032
diff
changeset
|
364 if matchmod.patkind(pat): |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
365 # a mercurial pattern |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
366 res = lambda p: os.path.join(dest, |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
367 os.path.basename(util.localpath(p))) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
368 else: |
13971
bfeaa88b875d
move canonpath from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13962
diff
changeset
|
369 abspfx = scmutil.canonpath(repo.root, cwd, pat) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
370 if len(abspfx) < len(srcs[0][0]): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
371 # A directory. Either the target path contains the last |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
372 # component of the source path or it does not. |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
373 def evalpath(striplen): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
374 score = 0 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
375 for s in srcs: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
376 t = os.path.join(dest, util.localpath(s[0])[striplen:]) |
12357
cb59654c2c7a
Restore lexists() changes lost in e0ee3e822a9a merge
Patrick Mezard <pmezard@gmail.com>
parents:
12345
diff
changeset
|
377 if os.path.lexists(t): |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
378 score += 1 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
379 return score |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
380 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
381 abspfx = util.localpath(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
382 striplen = len(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
383 if striplen: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
384 striplen += len(os.sep) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
385 if os.path.isdir(os.path.join(dest, os.path.split(abspfx)[1])): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
386 score = evalpath(striplen) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
387 striplen1 = len(os.path.split(abspfx)[0]) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
388 if striplen1: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
389 striplen1 += len(os.sep) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
390 if evalpath(striplen1) > score: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
391 striplen = striplen1 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
392 res = lambda p: os.path.join(dest, |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
393 util.localpath(p)[striplen:]) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
394 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
395 # a file |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
396 if destdirexists: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
397 res = lambda p: os.path.join(dest, |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
398 os.path.basename(util.localpath(p))) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
399 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
400 res = lambda p: dest |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
401 return res |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
402 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
403 |
14321
003d63bb4fa5
scmutil: drop some aliases in cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14320
diff
changeset
|
404 pats = scmutil.expandpats(pats) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
405 if not pats: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
406 raise util.Abort(_('no source or destination specified')) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
407 if len(pats) == 1: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
408 raise util.Abort(_('no destination specified')) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
409 dest = pats.pop() |
6258
c24f4b3f156b
Fix issue995 (copy --after and symlinks pointing to a directory)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
410 destdirexists = os.path.isdir(dest) and not os.path.islink(dest) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
411 if not destdirexists: |
12085
6f833fc3ccab
Consistently import foo as foomod when foo to avoid shadowing
Martin Geisler <mg@aragost.com>
parents:
12032
diff
changeset
|
412 if len(pats) > 1 or matchmod.patkind(pats[0]): |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
413 raise util.Abort(_('with multiple sources, destination must be an ' |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
414 'existing directory')) |
5843
83c354c4d529
Add endswithsep() and use it instead of using os.sep and os.altsep directly.
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
5836
diff
changeset
|
415 if util.endswithsep(dest): |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
416 raise util.Abort(_('destination %s is not a directory') % dest) |
5607 | 417 |
418 tfn = targetpathfn | |
419 if after: | |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
420 tfn = targetpathafterfn |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
421 copylist = [] |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
422 for pat in pats: |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
423 srcs = walkpat(pat) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
424 if not srcs: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
425 continue |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
426 copylist.append((tfn(pat, dest, srcs), srcs)) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
427 if not copylist: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
428 raise util.Abort(_('no files to copy')) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
429 |
5606
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
430 errors = 0 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
431 for targetpath, srcs in copylist: |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
432 for abssrc, relsrc, exact in srcs: |
5606
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
433 if copyfile(abssrc, relsrc, targetpath(abssrc), exact): |
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
434 errors += 1 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
435 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
436 if errors: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
437 ui.warn(_('(consider using --after)\n')) |
5609 | 438 |
11177
6a64813276ed
commands: initial audit of exit codes
Matt Mackall <mpm@selenic.com>
parents:
11152
diff
changeset
|
439 return errors != 0 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
440 |
9513
ae88c721f916
cmdutil: service: add an optional runargs argument to pass the command to run
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9367
diff
changeset
|
441 def service(opts, parentfn=None, initfn=None, runfn=None, logfile=None, |
10012
2bfe1a23dafa
cmdutil: service: add appendpid parameter to append pids to pid file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9975
diff
changeset
|
442 runargs=None, appendpid=False): |
4380
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
443 '''Run a command as a service.''' |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
444 |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
445 if opts['daemon'] and not opts['daemon_pipefds']: |
10238
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
446 # Signal child process startup with file removal |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
447 lockfd, lockpath = tempfile.mkstemp(prefix='hg-service-') |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
448 os.close(lockfd) |
10238
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
449 try: |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
450 if not runargs: |
10239
8e4be44a676f
Find right hg command for detached process
Patrick Mezard <pmezard@gmail.com>
parents:
10238
diff
changeset
|
451 runargs = util.hgcmd() + sys.argv[1:] |
10238
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
452 runargs.append('--daemon-pipefds=%s' % lockpath) |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
453 # Don't pass --cwd to the child process, because we've already |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
454 # changed directory. |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
455 for i in xrange(1, len(runargs)): |
10238
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
456 if runargs[i].startswith('--cwd='): |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
457 del runargs[i] |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
458 break |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
459 elif runargs[i].startswith('--cwd'): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
460 del runargs[i:i + 2] |
10238
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
461 break |
10344
9501cde4c034
util: make spawndetached() handle subprocess early terminations
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
462 def condfn(): |
9501cde4c034
util: make spawndetached() handle subprocess early terminations
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
463 return not os.path.exists(lockpath) |
9501cde4c034
util: make spawndetached() handle subprocess early terminations
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
464 pid = util.rundetached(runargs, condfn) |
9501cde4c034
util: make spawndetached() handle subprocess early terminations
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
465 if pid < 0: |
9501cde4c034
util: make spawndetached() handle subprocess early terminations
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
466 raise util.Abort(_('child process failed to start')) |
10238
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
467 finally: |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
468 try: |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
469 os.unlink(lockpath) |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
470 except OSError, e: |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
471 if e.errno != errno.ENOENT: |
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
472 raise |
4380
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
473 if parentfn: |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
474 return parentfn(pid) |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
475 else: |
9896
2c2f7593ffc4
cmdutil.service: do not _exit(0) in the parent process
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9668
diff
changeset
|
476 return |
4380
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
477 |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
478 if initfn: |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
479 initfn() |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
480 |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
481 if opts['pid_file']: |
10012
2bfe1a23dafa
cmdutil: service: add appendpid parameter to append pids to pid file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9975
diff
changeset
|
482 mode = appendpid and 'a' or 'w' |
2bfe1a23dafa
cmdutil: service: add appendpid parameter to append pids to pid file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9975
diff
changeset
|
483 fp = open(opts['pid_file'], mode) |
4380
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
484 fp.write(str(os.getpid()) + '\n') |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
485 fp.close() |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
486 |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
487 if opts['daemon_pipefds']: |
10238
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
488 lockpath = opts['daemon_pipefds'] |
4380
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
489 try: |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
490 os.setsid() |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
491 except AttributeError: |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
492 pass |
10238
e22695b4472f
cmdutil: replace unix pipe handshake with file lock
Patrick Mezard <pmezard@gmail.com>
parents:
10237
diff
changeset
|
493 os.unlink(lockpath) |
10240
3af4b39afe2a
cmdutil: hide child window created by win32 spawndetached()
Patrick Mezard <pmezard@gmail.com>
parents:
10239
diff
changeset
|
494 util.hidewindow() |
4380
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
495 sys.stdout.flush() |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
496 sys.stderr.flush() |
8789
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
497 |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
498 nullfd = os.open(util.nulldev, os.O_RDWR) |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
499 logfilefd = nullfd |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
500 if logfile: |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
501 logfilefd = os.open(logfile, os.O_RDWR | os.O_CREAT | os.O_APPEND) |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
502 os.dup2(nullfd, 0) |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
503 os.dup2(logfilefd, 1) |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
504 os.dup2(logfilefd, 2) |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
505 if nullfd not in (0, 1, 2): |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
506 os.close(nullfd) |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
507 if logfile and logfilefd not in (0, 1, 2): |
e0ed17984a48
cmdutil: service: logfile option to redirect stdout & stderr in a file
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
508 os.close(logfilefd) |
4380
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
509 |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
510 if runfn: |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
511 return runfn() |
e89f9afc462b
Refactor commands.serve to allow other commands to run as services.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4355
diff
changeset
|
512 |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
513 def export(repo, revs, template='hg-%h.patch', fp=None, switch_parent=False, |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
514 opts=None): |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
515 '''export changesets as hg patches.''' |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
516 |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
517 total = len(revs) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
518 revwidth = max([len(str(rev)) for rev in revs]) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
519 |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
520 def single(rev, seqno, fp): |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
521 ctx = repo[rev] |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
522 node = ctx.node() |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
523 parents = [p.node() for p in ctx.parents() if p] |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
524 branch = ctx.branch() |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
525 if switch_parent: |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
526 parents.reverse() |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
527 prev = (parents and parents[0]) or nullid |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
528 |
13400
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13386
diff
changeset
|
529 shouldclose = False |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
530 if not fp: |
14986
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
531 desc_lines = ctx.description().rstrip().split('\n') |
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
532 desc = desc_lines[0] #Commit always has a first line. |
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
533 fp = makefileobj(repo, template, node, desc=desc, total=total, |
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
534 seqno=seqno, revwidth=revwidth, mode='ab') |
13467
31aa2e5b0750
export: only close files which export itself has opened
Waqas Hussain <waqas20@gmail.com>
parents:
13400
diff
changeset
|
535 if fp != template: |
31aa2e5b0750
export: only close files which export itself has opened
Waqas Hussain <waqas20@gmail.com>
parents:
13400
diff
changeset
|
536 shouldclose = True |
14948
32302480b402
cmdutil: use safehasattr instead of hasattr
Augie Fackler <durin42@gmail.com>
parents:
14671
diff
changeset
|
537 if fp != sys.stdout and util.safehasattr(fp, 'name'): |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
538 repo.ui.note("%s\n" % fp.name) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
539 |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
540 fp.write("# HG changeset patch\n") |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
541 fp.write("# User %s\n" % ctx.user()) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
542 fp.write("# Date %d %d\n" % ctx.date()) |
11821
15aa42aaae4c
cmdutil: remove unnecessary parenthesis
Martin Geisler <mg@aragost.com>
parents:
11635
diff
changeset
|
543 if branch and branch != 'default': |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
544 fp.write("# Branch %s\n" % branch) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
545 fp.write("# Node ID %s\n" % hex(node)) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
546 fp.write("# Parent %s\n" % hex(prev)) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
547 if len(parents) > 1: |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
548 fp.write("# Parent %s\n" % hex(parents[1])) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
549 fp.write(ctx.description().rstrip()) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
550 fp.write("\n\n") |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
551 |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
552 for chunk in patch.diff(repo, prev, node, opts=opts): |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
553 fp.write(chunk) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
554 |
13400
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13386
diff
changeset
|
555 if shouldclose: |
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13386
diff
changeset
|
556 fp.close() |
13081
79184986658c
export: flush the file pointer between patches
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13047
diff
changeset
|
557 |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
558 for seqno, rev in enumerate(revs): |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
559 single(rev, seqno + 1, fp) |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
560 |
11050
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
561 def diffordiffstat(ui, repo, diffopts, node1, node2, match, |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12164
diff
changeset
|
562 changes=None, stat=False, fp=None, prefix='', |
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12164
diff
changeset
|
563 listsubrepos=False): |
11050
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
564 '''show diff or diffstat.''' |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
565 if fp is None: |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
566 write = ui.write |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
567 else: |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
568 def write(s, **kw): |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
569 fp.write(s) |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
570 |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
571 if stat: |
11950
d157e040ac4c
log: fix the bug 'hg log --stat -p == hg log --stat'
Alecs King <alecsk@gmail.com>
parents:
11488
diff
changeset
|
572 diffopts = diffopts.copy(context=0) |
11050
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
573 width = 80 |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
574 if not ui.plain(): |
12689
c52c629ce19e
termwidth: move to ui.ui from util
Augie Fackler <durin42@gmail.com>
parents:
12619
diff
changeset
|
575 width = ui.termwidth() |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12164
diff
changeset
|
576 chunks = patch.diff(repo, node1, node2, match, changes, diffopts, |
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12164
diff
changeset
|
577 prefix=prefix) |
11050
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
578 for chunk, label in patch.diffstatui(util.iterlines(chunks), |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
579 width=width, |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
580 git=diffopts.git): |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
581 write(chunk, label=label) |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
582 else: |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
583 for chunk, label in patch.diffui(repo, node1, node2, match, |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12164
diff
changeset
|
584 changes, diffopts, prefix=prefix): |
11050
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
585 write(chunk, label=label) |
5d35f7d93514
commands: refactor diff --stat and qdiff --stat
Yuya Nishihara <yuya@tcha.org>
parents:
11017
diff
changeset
|
586 |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12164
diff
changeset
|
587 if listsubrepos: |
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12164
diff
changeset
|
588 ctx1 = repo[node1] |
12175
c0a8f9dea0f6
subrepos: handle modified but uncommitted .hgsub
Martin Geisler <mg@lazybytes.net>
parents:
12167
diff
changeset
|
589 ctx2 = repo[node2] |
12176
ecab10820983
subrepos: add function for iterating over ctx subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12175
diff
changeset
|
590 for subpath, sub in subrepo.itersubrepos(ctx1, ctx2): |
15698
43e068c15619
diff: when diffing a revision with a deleted subrepo, maintain the node context (issue3153)
Alistair Bell <alistair.bell@netronome.com>
parents:
15634
diff
changeset
|
591 tempnode2 = node2 |
15634
cfc15cbecc5e
diff: don't crash when diffing a revision with a deleted subrepo (issue3153)
Renato Cunha <renato@renatocunha.com>
parents:
15600
diff
changeset
|
592 try: |
cfc15cbecc5e
diff: don't crash when diffing a revision with a deleted subrepo (issue3153)
Renato Cunha <renato@renatocunha.com>
parents:
15600
diff
changeset
|
593 if node2 is not None: |
15698
43e068c15619
diff: when diffing a revision with a deleted subrepo, maintain the node context (issue3153)
Alistair Bell <alistair.bell@netronome.com>
parents:
15634
diff
changeset
|
594 tempnode2 = ctx2.substate[subpath][1] |
15634
cfc15cbecc5e
diff: don't crash when diffing a revision with a deleted subrepo (issue3153)
Renato Cunha <renato@renatocunha.com>
parents:
15600
diff
changeset
|
595 except KeyError: |
cfc15cbecc5e
diff: don't crash when diffing a revision with a deleted subrepo (issue3153)
Renato Cunha <renato@renatocunha.com>
parents:
15600
diff
changeset
|
596 # A subrepo that existed in node1 was deleted between node1 and |
cfc15cbecc5e
diff: don't crash when diffing a revision with a deleted subrepo (issue3153)
Renato Cunha <renato@renatocunha.com>
parents:
15600
diff
changeset
|
597 # node2 (inclusive). Thus, ctx2's substate won't contain that |
cfc15cbecc5e
diff: don't crash when diffing a revision with a deleted subrepo (issue3153)
Renato Cunha <renato@renatocunha.com>
parents:
15600
diff
changeset
|
598 # subpath. The best we can do is to ignore it. |
15698
43e068c15619
diff: when diffing a revision with a deleted subrepo, maintain the node context (issue3153)
Alistair Bell <alistair.bell@netronome.com>
parents:
15634
diff
changeset
|
599 tempnode2 = None |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12164
diff
changeset
|
600 submatch = matchmod.narrowmatcher(subpath, match) |
15698
43e068c15619
diff: when diffing a revision with a deleted subrepo, maintain the node context (issue3153)
Alistair Bell <alistair.bell@netronome.com>
parents:
15634
diff
changeset
|
601 sub.diff(diffopts, tempnode2, submatch, changes=changes, |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12164
diff
changeset
|
602 stat=stat, fp=fp, prefix=prefix) |
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12164
diff
changeset
|
603 |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
604 class changeset_printer(object): |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
605 '''show changeset information when templating not requested.''' |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
606 |
7762
fece056bf240
add --git option to commands supporting --patch (log, incoming, history, tip)
Jim Correia <jim.correia@pobox.com>
parents:
7667
diff
changeset
|
607 def __init__(self, ui, repo, patch, diffopts, buffered): |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
608 self.ui = ui |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
609 self.repo = repo |
3645
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
610 self.buffered = buffered |
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
611 self.patch = patch |
7762
fece056bf240
add --git option to commands supporting --patch (log, incoming, history, tip)
Jim Correia <jim.correia@pobox.com>
parents:
7667
diff
changeset
|
612 self.diffopts = diffopts |
3738
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
613 self.header = {} |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
614 self.hunk = {} |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
615 self.lastheader = None |
10152
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
10111
diff
changeset
|
616 self.footer = None |
3645
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
617 |
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
618 def flush(self, rev): |
3738
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
619 if rev in self.header: |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
620 h = self.header[rev] |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
621 if h != self.lastheader: |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
622 self.lastheader = h |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
623 self.ui.write(h) |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
624 del self.header[rev] |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
625 if rev in self.hunk: |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
626 self.ui.write(self.hunk[rev]) |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
627 del self.hunk[rev] |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
628 return 1 |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
629 return 0 |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
630 |
10152
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
10111
diff
changeset
|
631 def close(self): |
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
10111
diff
changeset
|
632 if self.footer: |
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
10111
diff
changeset
|
633 self.ui.write(self.footer) |
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
10111
diff
changeset
|
634 |
11488
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
635 def show(self, ctx, copies=None, matchfn=None, **props): |
3738
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
636 if self.buffered: |
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
637 self.ui.pushbuffer() |
11488
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
638 self._show(ctx, copies, matchfn, props) |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
639 self.hunk[ctx.rev()] = self.ui.popbuffer(labeled=True) |
3738
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
640 else: |
11488
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
641 self._show(ctx, copies, matchfn, props) |
3738
cb48cd27d3f4
use ui buffering in changeset printer
Matt Mackall <mpm@selenic.com>
parents:
3718
diff
changeset
|
642 |
11488
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
643 def _show(self, ctx, copies, matchfn, props): |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
644 '''show a single changeset or file revision''' |
7369
87158be081b8
cmdutil: use change contexts for cset-printer and cset-templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7361
diff
changeset
|
645 changenode = ctx.node() |
87158be081b8
cmdutil: use change contexts for cset-printer and cset-templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7361
diff
changeset
|
646 rev = ctx.rev() |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
647 |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
648 if self.ui.quiet: |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
649 self.ui.write("%d:%s\n" % (rev, short(changenode)), |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
650 label='log.node') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
651 return |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
652 |
7369
87158be081b8
cmdutil: use change contexts for cset-printer and cset-templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7361
diff
changeset
|
653 log = self.repo.changelog |
9547
f57640bf10d4
cmdutil: changeset_printer: use methods of filectx/changectx.
Greg Ward <greg-hg@gerg.ca>
parents:
9536
diff
changeset
|
654 date = util.datestr(ctx.date()) |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
655 |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
656 hexfunc = self.ui.debugflag and hex or short |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
657 |
4825
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
658 parents = [(p, hexfunc(log.node(p))) |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
659 for p in self._meaningful_parentrevs(log, rev)] |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
660 |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
661 self.ui.write(_("changeset: %d:%s\n") % (rev, hexfunc(changenode)), |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
662 label='log.changeset') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
663 |
9637
64425c5a9257
cmdutil: minor refactoring of changeset_printer._show
Adrian Buehlmann <adrian@cadifra.com>
parents:
9547
diff
changeset
|
664 branch = ctx.branch() |
4176
f9bbcebcacea
"default" is the default branch name
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4055
diff
changeset
|
665 # don't show the default branch name |
f9bbcebcacea
"default" is the default branch name
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4055
diff
changeset
|
666 if branch != 'default': |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
667 self.ui.write(_("branch: %s\n") % branch, |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
668 label='log.branch') |
13386
f78bc5ddbe4f
templater: add bookmarks to templates and default output
David Soria Parra <dsp@php.net>
parents:
13121
diff
changeset
|
669 for bookmark in self.repo.nodebookmarks(changenode): |
f78bc5ddbe4f
templater: add bookmarks to templates and default output
David Soria Parra <dsp@php.net>
parents:
13121
diff
changeset
|
670 self.ui.write(_("bookmark: %s\n") % bookmark, |
f78bc5ddbe4f
templater: add bookmarks to templates and default output
David Soria Parra <dsp@php.net>
parents:
13121
diff
changeset
|
671 label='log.bookmark') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
672 for tag in self.repo.nodetags(changenode): |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
673 self.ui.write(_("tag: %s\n") % tag, |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
674 label='log.tag') |
15907
51fc43253a52
changeset_printer: display changeset phase on debug level
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15777
diff
changeset
|
675 if self.ui.debugflag and ctx.phase(): |
51fc43253a52
changeset_printer: display changeset phase on debug level
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15777
diff
changeset
|
676 self.ui.write(_("phase: %s\n") % _(ctx.phasestr()), |
51fc43253a52
changeset_printer: display changeset phase on debug level
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15777
diff
changeset
|
677 label='log.phase') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
678 for parent in parents: |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
679 self.ui.write(_("parent: %d:%s\n") % parent, |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
680 label='log.parent') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
681 |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
682 if self.ui.debugflag: |
9547
f57640bf10d4
cmdutil: changeset_printer: use methods of filectx/changectx.
Greg Ward <greg-hg@gerg.ca>
parents:
9536
diff
changeset
|
683 mnode = ctx.manifestnode() |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
684 self.ui.write(_("manifest: %d:%s\n") % |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
685 (self.repo.manifest.rev(mnode), hex(mnode)), |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
686 label='ui.debug log.manifest') |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
687 self.ui.write(_("user: %s\n") % ctx.user(), |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
688 label='log.user') |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
689 self.ui.write(_("date: %s\n") % date, |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
690 label='log.date') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
691 |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
692 if self.ui.debugflag: |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
693 files = self.repo.status(log.parents(changenode)[0], changenode)[:3] |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
694 for key, value in zip([_("files:"), _("files+:"), _("files-:")], |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
695 files): |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
696 if value: |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
697 self.ui.write("%-12s %s\n" % (key, " ".join(value)), |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
698 label='ui.debug log.files') |
9547
f57640bf10d4
cmdutil: changeset_printer: use methods of filectx/changectx.
Greg Ward <greg-hg@gerg.ca>
parents:
9536
diff
changeset
|
699 elif ctx.files() and self.ui.verbose: |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
700 self.ui.write(_("files: %s\n") % " ".join(ctx.files()), |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
701 label='ui.note log.files') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
702 if copies and self.ui.verbose: |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
703 copies = ['%s (%s)' % c for c in copies] |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
704 self.ui.write(_("copies: %s\n") % ' '.join(copies), |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
705 label='ui.note log.copies') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
706 |
9637
64425c5a9257
cmdutil: minor refactoring of changeset_printer._show
Adrian Buehlmann <adrian@cadifra.com>
parents:
9547
diff
changeset
|
707 extra = ctx.extra() |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
708 if extra and self.ui.debugflag: |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8189
diff
changeset
|
709 for key, value in sorted(extra.items()): |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
710 self.ui.write(_("extra: %s=%s\n") |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
711 % (key, value.encode('string_escape')), |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
712 label='ui.debug log.extra') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
713 |
9547
f57640bf10d4
cmdutil: changeset_printer: use methods of filectx/changectx.
Greg Ward <greg-hg@gerg.ca>
parents:
9536
diff
changeset
|
714 description = ctx.description().strip() |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
715 if description: |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
716 if self.ui.verbose: |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
717 self.ui.write(_("description:\n"), |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
718 label='ui.note log.description') |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
719 self.ui.write(description, |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
720 label='ui.note log.description') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
721 self.ui.write("\n\n") |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
722 else: |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
723 self.ui.write(_("summary: %s\n") % |
10819
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
724 description.splitlines()[0], |
36c6a667d733
cmdutil: make use of output labeling in changeset_printer
Brodie Rao <brodie@bitheap.org>
parents:
10724
diff
changeset
|
725 label='log.summary') |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
726 self.ui.write("\n") |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
727 |
11488
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
728 self.showpatch(changenode, matchfn) |
3645
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
729 |
11488
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
730 def showpatch(self, node, matchfn): |
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
731 if not matchfn: |
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
732 matchfn = self.patch |
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
733 if matchfn: |
11061
51d0387523c6
log: add --stat for diffstat output
Yuya Nishihara <yuya@tcha.org>
parents:
11059
diff
changeset
|
734 stat = self.diffopts.get('stat') |
11950
d157e040ac4c
log: fix the bug 'hg log --stat -p == hg log --stat'
Alecs King <alecsk@gmail.com>
parents:
11488
diff
changeset
|
735 diff = self.diffopts.get('patch') |
11061
51d0387523c6
log: add --stat for diffstat output
Yuya Nishihara <yuya@tcha.org>
parents:
11059
diff
changeset
|
736 diffopts = patch.diffopts(self.ui, self.diffopts) |
3645
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
737 prev = self.repo.changelog.parents(node)[0] |
11950
d157e040ac4c
log: fix the bug 'hg log --stat -p == hg log --stat'
Alecs King <alecsk@gmail.com>
parents:
11488
diff
changeset
|
738 if stat: |
d157e040ac4c
log: fix the bug 'hg log --stat -p == hg log --stat'
Alecs King <alecsk@gmail.com>
parents:
11488
diff
changeset
|
739 diffordiffstat(self.ui, self.repo, diffopts, prev, node, |
d157e040ac4c
log: fix the bug 'hg log --stat -p == hg log --stat'
Alecs King <alecsk@gmail.com>
parents:
11488
diff
changeset
|
740 match=matchfn, stat=True) |
d157e040ac4c
log: fix the bug 'hg log --stat -p == hg log --stat'
Alecs King <alecsk@gmail.com>
parents:
11488
diff
changeset
|
741 if diff: |
d157e040ac4c
log: fix the bug 'hg log --stat -p == hg log --stat'
Alecs King <alecsk@gmail.com>
parents:
11488
diff
changeset
|
742 if stat: |
d157e040ac4c
log: fix the bug 'hg log --stat -p == hg log --stat'
Alecs King <alecsk@gmail.com>
parents:
11488
diff
changeset
|
743 self.ui.write("\n") |
d157e040ac4c
log: fix the bug 'hg log --stat -p == hg log --stat'
Alecs King <alecsk@gmail.com>
parents:
11488
diff
changeset
|
744 diffordiffstat(self.ui, self.repo, diffopts, prev, node, |
d157e040ac4c
log: fix the bug 'hg log --stat -p == hg log --stat'
Alecs King <alecsk@gmail.com>
parents:
11488
diff
changeset
|
745 match=matchfn, stat=False) |
3645
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
746 self.ui.write("\n") |
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
747 |
4825
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
748 def _meaningful_parentrevs(self, log, rev): |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
749 """Return list of meaningful (or all if debug) parentrevs for rev. |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
750 |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
751 For merges (two non-nullrev revisions) both parents are meaningful. |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
752 Otherwise the first parent revision is considered meaningful if it |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
753 is not the preceding revision. |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
754 """ |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
755 parents = log.parentrevs(rev) |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
756 if not self.ui.debugflag and parents[1] == nullrev: |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
757 if parents[0] >= rev - 1: |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
758 parents = [] |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
759 else: |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
760 parents = [parents[0]] |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
761 return parents |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
762 |
3cf94964c56b
hg log: Move filtering implicit parents to own method and use it in templater.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4824
diff
changeset
|
763 |
3645
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
764 class changeset_templater(changeset_printer): |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
765 '''format changeset information.''' |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
766 |
7762
fece056bf240
add --git option to commands supporting --patch (log, incoming, history, tip)
Jim Correia <jim.correia@pobox.com>
parents:
7667
diff
changeset
|
767 def __init__(self, ui, repo, patch, diffopts, mapfile, buffered): |
fece056bf240
add --git option to commands supporting --patch (log, incoming, history, tip)
Jim Correia <jim.correia@pobox.com>
parents:
7667
diff
changeset
|
768 changeset_printer.__init__(self, ui, repo, patch, diffopts, buffered) |
8360
acc202b71619
templater: provide the standard template filters by default
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8312
diff
changeset
|
769 formatnode = ui.debugflag and (lambda x: x) or (lambda x: x[:12]) |
10061
9e2ab10728a2
Make {file_copies} usable as a --template key
Patrick Mezard <pmezard@gmail.com>
parents:
10060
diff
changeset
|
770 defaulttempl = { |
9e2ab10728a2
Make {file_copies} usable as a --template key
Patrick Mezard <pmezard@gmail.com>
parents:
10060
diff
changeset
|
771 'parent': '{rev}:{node|formatnode} ', |
9e2ab10728a2
Make {file_copies} usable as a --template key
Patrick Mezard <pmezard@gmail.com>
parents:
10060
diff
changeset
|
772 'manifest': '{rev}:{node|formatnode}', |
9e2ab10728a2
Make {file_copies} usable as a --template key
Patrick Mezard <pmezard@gmail.com>
parents:
10060
diff
changeset
|
773 'file_copy': '{name} ({source})', |
9e2ab10728a2
Make {file_copies} usable as a --template key
Patrick Mezard <pmezard@gmail.com>
parents:
10060
diff
changeset
|
774 'extra': '{key}={value|stringescape}' |
9e2ab10728a2
Make {file_copies} usable as a --template key
Patrick Mezard <pmezard@gmail.com>
parents:
10060
diff
changeset
|
775 } |
9e2ab10728a2
Make {file_copies} usable as a --template key
Patrick Mezard <pmezard@gmail.com>
parents:
10060
diff
changeset
|
776 # filecopy is preserved for compatibility reasons |
9e2ab10728a2
Make {file_copies} usable as a --template key
Patrick Mezard <pmezard@gmail.com>
parents:
10060
diff
changeset
|
777 defaulttempl['filecopy'] = defaulttempl['file_copy'] |
8360
acc202b71619
templater: provide the standard template filters by default
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8312
diff
changeset
|
778 self.t = templater.templater(mapfile, {'formatnode': formatnode}, |
10061
9e2ab10728a2
Make {file_copies} usable as a --template key
Patrick Mezard <pmezard@gmail.com>
parents:
10060
diff
changeset
|
779 cache=defaulttempl) |
10057
babc00a82c5e
cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10056
diff
changeset
|
780 self.cache = {} |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
781 |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
782 def use_template(self, t): |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
783 '''set template string to use''' |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
784 self.t.cache['changeset'] = t |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
785 |
7878
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
786 def _meaningful_parentrevs(self, ctx): |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
787 """Return list of meaningful (or all if debug) parentrevs for rev. |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
788 """ |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
789 parents = ctx.parents() |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
790 if len(parents) > 1: |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
791 return parents |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
792 if self.ui.debugflag: |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
793 return [parents[0], self.repo['null']] |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
794 if parents[0].rev() >= ctx.rev() - 1: |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
795 return [] |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
796 return parents |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
797 |
11488
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
798 def _show(self, ctx, copies, matchfn, props): |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
799 '''show a single changeset or file revision''' |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
800 |
10053
5c5c6295533d
cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
10026
diff
changeset
|
801 showlist = templatekw.showlist |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
802 |
10058
c829563b3118
cmdutil: extract file copies closure into templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10057
diff
changeset
|
803 # showparents() behaviour depends on ui trace level which |
c829563b3118
cmdutil: extract file copies closure into templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10057
diff
changeset
|
804 # causes unexpected behaviours at templating level and makes |
c829563b3118
cmdutil: extract file copies closure into templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10057
diff
changeset
|
805 # it harder to extract it in a standalone function. Its |
c829563b3118
cmdutil: extract file copies closure into templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10057
diff
changeset
|
806 # behaviour cannot be changed so leave it here for now. |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
807 def showparents(**args): |
10260
fe699ca08a45
templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents:
10250
diff
changeset
|
808 ctx = args['ctx'] |
7878
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
809 parents = [[('rev', p.rev()), ('node', p.hex())] |
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
810 for p in self._meaningful_parentrevs(ctx)] |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
811 return showlist('parent', parents, **args) |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
812 |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
813 props = props.copy() |
10054
1a85861f59af
cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10053
diff
changeset
|
814 props.update(templatekw.keywords) |
10058
c829563b3118
cmdutil: extract file copies closure into templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10057
diff
changeset
|
815 props['parents'] = showparents |
10053
5c5c6295533d
cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
10026
diff
changeset
|
816 props['templ'] = self.t |
10054
1a85861f59af
cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10053
diff
changeset
|
817 props['ctx'] = ctx |
10055
e400a511e63a
cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10054
diff
changeset
|
818 props['repo'] = self.repo |
10058
c829563b3118
cmdutil: extract file copies closure into templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10057
diff
changeset
|
819 props['revcache'] = {'copies': copies} |
10057
babc00a82c5e
cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents:
10056
diff
changeset
|
820 props['cache'] = self.cache |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
821 |
8013
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
822 # find correct templates for current mode |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
823 |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
824 tmplmodes = [ |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
825 (True, None), |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
826 (self.ui.verbose, 'verbose'), |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
827 (self.ui.quiet, 'quiet'), |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
828 (self.ui.debugflag, 'debug'), |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
829 ] |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
830 |
10152
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
10111
diff
changeset
|
831 types = {'header': '', 'footer':'', 'changeset': 'changeset'} |
8013
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
832 for mode, postfix in tmplmodes: |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
833 for type in types: |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
834 cur = postfix and ('%s_%s' % (type, postfix)) or type |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
835 if mode and cur in self.t: |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
836 types[type] = cur |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
837 |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
838 try: |
8013
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
839 |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
840 # write header |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
841 if types['header']: |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
842 h = templater.stringify(self.t(types['header'], **props)) |
3645
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
843 if self.buffered: |
7878
8c09952cd39a
templater: use contexts consistently throughout changeset_templater
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7807
diff
changeset
|
844 self.header[ctx.rev()] = h |
3645
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
845 else: |
11465
ace5bd98bee3
heads: fix templating of headers again (issue2130)
Simon Howkins <simonh@symbian.org>
parents:
11441
diff
changeset
|
846 if self.lastheader != h: |
ace5bd98bee3
heads: fix templating of headers again (issue2130)
Simon Howkins <simonh@symbian.org>
parents:
11441
diff
changeset
|
847 self.lastheader = h |
11441
d74fe370ab04
cmdutil: only output style header once in non-buffered mode (issue2130)
Simon Howkins <simonh@symbian.org>
parents:
11410
diff
changeset
|
848 self.ui.write(h) |
8013
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
849 |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
850 # write changeset metadata, then patch if requested |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
851 key = types['changeset'] |
3645
b984dcb1df71
Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
852 self.ui.write(templater.stringify(self.t(key, **props))) |
11488
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
853 self.showpatch(ctx.node(), matchfn) |
8013
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
854 |
10160
48653dea23dd
Bugfix and test for hg log XML output
Robert Bachmann <rbachm@gmail.com>
parents:
10152
diff
changeset
|
855 if types['footer']: |
10152
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
10111
diff
changeset
|
856 if not self.footer: |
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
10111
diff
changeset
|
857 self.footer = templater.stringify(self.t(types['footer'], |
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
10111
diff
changeset
|
858 **props)) |
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
10111
diff
changeset
|
859 |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
860 except KeyError, inst: |
8013
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
861 msg = _("%s: no key named '%s'") |
9ec25db32b4e
cmdutil: prevent code repetition by abstraction in changeset_templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7967
diff
changeset
|
862 raise util.Abort(msg % (self.t.mapfile, inst.args[0])) |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
863 except SyntaxError, inst: |
10829
56fffc9c8928
cmdutil: do not translate trivial string
Martin Geisler <mg@lazybytes.net>
parents:
10819
diff
changeset
|
864 raise util.Abort('%s: %s' % (self.t.mapfile, inst.args[0])) |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
865 |
11488
f786fc4b8764
log: follow filenames through renames (issue647)
Mads Kiilerich <mads@kiilerich.com>
parents:
11465
diff
changeset
|
866 def show_changeset(ui, repo, opts, buffered=False): |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
867 """show one changeset using template or regular display. |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
868 |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
869 Display format will be the first non-empty hit of: |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
870 1. option 'template' |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
871 2. option 'style' |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
872 3. [ui] setting 'logtemplate' |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
873 4. [ui] setting 'style' |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
874 If all of these values are either the unset or the empty string, |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
875 regular display via changeset_printer() is done. |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
876 """ |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
877 # options |
3837
7df171ea50cd
Fix log regression where log -p file showed diffs for other files
Matt Mackall <mpm@selenic.com>
parents:
3827
diff
changeset
|
878 patch = False |
11061
51d0387523c6
log: add --stat for diffstat output
Yuya Nishihara <yuya@tcha.org>
parents:
11059
diff
changeset
|
879 if opts.get('patch') or opts.get('stat'): |
14322
a90131b85fd8
scmutil: drop aliases in cmdutil for match functions
Matt Mackall <mpm@selenic.com>
parents:
14321
diff
changeset
|
880 patch = scmutil.matchall(repo) |
3837
7df171ea50cd
Fix log regression where log -p file showed diffs for other files
Matt Mackall <mpm@selenic.com>
parents:
3827
diff
changeset
|
881 |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
882 tmpl = opts.get('template') |
7967
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
883 style = None |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
884 if tmpl: |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
885 tmpl = templater.parsestring(tmpl, quoted=False) |
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
886 else: |
7967
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
887 style = opts.get('style') |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
888 |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
889 # ui settings |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
890 if not (tmpl or style): |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
891 tmpl = ui.config('ui', 'logtemplate') |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
892 if tmpl: |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
893 tmpl = templater.parsestring(tmpl) |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
894 else: |
10249
8ebb34b0f6f7
cmdutil: expand style paths (issue1948)
Patrick Mezard <pmezard@gmail.com>
parents:
10025
diff
changeset
|
895 style = util.expandpath(ui.config('ui', 'style', '')) |
7967
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
896 |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
897 if not (tmpl or style): |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
898 return changeset_printer(ui, repo, patch, opts, buffered) |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
899 |
7967
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
900 mapfile = None |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
901 if style and not tmpl: |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
902 mapfile = style |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
903 if not os.path.split(mapfile)[0]: |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
904 mapname = (templater.templatepath('map-cmdline.' + mapfile) |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
905 or templater.templatepath(mapfile)) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
906 if mapname: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
907 mapfile = mapname |
7967
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
908 |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
909 try: |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
910 t = changeset_templater(ui, repo, patch, opts, mapfile, buffered) |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
911 except SyntaxError, inst: |
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
912 raise util.Abort(inst.args[0]) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
913 if tmpl: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
914 t.use_template(tmpl) |
7967
c03f42159afa
cmdutil: refactor handling of templating in show_changeset()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7948
diff
changeset
|
915 return t |
3643
b4ad640a3bcf
templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3531
diff
changeset
|
916 |
3814
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
917 def finddate(ui, repo, date): |
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
918 """Find the tipmost changeset that matches the given date spec""" |
9667 | 919 |
5836
c5c9a022bd9a
Tweak finddate to pass date directly.
mark.williamson@cl.cam.ac.uk
parents:
5829
diff
changeset
|
920 df = util.matchdate(date) |
14322
a90131b85fd8
scmutil: drop aliases in cmdutil for match functions
Matt Mackall <mpm@selenic.com>
parents:
14321
diff
changeset
|
921 m = scmutil.matchall(repo) |
3814
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
922 results = {} |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
923 |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
924 def prep(ctx, fns): |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
925 d = ctx.date() |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
926 if df(d[0]): |
9668
2c24471d478c
cmdutil: fix bug in finddate() implementation
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9667
diff
changeset
|
927 results[ctx.rev()] = d |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
928 |
9667 | 929 for ctx in walkchangerevs(repo, m, {'rev': None}, prep): |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
930 rev = ctx.rev() |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
931 if rev in results: |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
932 ui.status(_("Found revision %s from %s\n") % |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
933 (rev, util.datestr(results[rev]))) |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
934 return str(rev) |
3814
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
935 |
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
936 raise util.Abort(_("revision matching date not found")) |
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
937 |
9665
1de5ebfa5585
walkchangerevs: drop ui arg
Matt Mackall <mpm@selenic.com>
parents:
9664
diff
changeset
|
938 def walkchangerevs(repo, match, opts, prepare): |
7807
bd8f44638847
help: miscellaneous language fixes
timeless <timeless@gmail.com>
parents:
7779
diff
changeset
|
939 '''Iterate over files and the revs in which they changed. |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
940 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
941 Callers most commonly need to iterate backwards over the history |
7807
bd8f44638847
help: miscellaneous language fixes
timeless <timeless@gmail.com>
parents:
7779
diff
changeset
|
942 in which they are interested. Doing so has awful (quadratic-looking) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
943 performance, so we use iterators in a "windowed" way. |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
944 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
945 We walk a window of revisions in the desired order. Within the |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
946 window, we first walk forwards to gather data, then in the desired |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
947 order (usually backwards) to display it. |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
948 |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
949 This function returns an iterator yielding contexts. Before |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
950 yielding each context, the iterator will first call the prepare |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
951 function on each context in the window in forward order.''' |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
952 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
953 def increasing_windows(start, end, windowsize=8, sizelimit=512): |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
954 if start < end: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
955 while start < end: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
956 yield start, min(windowsize, end - start) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
957 start += windowsize |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
958 if windowsize < sizelimit: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
959 windowsize *= 2 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
960 else: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
961 while start > end: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
962 yield start, min(windowsize, start - end - 1) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
963 start -= windowsize |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
964 if windowsize < sizelimit: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
965 windowsize *= 2 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
966 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
967 follow = opts.get('follow') or opts.get('follow_first') |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
968 |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
969 if not len(repo): |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
970 return [] |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
971 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
972 if follow: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6739
diff
changeset
|
973 defrange = '%s:0' % repo['.'].rev() |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
974 else: |
6145
154f8be6272b
cmdutil.walkchangerevs: use '-1:0' instead ot 'tip:0'
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6139
diff
changeset
|
975 defrange = '-1:0' |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14297
diff
changeset
|
976 revs = scmutil.revrange(repo, opts['rev'] or [defrange]) |
11281
b724b8467b82
walkchangerevs: allow empty query sets
Matt Mackall <mpm@selenic.com>
parents:
11277
diff
changeset
|
977 if not revs: |
b724b8467b82
walkchangerevs: allow empty query sets
Matt Mackall <mpm@selenic.com>
parents:
11277
diff
changeset
|
978 return [] |
8152
08e1baf924ca
replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents:
8119
diff
changeset
|
979 wanted = set() |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
980 slowpath = match.anypats() or (match.files() and opts.get('removed')) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
981 fncache = {} |
16108
f7e0d95d0a0b
log: remove caching of all visited revisions (issue3253)
Matt Mackall <mpm@selenic.com>
parents:
16070
diff
changeset
|
982 change = repo.changectx |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
983 |
11632
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
984 # First step is to fill wanted, the set of revisions that we want to yield. |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
985 # When it does not induce extra cost, we also fill fncache for revisions in |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
986 # wanted: a cache of filenames that were changed (ctx.files()) and that |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
987 # match the file filtering conditions. |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
988 |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
989 if not slowpath and not match.files(): |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
990 # No files, no patterns. Display all revs. |
8152
08e1baf924ca
replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents:
8119
diff
changeset
|
991 wanted = set(revs) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
992 copies = [] |
9665
1de5ebfa5585
walkchangerevs: drop ui arg
Matt Mackall <mpm@selenic.com>
parents:
9664
diff
changeset
|
993 |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
994 if not slowpath: |
11632
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
995 # We only have to read through the filelog to find wanted revisions |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
996 |
11607
cc784ad8b3da
log: refactor: test for ranges inside filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11606
diff
changeset
|
997 minrev, maxrev = min(revs), max(revs) |
11606
326ab8727a93
log: refactor: compute the value of last outside of filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11488
diff
changeset
|
998 def filerevgen(filelog, last): |
11899
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
999 """ |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1000 Only files, no patterns. Check the history of each file. |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1001 |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1002 Examines filelog entries within minrev, maxrev linkrev range |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1003 Returns an iterator yielding (linkrev, parentlinkrevs, copied) |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1004 tuples in backwards order |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1005 """ |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
1006 cl_count = len(repo) |
11608
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1007 revs = [] |
11634 | 1008 for j in xrange(0, last + 1): |
11608
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1009 linkrev = filelog.linkrev(j) |
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1010 if linkrev < minrev: |
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1011 continue |
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1012 # only yield rev for which we have the changelog, it can |
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1013 # happen while doing "hg log" during a pull or commit |
12971
15390d1a3cfc
cmdutil: move range check outside of filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12900
diff
changeset
|
1014 if linkrev >= cl_count: |
11608
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1015 break |
11899
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1016 |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1017 parentlinkrevs = [] |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1018 for p in filelog.parentrevs(j): |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1019 if p != nullrev: |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1020 parentlinkrevs.append(filelog.linkrev(p)) |
11608
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1021 n = filelog.node(j) |
11899
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1022 revs.append((linkrev, parentlinkrevs, |
11608
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1023 follow and filelog.renamed(n))) |
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1024 |
11901
a80577bfea29
cmdutil: code simplification
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11899
diff
changeset
|
1025 return reversed(revs) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1026 def iterfiles(): |
16165
60101427d618
log: fix --follow FILE ancestry calculation
Patrick Mezard <patrick@mezard.eu>
parents:
16108
diff
changeset
|
1027 pctx = repo['.'] |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
1028 for filename in match.files(): |
16165
60101427d618
log: fix --follow FILE ancestry calculation
Patrick Mezard <patrick@mezard.eu>
parents:
16108
diff
changeset
|
1029 if follow: |
60101427d618
log: fix --follow FILE ancestry calculation
Patrick Mezard <patrick@mezard.eu>
parents:
16108
diff
changeset
|
1030 if filename not in pctx: |
60101427d618
log: fix --follow FILE ancestry calculation
Patrick Mezard <patrick@mezard.eu>
parents:
16108
diff
changeset
|
1031 raise util.Abort(_('cannot follow file not in parent ' |
60101427d618
log: fix --follow FILE ancestry calculation
Patrick Mezard <patrick@mezard.eu>
parents:
16108
diff
changeset
|
1032 'revision: "%s"') % filename) |
60101427d618
log: fix --follow FILE ancestry calculation
Patrick Mezard <patrick@mezard.eu>
parents:
16108
diff
changeset
|
1033 yield filename, pctx[filename].filenode() |
60101427d618
log: fix --follow FILE ancestry calculation
Patrick Mezard <patrick@mezard.eu>
parents:
16108
diff
changeset
|
1034 else: |
60101427d618
log: fix --follow FILE ancestry calculation
Patrick Mezard <patrick@mezard.eu>
parents:
16108
diff
changeset
|
1035 yield filename, None |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1036 for filename_node in copies: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1037 yield filename_node |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1038 for file_, node in iterfiles(): |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1039 filelog = repo.file(file_) |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
1040 if not len(filelog): |
6536
dfdef3d560a8
cmdutil: handle and warn about missing copy revisions
Patrick Mezard <pmezard@gmail.com>
parents:
6258
diff
changeset
|
1041 if node is None: |
dfdef3d560a8
cmdutil: handle and warn about missing copy revisions
Patrick Mezard <pmezard@gmail.com>
parents:
6258
diff
changeset
|
1042 # A zero count may be a directory or deleted file, so |
dfdef3d560a8
cmdutil: handle and warn about missing copy revisions
Patrick Mezard <pmezard@gmail.com>
parents:
6258
diff
changeset
|
1043 # try to find matching entries on the slow path. |
7404
07cb58b8c843
Improved error message for log --follow
Brendan Cully <brendan@kublai.com>
parents:
7369
diff
changeset
|
1044 if follow: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1045 raise util.Abort( |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1046 _('cannot follow nonexistent file: "%s"') % file_) |
6536
dfdef3d560a8
cmdutil: handle and warn about missing copy revisions
Patrick Mezard <pmezard@gmail.com>
parents:
6258
diff
changeset
|
1047 slowpath = True |
dfdef3d560a8
cmdutil: handle and warn about missing copy revisions
Patrick Mezard <pmezard@gmail.com>
parents:
6258
diff
changeset
|
1048 break |
dfdef3d560a8
cmdutil: handle and warn about missing copy revisions
Patrick Mezard <pmezard@gmail.com>
parents:
6258
diff
changeset
|
1049 else: |
dfdef3d560a8
cmdutil: handle and warn about missing copy revisions
Patrick Mezard <pmezard@gmail.com>
parents:
6258
diff
changeset
|
1050 continue |
11606
326ab8727a93
log: refactor: compute the value of last outside of filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11488
diff
changeset
|
1051 |
326ab8727a93
log: refactor: compute the value of last outside of filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11488
diff
changeset
|
1052 if node is None: |
326ab8727a93
log: refactor: compute the value of last outside of filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11488
diff
changeset
|
1053 last = len(filelog) - 1 |
326ab8727a93
log: refactor: compute the value of last outside of filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11488
diff
changeset
|
1054 else: |
326ab8727a93
log: refactor: compute the value of last outside of filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11488
diff
changeset
|
1055 last = filelog.rev(node) |
326ab8727a93
log: refactor: compute the value of last outside of filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11488
diff
changeset
|
1056 |
11899
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1057 |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1058 # keep track of all ancestors of the file |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1059 ancestors = set([filelog.linkrev(last)]) |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1060 |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1061 # iterate from latest to oldest revision |
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1062 for rev, flparentlinkrevs, copied in filerevgen(filelog, last): |
12972
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1063 if not follow: |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1064 if rev > maxrev: |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1065 continue |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1066 else: |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1067 # Note that last might not be the first interesting |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1068 # rev to us: |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1069 # if the file has been changed after maxrev, we'll |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1070 # have linkrev(last) > maxrev, and we still need |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1071 # to explore the file graph |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1072 if rev not in ancestors: |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1073 continue |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1074 # XXX insert 1327 fix here |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1075 if flparentlinkrevs: |
7916a84c0758
log: fix log -rREV FILE when REV isnt the last filerev (issue2492)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12971
diff
changeset
|
1076 ancestors.update(flparentlinkrevs) |
11899
99cafcae25d9
log: do not --follow file that is deleted and recreated later (issue732)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11821
diff
changeset
|
1077 |
11901
a80577bfea29
cmdutil: code simplification
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11899
diff
changeset
|
1078 fncache.setdefault(rev, []).append(file_) |
11607
cc784ad8b3da
log: refactor: test for ranges inside filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11606
diff
changeset
|
1079 wanted.add(rev) |
cc784ad8b3da
log: refactor: test for ranges inside filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11606
diff
changeset
|
1080 if copied: |
cc784ad8b3da
log: refactor: test for ranges inside filerevgen
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11606
diff
changeset
|
1081 copies.append(copied) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1082 if slowpath: |
11632
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1083 # We have to read the changelog to match filenames against |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1084 # changed files |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1085 |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1086 if follow: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1087 raise util.Abort(_('can only follow copies/renames for explicit ' |
8761
0289f384e1e5
Generally replace "file name" with "filename" in help and comments.
timeless <timeless@gmail.com>
parents:
8731
diff
changeset
|
1088 'filenames')) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1089 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1090 # The slow path checks files modified in every changeset. |
11631
dbb98d8fbcaf
log: slowpath: only walk specified revision range during preparation
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11613
diff
changeset
|
1091 for i in sorted(revs): |
11609
890ad9d6a169
log: slowpath: do not read the full changelog
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11608
diff
changeset
|
1092 ctx = change(i) |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
1093 matches = filter(match, ctx.files()) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1094 if matches: |
11609
890ad9d6a169
log: slowpath: do not read the full changelog
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11608
diff
changeset
|
1095 fncache[i] = matches |
890ad9d6a169
log: slowpath: do not read the full changelog
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11608
diff
changeset
|
1096 wanted.add(i) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1097 |
8778
c5f36402daad
use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8761
diff
changeset
|
1098 class followfilter(object): |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1099 def __init__(self, onlyfirst=False): |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1100 self.startrev = nullrev |
10024
2b630e4c8f2f
log --follow: use a set instead of a list
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10012
diff
changeset
|
1101 self.roots = set() |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1102 self.onlyfirst = onlyfirst |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1103 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1104 def match(self, rev): |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1105 def realparents(rev): |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1106 if self.onlyfirst: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1107 return repo.changelog.parentrevs(rev)[0:1] |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1108 else: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1109 return filter(lambda x: x != nullrev, |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1110 repo.changelog.parentrevs(rev)) |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1111 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1112 if self.startrev == nullrev: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1113 self.startrev = rev |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1114 return True |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1115 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1116 if rev > self.startrev: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1117 # forward: all descendants |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1118 if not self.roots: |
10024
2b630e4c8f2f
log --follow: use a set instead of a list
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10012
diff
changeset
|
1119 self.roots.add(self.startrev) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1120 for parent in realparents(rev): |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1121 if parent in self.roots: |
10024
2b630e4c8f2f
log --follow: use a set instead of a list
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10012
diff
changeset
|
1122 self.roots.add(rev) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1123 return True |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1124 else: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1125 # backwards: all parents |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1126 if not self.roots: |
10024
2b630e4c8f2f
log --follow: use a set instead of a list
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10012
diff
changeset
|
1127 self.roots.update(realparents(self.startrev)) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1128 if rev in self.roots: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1129 self.roots.remove(rev) |
10024
2b630e4c8f2f
log --follow: use a set instead of a list
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10012
diff
changeset
|
1130 self.roots.update(realparents(rev)) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1131 return True |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1132 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1133 return False |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1134 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1135 # it might be worthwhile to do this in the iterator if the rev range |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1136 # is descending and the prune args are all within that range |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1137 for rev in opts.get('prune', ()): |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1138 rev = repo.changelog.rev(repo.lookup(rev)) |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1139 ff = followfilter() |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1140 stop = min(revs[0], revs[-1]) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1141 for x in xrange(rev, stop - 1, -1): |
8152
08e1baf924ca
replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents:
8119
diff
changeset
|
1142 if ff.match(x): |
08e1baf924ca
replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents:
8119
diff
changeset
|
1143 wanted.discard(x) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1144 |
11632
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1145 # Now that wanted is correctly initialized, we can iterate over the |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1146 # revision range, yielding only revisions in wanted. |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1147 def iterate(): |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
1148 if follow and not match.files(): |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1149 ff = followfilter(onlyfirst=opts.get('follow_first')) |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1150 def want(rev): |
8119
af44d0b953c6
cmdutil: return boolean result directly in want function
Martin Geisler <mg@lazybytes.net>
parents:
8117
diff
changeset
|
1151 return ff.match(rev) and rev in wanted |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1152 else: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1153 def want(rev): |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1154 return rev in wanted |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1155 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1156 for i, window in increasing_windows(0, len(revs)): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1157 nrevs = [rev for rev in revs[i:i + window] if want(rev)] |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8189
diff
changeset
|
1158 for rev in sorted(nrevs): |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1159 fns = fncache.get(rev) |
9654
96fe91be9c1e
walkchangerevs: yield contexts
Matt Mackall <mpm@selenic.com>
parents:
9653
diff
changeset
|
1160 ctx = change(rev) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1161 if not fns: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1162 def fns_generator(): |
9654
96fe91be9c1e
walkchangerevs: yield contexts
Matt Mackall <mpm@selenic.com>
parents:
9653
diff
changeset
|
1163 for f in ctx.files(): |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
1164 if match(f): |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1165 yield f |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1166 fns = fns_generator() |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1167 prepare(ctx, fns) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1168 for rev in nrevs: |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1169 yield change(rev) |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
1170 return iterate() |
5034
c0417a319e39
commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
1171 |
15911
c654eac03452
add: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15907
diff
changeset
|
1172 def add(ui, repo, match, dryrun, listsubrepos, prefix, explicitonly): |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1173 join = lambda f: os.path.join(prefix, f) |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1174 bad = [] |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1175 oldbad = match.bad |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1176 match.bad = lambda x, y: bad.append(x) or oldbad(x, y) |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1177 names = [] |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1178 wctx = repo[None] |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1179 cca = None |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1180 abort, warn = scmutil.checkportabilityalert(ui) |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1181 if abort or warn: |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1182 cca = scmutil.casecollisionauditor(ui, abort, wctx) |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1183 for f in repo.walk(match): |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1184 exact = match.exact(f) |
15911
c654eac03452
add: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15907
diff
changeset
|
1185 if exact or not explicitonly and f not in repo.dirstate: |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1186 if cca: |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1187 cca(f) |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1188 names.append(f) |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1189 if ui.verbose or not exact: |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1190 ui.status(_('adding %s\n') % match.rel(join(f))) |
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1191 |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1192 for subpath in wctx.substate: |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1193 sub = wctx.sub(subpath) |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1194 try: |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1195 submatch = matchmod.narrowmatcher(subpath, match) |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1196 if listsubrepos: |
15911
c654eac03452
add: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15907
diff
changeset
|
1197 bad.extend(sub.add(ui, submatch, dryrun, listsubrepos, prefix, |
c654eac03452
add: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15907
diff
changeset
|
1198 False)) |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1199 else: |
15911
c654eac03452
add: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15907
diff
changeset
|
1200 bad.extend(sub.add(ui, submatch, dryrun, listsubrepos, prefix, |
c654eac03452
add: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15907
diff
changeset
|
1201 True)) |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1202 except error.LookupError: |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1203 ui.status(_("skipping missing subrepository: %s\n") |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1204 % join(subpath)) |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1205 |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1206 if not dryrun: |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1207 rejected = wctx.add(names, prefix) |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1208 bad.extend(f for f in rejected if f in match.files()) |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1209 return bad |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1210 |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1211 def forget(ui, repo, match, prefix, explicitonly): |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1212 join = lambda f: os.path.join(prefix, f) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1213 bad = [] |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1214 oldbad = match.bad |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1215 match.bad = lambda x, y: bad.append(x) or oldbad(x, y) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1216 wctx = repo[None] |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1217 forgot = [] |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1218 s = repo.status(match=match, clean=True) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1219 forget = sorted(s[0] + s[1] + s[3] + s[6]) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1220 if explicitonly: |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1221 forget = [f for f in forget if match.exact(f)] |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1222 |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1223 for subpath in wctx.substate: |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1224 sub = wctx.sub(subpath) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1225 try: |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1226 submatch = matchmod.narrowmatcher(subpath, match) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1227 subbad, subforgot = sub.forget(ui, submatch, prefix) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1228 bad.extend([subpath + '/' + f for f in subbad]) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1229 forgot.extend([subpath + '/' + f for f in subforgot]) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1230 except error.LookupError: |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1231 ui.status(_("skipping missing subrepository: %s\n") |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1232 % join(subpath)) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1233 |
16070
f11eee00c652
forget: show warning messages for forgetting in subrepo correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15912
diff
changeset
|
1234 if not explicitonly: |
f11eee00c652
forget: show warning messages for forgetting in subrepo correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15912
diff
changeset
|
1235 for f in match.files(): |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1236 if f not in repo.dirstate and not os.path.isdir(match.rel(join(f))): |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1237 if f not in forgot: |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1238 if os.path.exists(match.rel(join(f))): |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1239 ui.warn(_('not removing %s: ' |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1240 'file is already untracked\n') |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1241 % match.rel(join(f))) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1242 bad.append(f) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1243 |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1244 for f in forget: |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1245 if ui.verbose or not match.exact(f): |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1246 ui.status(_('removing %s\n') % match.rel(join(f))) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1247 |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1248 rejected = wctx.forget(forget, prefix) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1249 bad.extend(f for f in rejected if f in match.files()) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1250 forgot.extend(forget) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1251 return bad, forgot |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1252 |
15777
12309c09d19a
cmdutil: simplify duplicatecopies
Matt Mackall <mpm@selenic.com>
parents:
15774
diff
changeset
|
1253 def duplicatecopies(repo, rev, p1): |
15214
231aac5280ba
rebase: move updatedirstate into cmdutil so it can be shared
Matt Mackall <mpm@selenic.com>
parents:
14986
diff
changeset
|
1254 "Reproduce copies found in the source revision in the dirstate for grafts" |
15777
12309c09d19a
cmdutil: simplify duplicatecopies
Matt Mackall <mpm@selenic.com>
parents:
15774
diff
changeset
|
1255 for dst, src in copies.pathcopies(repo[p1], repo[rev]).iteritems(): |
12309c09d19a
cmdutil: simplify duplicatecopies
Matt Mackall <mpm@selenic.com>
parents:
15774
diff
changeset
|
1256 repo.dirstate.copy(src, dst) |
15214
231aac5280ba
rebase: move updatedirstate into cmdutil so it can be shared
Matt Mackall <mpm@selenic.com>
parents:
14986
diff
changeset
|
1257 |
5034
c0417a319e39
commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
1258 def commit(ui, repo, commitfunc, pats, opts): |
c0417a319e39
commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
1259 '''commit the specified files or all outstanding changes''' |
6139
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6112
diff
changeset
|
1260 date = opts.get('date') |
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6112
diff
changeset
|
1261 if date: |
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6112
diff
changeset
|
1262 opts['date'] = util.parsedate(date) |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14518
diff
changeset
|
1263 message = logmessage(ui, opts) |
5034
c0417a319e39
commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
1264 |
5829
784073457a0f
cmdutil.commit: extract 'addremove' from opts carefully
Kirill Smelkov <kirr@mns.spb.ru>
parents:
5797
diff
changeset
|
1265 # extract addremove carefully -- this function can be called from a command |
784073457a0f
cmdutil.commit: extract 'addremove' from opts carefully
Kirill Smelkov <kirr@mns.spb.ru>
parents:
5797
diff
changeset
|
1266 # that doesn't support addremove |
784073457a0f
cmdutil.commit: extract 'addremove' from opts carefully
Kirill Smelkov <kirr@mns.spb.ru>
parents:
5797
diff
changeset
|
1267 if opts.get('addremove'): |
14321
003d63bb4fa5
scmutil: drop some aliases in cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14320
diff
changeset
|
1268 scmutil.addremove(repo, pats, opts) |
5829
784073457a0f
cmdutil.commit: extract 'addremove' from opts carefully
Kirill Smelkov <kirr@mns.spb.ru>
parents:
5797
diff
changeset
|
1269 |
14671
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14638
diff
changeset
|
1270 return commitfunc(ui, repo, message, |
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14638
diff
changeset
|
1271 scmutil.match(repo[None], pats, opts), opts) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1272 |
8994
4a1187d3cb00
commit: report modified subrepos in commit editor
Matt Mackall <mpm@selenic.com>
parents:
8990
diff
changeset
|
1273 def commiteditor(repo, ctx, subs): |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1274 if ctx.description(): |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1275 return ctx.description() |
8994
4a1187d3cb00
commit: report modified subrepos in commit editor
Matt Mackall <mpm@selenic.com>
parents:
8990
diff
changeset
|
1276 return commitforceeditor(repo, ctx, subs) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1277 |
8994
4a1187d3cb00
commit: report modified subrepos in commit editor
Matt Mackall <mpm@selenic.com>
parents:
8990
diff
changeset
|
1278 def commitforceeditor(repo, ctx, subs): |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1279 edittext = [] |
8707
0550dfe4fca1
commit: editor reads file lists from provided context
Matt Mackall <mpm@selenic.com>
parents:
8680
diff
changeset
|
1280 modified, added, removed = ctx.modified(), ctx.added(), ctx.removed() |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1281 if ctx.description(): |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1282 edittext.append(ctx.description()) |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1283 edittext.append("") |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1284 edittext.append("") # Empty line between message and comments. |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1285 edittext.append(_("HG: Enter commit message." |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1286 " Lines beginning with 'HG:' are removed.")) |
8535
5b6a6ed4f185
cmdutil: mark string for translation
Martin Geisler <mg@lazybytes.net>
parents:
8497
diff
changeset
|
1287 edittext.append(_("HG: Leave message empty to abort commit.")) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1288 edittext.append("HG: --") |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1289 edittext.append(_("HG: user: %s") % ctx.user()) |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1290 if ctx.p2(): |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1291 edittext.append(_("HG: branch merge")) |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1292 if ctx.branch(): |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
12973
diff
changeset
|
1293 edittext.append(_("HG: branch '%s'") % ctx.branch()) |
8994
4a1187d3cb00
commit: report modified subrepos in commit editor
Matt Mackall <mpm@selenic.com>
parents:
8990
diff
changeset
|
1294 edittext.extend([_("HG: subrepo %s") % s for s in subs]) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1295 edittext.extend([_("HG: added %s") % f for f in added]) |
8707
0550dfe4fca1
commit: editor reads file lists from provided context
Matt Mackall <mpm@selenic.com>
parents:
8680
diff
changeset
|
1296 edittext.extend([_("HG: changed %s") % f for f in modified]) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1297 edittext.extend([_("HG: removed %s") % f for f in removed]) |
8707
0550dfe4fca1
commit: editor reads file lists from provided context
Matt Mackall <mpm@selenic.com>
parents:
8680
diff
changeset
|
1298 if not added and not modified and not removed: |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1299 edittext.append(_("HG: no files changed")) |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1300 edittext.append("") |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1301 # run editor in the repository root |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1302 olddir = os.getcwd() |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1303 os.chdir(repo.root) |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1304 text = repo.ui.edit("\n".join(edittext), ctx.user()) |
12900
4ff61287bde2
commit: handle missing newline on last commit comment
Matt Mackall <mpm@selenic.com>
parents:
12874
diff
changeset
|
1305 text = re.sub("(?m)^HG:.*(\n|$)", "", text) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1306 os.chdir(olddir) |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1307 |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1308 if not text.strip(): |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1309 raise util.Abort(_("empty commit message")) |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1310 |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
1311 return text |
14297
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1312 |
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1313 def command(table): |
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1314 '''returns a function object bound to table which can be used as |
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1315 a decorator for populating table as a command table''' |
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1316 |
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1317 def cmd(name, options, synopsis=None): |
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1318 def decorator(func): |
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1319 if synopsis: |
14442
5b48ad1e7f1a
cmdutil: make private copies of option lists to avoid sharing monkeypatches
Matt Mackall <mpm@selenic.com>
parents:
14323
diff
changeset
|
1320 table[name] = func, options[:], synopsis |
14297
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1321 else: |
14442
5b48ad1e7f1a
cmdutil: make private copies of option lists to avoid sharing monkeypatches
Matt Mackall <mpm@selenic.com>
parents:
14323
diff
changeset
|
1322 table[name] = func, options[:] |
14297
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1323 return func |
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1324 return decorator |
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1325 |
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
1326 return cmd |