Mercurial > hg
annotate hgext/color.py @ 9693:c40a1ee20aa5
transaction: always remove empty journal on abort
When transactions without entries were aborted, the journal (of size 0) was not
unlinked, which prevents subsequent operations until hg recover is run on the
repository.
We also make sure the journal is unlinked when committing, even if the provided
hook doesn't do so.
author | Sune Foldager <cryo@cyanite.org> |
---|---|
date | Mon, 02 Nov 2009 10:19:14 +0100 |
parents | 9b99f158348a |
children | d29bd00bbc50 |
rev | line source |
---|---|
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
1 # color.py color output for the status and qseries commands |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
2 # |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
3 # Copyright (C) 2007 Kevin Christen <kevin.christen@gmail.com> |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
4 # |
5792
956e01c31914
color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents:
5787
diff
changeset
|
5 # This program is free software; you can redistribute it and/or modify it |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
6 # under the terms of the GNU General Public License as published by the |
5792
956e01c31914
color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents:
5787
diff
changeset
|
7 # Free Software Foundation; either version 2 of the License, or (at your |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
8 # option) any later version. |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
9 # |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
10 # This program is distributed in the hope that it will be useful, but |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
11 # WITHOUT ANY WARRANTY; without even the implied warranty of |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
13 # Public License for more details. |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
14 # |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
15 # You should have received a copy of the GNU General Public License along |
5792
956e01c31914
color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents:
5787
diff
changeset
|
16 # with this program; if not, write to the Free Software Foundation, Inc., |
956e01c31914
color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents:
5787
diff
changeset
|
17 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
18 |
8894
868670dbc237
extensions: improve the consistency of synopses
Cédric Duval <cedricduval@free.fr>
parents:
8866
diff
changeset
|
19 '''colorize output from some commands |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
20 |
7988
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
21 This extension modifies the status command to add color to its output |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
22 to reflect file status, the qseries command to add color to reflect |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
23 patch status (applied, unapplied, missing), and to diff-related |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
24 commands to highlight additions, removals, diff headers, and trailing |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
25 whitespace. |
7457
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
26 |
7988
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
27 Other effects in addition to color, like bold and underlined text, are |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
28 also available. Effects are rendered with the ECMA-48 SGR control |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
29 function (aka ANSI escape codes). This module also provides the |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
30 render_text function, which can be used to add effects to any text. |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
31 |
9206
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
32 Default effects may be overridden from the .hgrc file:: |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
33 |
9206
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
34 [color] |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
35 status.modified = blue bold underline red_background |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
36 status.added = green bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
37 status.removed = red bold blue_background |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
38 status.deleted = cyan bold underline |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
39 status.unknown = magenta bold underline |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
40 status.ignored = black bold |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
41 |
9206
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
42 # 'none' turns off all effects |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
43 status.clean = none |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
44 status.copied = none |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
45 |
9206
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
46 qseries.applied = blue bold underline |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
47 qseries.unapplied = black bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
48 qseries.missing = red bold |
7456 | 49 |
9206
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
50 diff.diffline = bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
51 diff.extended = cyan bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
52 diff.file_a = red bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
53 diff.file_b = green bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
54 diff.hunk = magenta |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
55 diff.deleted = red |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
56 diff.inserted = green |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
57 diff.changed = white |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
58 diff.trailingwhitespace = bold red_background |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
59 ''' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
60 |
8623
0c159aa7b329
color: replace re.split with ui.configlist
Martin Geisler <mg@lazybytes.net>
parents:
8622
diff
changeset
|
61 import os, sys |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
62 |
8963
a4ceae3aa7be
color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents:
8945
diff
changeset
|
63 from mercurial import cmdutil, commands, extensions, error |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
64 from mercurial.i18n import _ |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
65 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
66 # start and stop parameters for effects |
7459
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
67 _effect_params = {'none': 0, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
68 'black': 30, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
69 'red': 31, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
70 'green': 32, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
71 'yellow': 33, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
72 'blue': 34, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
73 'magenta': 35, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
74 'cyan': 36, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
75 'white': 37, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
76 'bold': 1, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
77 'italic': 3, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
78 'underline': 4, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
79 'inverse': 7, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
80 'black_background': 40, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
81 'red_background': 41, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
82 'green_background': 42, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
83 'yellow_background': 43, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
84 'blue_background': 44, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
85 'purple_background': 45, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
86 'cyan_background': 46, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
87 'white_background': 47} |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
88 |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
89 def render_effects(text, effects): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
90 'Wrap text in commands to turn on each effect.' |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
91 start = [str(_effect_params[e]) for e in ['none'] + effects] |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
92 start = '\033[' + ';'.join(start) + 'm' |
7459
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
93 stop = '\033[' + str(_effect_params['none']) + 'm' |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
94 return ''.join([start, text, stop]) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
95 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
96 def colorstatus(orig, ui, repo, *pats, **opts): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
97 '''run the status command with colored output''' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
98 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
99 delimiter = opts['print0'] and '\0' or '\n' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
100 |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
101 nostatus = opts.get('no_status') |
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
102 opts['no_status'] = False |
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
103 # run status and capture its output |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
104 ui.pushbuffer() |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
105 retval = orig(ui, repo, *pats, **opts) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
106 # filter out empty strings |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
107 lines_with_status = [ line for line in ui.popbuffer().split(delimiter) if line ] |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
108 |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
109 if nostatus: |
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
110 lines = [l[2:] for l in lines_with_status] |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
111 else: |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
112 lines = lines_with_status |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
113 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
114 # apply color to output and display it |
8624
2b3dec0ef3ae
replace xrange(0, n) with xrange(n)
Martin Geisler <mg@lazybytes.net>
parents:
8623
diff
changeset
|
115 for i in xrange(len(lines)): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
116 status = _status_abbreviations[lines_with_status[i][0]] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
117 effects = _status_effects[status] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
118 if effects: |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
119 lines[i] = render_effects(lines[i], effects) |
7455 | 120 ui.write(lines[i] + delimiter) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
121 return retval |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
122 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
123 _status_abbreviations = { 'M': 'modified', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
124 'A': 'added', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
125 'R': 'removed', |
5796
7705d308eb5e
Fix status char in color extension for deleted (missing) files.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5792
diff
changeset
|
126 '!': 'deleted', |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
127 '?': 'unknown', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
128 'I': 'ignored', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
129 'C': 'clean', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
130 ' ': 'copied', } |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
131 |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
132 _status_effects = { 'modified': ['blue', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
133 'added': ['green', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
134 'removed': ['red', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
135 'deleted': ['cyan', 'bold', 'underline'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
136 'unknown': ['magenta', 'bold', 'underline'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
137 'ignored': ['black', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
138 'clean': ['none'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
139 'copied': ['none'], } |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
140 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
141 def colorqseries(orig, ui, repo, *dummy, **opts): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
142 '''run the qseries command with colored output''' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
143 ui.pushbuffer() |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
144 retval = orig(ui, repo, **opts) |
9311
e37e9904bf10
color: simplify & improve colorization of qseries
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9255
diff
changeset
|
145 patchlines = ui.popbuffer().splitlines() |
e37e9904bf10
color: simplify & improve colorization of qseries
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9255
diff
changeset
|
146 patchnames = repo.mq.series |
6855
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
147 |
9374
ad73f6986ef5
color: no need for itertools, zip() is good enough
Patrick Mezard <pmezard@gmail.com>
parents:
9311
diff
changeset
|
148 for patch, patchname in zip(patchlines, patchnames): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
149 if opts['missing']: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
150 effects = _patch_effects['missing'] |
6855
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
151 # Determine if patch is applied. |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
152 elif [ applied for applied in repo.mq.applied |
6855
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
153 if patchname == applied.name ]: |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
154 effects = _patch_effects['applied'] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
155 else: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
156 effects = _patch_effects['unapplied'] |
9017
c24c9ce0cdcf
color: don't highlight the summary part of the qseries command
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
8963
diff
changeset
|
157 |
c24c9ce0cdcf
color: don't highlight the summary part of the qseries command
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
8963
diff
changeset
|
158 patch = patch.replace(patchname, render_effects(patchname, effects), 1) |
c24c9ce0cdcf
color: don't highlight the summary part of the qseries command
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
8963
diff
changeset
|
159 ui.write(patch + '\n') |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
160 return retval |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
161 |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
162 _patch_effects = { 'applied': ['blue', 'bold', 'underline'], |
9520
bcc27ee3a37b
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
8963
diff
changeset
|
163 'missing': ['red', 'bold'], |
bcc27ee3a37b
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
8963
diff
changeset
|
164 'unapplied': ['black', 'bold'], } |
9551
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
165 def colorwrap(orig, *args): |
7456 | 166 '''wrap ui.write for colored diff output''' |
9551
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
167 def _colorize(s): |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
168 lines = s.split('\n') |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
169 for i, line in enumerate(lines): |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
170 stripline = line |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
171 if line and line[0] in '+-': |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
172 # highlight trailing whitespace, but only in changed lines |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
173 stripline = line.rstrip() |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
174 for prefix, style in _diff_prefixes: |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
175 if stripline.startswith(prefix): |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
176 lines[i] = render_effects(stripline, _diff_effects[style]) |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
177 break |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
178 if line != stripline: |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
179 lines[i] += render_effects( |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
180 line[len(stripline):], _diff_effects['trailingwhitespace']) |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
181 return '\n'.join(lines) |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
182 orig(*[_colorize(s) for s in args]) |
7456 | 183 |
184 def colorshowpatch(orig, self, node): | |
185 '''wrap cmdutil.changeset_printer.showpatch with colored output''' | |
186 oldwrite = extensions.wrapfunction(self.ui, 'write', colorwrap) | |
187 try: | |
188 orig(self, node) | |
189 finally: | |
190 self.ui.write = oldwrite | |
191 | |
9641 | 192 def colordiffstat(orig, s): |
193 lines = s.split('\n') | |
194 for i, line in enumerate(lines): | |
195 if line and line[-1] in '+-': | |
196 name, graph = line.rsplit(' ', 1) | |
197 graph = graph.replace('-', | |
198 render_effects('-', _diff_effects['deleted'])) | |
199 graph = graph.replace('+', | |
200 render_effects('+', _diff_effects['inserted'])) | |
201 lines[i] = ' '.join([name, graph]) | |
202 orig('\n'.join(lines)) | |
203 | |
7456 | 204 def colordiff(orig, ui, repo, *pats, **opts): |
205 '''run the diff command with colored output''' | |
9641 | 206 if opts.get('stat'): |
207 wrapper = colordiffstat | |
208 else: | |
209 wrapper = colorwrap | |
210 oldwrite = extensions.wrapfunction(ui, 'write', wrapper) | |
7456 | 211 try: |
212 orig(ui, repo, *pats, **opts) | |
213 finally: | |
214 ui.write = oldwrite | |
215 | |
216 _diff_prefixes = [('diff', 'diffline'), | |
217 ('copy', 'extended'), | |
218 ('rename', 'extended'), | |
7539
92c373f8135f
color: fix colorization of the 'old mode' git diff metadata
Gilles Moris <gilles.moris@free.fr>
parents:
7459
diff
changeset
|
219 ('old', 'extended'), |
7456 | 220 ('new', 'extended'), |
221 ('deleted', 'extended'), | |
222 ('---', 'file_a'), | |
223 ('+++', 'file_b'), | |
224 ('@', 'hunk'), | |
225 ('-', 'deleted'), | |
226 ('+', 'inserted')] | |
227 | |
8630
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
228 _diff_effects = {'diffline': ['bold'], |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
229 'extended': ['cyan', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
230 'file_a': ['red', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
231 'file_b': ['green', 'bold'], |
8630
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
232 'hunk': ['magenta'], |
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
233 'deleted': ['red'], |
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
234 'inserted': ['green'], |
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
235 'changed': ['white'], |
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
236 'trailingwhitespace': ['bold', 'red_background']} |
7456 | 237 |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
238 def uisetup(ui): |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
239 '''Initialize the extension.''' |
7456 | 240 _setupcmd(ui, 'diff', commands.table, colordiff, _diff_effects) |
241 _setupcmd(ui, 'incoming', commands.table, None, _diff_effects) | |
242 _setupcmd(ui, 'log', commands.table, None, _diff_effects) | |
243 _setupcmd(ui, 'outgoing', commands.table, None, _diff_effects) | |
244 _setupcmd(ui, 'tip', commands.table, None, _diff_effects) | |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
245 _setupcmd(ui, 'status', commands.table, colorstatus, _status_effects) |
8963
a4ceae3aa7be
color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents:
8945
diff
changeset
|
246 |
8278
1f9787de17d9
color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents:
7988
diff
changeset
|
247 try: |
1f9787de17d9
color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents:
7988
diff
changeset
|
248 mq = extensions.find('mq') |
9412
3a78bbc57660
color: do all setup in uisetup
Martin Geisler <mg@lazybytes.net>
parents:
9374
diff
changeset
|
249 _setupcmd(ui, 'qdiff', mq.cmdtable, colordiff, _diff_effects) |
3a78bbc57660
color: do all setup in uisetup
Martin Geisler <mg@lazybytes.net>
parents:
9374
diff
changeset
|
250 _setupcmd(ui, 'qseries', mq.cmdtable, colorqseries, _patch_effects) |
8278
1f9787de17d9
color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents:
7988
diff
changeset
|
251 except KeyError: |
1f9787de17d9
color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents:
7988
diff
changeset
|
252 # The mq extension is not enabled |
1f9787de17d9
color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents:
7988
diff
changeset
|
253 pass |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
254 |
9550
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
255 try: |
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
256 rec = extensions.find('record') |
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
257 _setupcmd(ui, 'record', rec.cmdtable, colordiff, _diff_effects) |
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
258 except KeyError: |
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
259 # The record extension is not enabled |
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
260 pass |
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
261 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
262 def _setupcmd(ui, cmd, table, func, effectsmap): |
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
263 '''patch in command to command table and load effect map''' |
7455 | 264 def nocolor(orig, *args, **opts): |
265 | |
266 if (opts['no_color'] or opts['color'] == 'never' or | |
267 (opts['color'] == 'auto' and (os.environ.get('TERM') == 'dumb' | |
268 or not sys.__stdout__.isatty()))): | |
269 return orig(*args, **opts) | |
270 | |
7456 | 271 oldshowpatch = extensions.wrapfunction(cmdutil.changeset_printer, |
272 'showpatch', colorshowpatch) | |
273 try: | |
274 if func is not None: | |
275 return func(orig, *args, **opts) | |
276 return orig(*args, **opts) | |
277 finally: | |
278 cmdutil.changeset_printer.showpatch = oldshowpatch | |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
279 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
280 entry = extensions.wrapcommand(table, cmd, nocolor) |
7455 | 281 entry[1].extend([ |
282 ('', 'color', 'auto', _("when to colorize (always, auto, or never)")), | |
9478
32ec70799172
color: mark --no-color as deprecated (--color=never has the same effect)
Brodie Rao <me+hg@dackz.net>
parents:
9412
diff
changeset
|
283 ('', 'no-color', None, _("don't colorize output (DEPRECATED)")), |
7455 | 284 ]) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
285 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
286 for status in effectsmap: |
8945
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
287 configkey = cmd + '.' + status |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
288 effects = ui.configlist('color', configkey) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
289 if effects: |
8945
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
290 good = [] |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
291 for e in effects: |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
292 if e in _effect_params: |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
293 good.append(e) |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
294 else: |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
295 ui.warn(_("ignoring unknown color/effect %r " |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
296 "(configured in color.%s)\n") |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
297 % (e, configkey)) |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
298 effectsmap[status] = good |