Mercurial > hg
annotate hgext/churn.py @ 12069:7c3c44413bc1 stable
churn: do not crash on malformed lines in alias file
author | Martin Geisler <mg@lazybytes.net> |
---|---|
date | Sun, 29 Aug 2010 22:46:00 +0200 |
parents | 2e7647d25458 |
children | fddacca3202e |
rev | line source |
---|---|
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
1 # churn.py - create a graph of revisions count grouped by template |
3040 | 2 # |
3 # Copyright 2006 Josef "Jeff" Sipek <jeffpc@josefsipek.net> | |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
4 # Copyright 2008 Alexander Solovyov <piranha@piranha.org.ua> |
3040 | 5 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8085
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
10263 | 7 # GNU General Public License version 2 or any later version. |
8228
eee2319c5895
add blank line after copyright notices and after header
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
8 |
8934
9dda4c73fc3b
extensions: change descriptions for extensions providing a few commands
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8894
diff
changeset
|
9 '''command to display statistics about repository history''' |
3040 | 10 |
7051
5f201f711932
i18n, churn: mark string for translation
Martin Geisler <mg@daimi.au.dk>
parents:
6955
diff
changeset
|
11 from mercurial.i18n import _ |
11265
ffd85ab578be
churn: add possibility to include/exclude paths
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11264
diff
changeset
|
12 from mercurial import patch, cmdutil, util, templater, commands |
10905
13a1b2fb7ef2
pylint, pyflakes: remove unused or duplicate imports
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10821
diff
changeset
|
13 import os |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
14 import time, datetime |
4955
9bbc0217209b
churn: get current terminal width if possible
Christian Ebert <blacktrash@gmx.net>
parents:
3963
diff
changeset
|
15 |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
16 def maketemplater(ui, repo, tmpl): |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
17 tmpl = templater.parsestring(tmpl, quoted=False) |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
18 try: |
7762
fece056bf240
add --git option to commands supporting --patch (log, incoming, history, tip)
Jim Correia <jim.correia@pobox.com>
parents:
7626
diff
changeset
|
19 t = cmdutil.changeset_templater(ui, repo, False, None, None, False) |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
20 except SyntaxError, inst: |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
21 raise util.Abort(inst.args[0]) |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
22 t.use_template(tmpl) |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
23 return t |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
24 |
7870
7bcce39e8f07
Returns lines changed for paths specified as arguments correctly.
madhu@madhu
parents:
7762
diff
changeset
|
25 def changedlines(ui, repo, ctx1, ctx2, fns): |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
26 added, removed = 0, 0 |
9321
d7b6429c5ad4
churn: correct output when run in subdirectories
Brendan Cully <brendan@kublai.com>
parents:
9254
diff
changeset
|
27 fmatch = cmdutil.matchfiles(repo, fns) |
7870
7bcce39e8f07
Returns lines changed for paths specified as arguments correctly.
madhu@madhu
parents:
7762
diff
changeset
|
28 diff = ''.join(patch.diff(repo, ctx1.node(), ctx2.node(), fmatch)) |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
29 for l in diff.split('\n'): |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
30 if l.startswith("+") and not l.startswith("+++ "): |
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
31 added += 1 |
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
32 elif l.startswith("-") and not l.startswith("--- "): |
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
33 removed += 1 |
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
34 return (added, removed) |
3050
dd1a142988d3
[churn] progress meter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
3049
diff
changeset
|
35 |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
36 def countrate(ui, repo, amap, *pats, **opts): |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
37 """Calculate stats""" |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
38 if opts.get('dateformat'): |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
39 def getkey(ctx): |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
40 t, tz = ctx.date() |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
41 date = datetime.datetime(*time.gmtime(float(t) - tz)[:6]) |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
42 return date.strftime(opts['dateformat']) |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
43 else: |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
44 tmpl = opts.get('template', '{author|email}') |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
45 tmpl = maketemplater(ui, repo, tmpl) |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
46 def getkey(ctx): |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
47 ui.pushbuffer() |
7369
87158be081b8
cmdutil: use change contexts for cset-printer and cset-templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7308
diff
changeset
|
48 tmpl.show(ctx) |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
49 return ui.popbuffer() |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
50 |
10647
4ba41eebb3a8
churn: use ui.progress instead of --progress
Eric Eisner <ede@mit.edu>
parents:
10282
diff
changeset
|
51 state = {'count': 0} |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
52 rate = {} |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
53 df = False |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
54 if opts.get('date'): |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
55 df = util.matchdate(opts['date']) |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
56 |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9569
diff
changeset
|
57 m = cmdutil.match(repo, pats, opts) |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9655
diff
changeset
|
58 def prep(ctx, fns): |
9654
96fe91be9c1e
walkchangerevs: yield contexts
Matt Mackall <mpm@selenic.com>
parents:
9652
diff
changeset
|
59 rev = ctx.rev() |
9367
1ef630452e0b
cmdutil: use context objects for walkchangerevs()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9321
diff
changeset
|
60 if df and not df(ctx.date()[0]): # doesn't match date format |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9655
diff
changeset
|
61 return |
3049
461573aa02ef
[churn] Ignore merge csets
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
3048
diff
changeset
|
62 |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
63 key = getkey(ctx) |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
64 key = amap.get(key, key) # alias remap |
7070
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
65 if opts.get('changesets'): |
9670
7d56b6ffef72
churn: fix changeset count (broken by 9b127e888640)
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9669
diff
changeset
|
66 rate[key] = (rate.get(key, (0,))[0] + 1, 0) |
7070
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
67 else: |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
68 parents = ctx.parents() |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
69 if len(parents) > 1: |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
70 ui.note(_('Revision %d is a merge, ignoring...\n') % (rev,)) |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9655
diff
changeset
|
71 return |
3040 | 72 |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
73 ctx1 = parents[0] |
7870
7bcce39e8f07
Returns lines changed for paths specified as arguments correctly.
madhu@madhu
parents:
7762
diff
changeset
|
74 lines = changedlines(ui, repo, ctx1, ctx, fns) |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
75 rate[key] = [r + l for r, l in zip(rate.get(key, (0, 0)), lines)] |
3040 | 76 |
10647
4ba41eebb3a8
churn: use ui.progress instead of --progress
Eric Eisner <ede@mit.edu>
parents:
10282
diff
changeset
|
77 state['count'] += 1 |
10700
b2b71c304de0
progress: use a verb in present participle
Martin Geisler <mg@lazybytes.net>
parents:
10647
diff
changeset
|
78 ui.progress(_('analyzing'), state['count'], total=len(repo)) |
3050
dd1a142988d3
[churn] progress meter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
3049
diff
changeset
|
79 |
9665
1de5ebfa5585
walkchangerevs: drop ui arg
Matt Mackall <mpm@selenic.com>
parents:
9662
diff
changeset
|
80 for ctx in cmdutil.walkchangerevs(repo, m, opts, prep): |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9655
diff
changeset
|
81 continue |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9655
diff
changeset
|
82 |
10700
b2b71c304de0
progress: use a verb in present participle
Martin Geisler <mg@lazybytes.net>
parents:
10647
diff
changeset
|
83 ui.progress(_('analyzing'), None) |
3050
dd1a142988d3
[churn] progress meter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
3049
diff
changeset
|
84 |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
85 return rate |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
86 |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
87 |
7070
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
88 def churn(ui, repo, *pats, **opts): |
8823
d9f4c182aeca
churn: improve description
Cédric Duval <cedricduval@free.fr>
parents:
8254
diff
changeset
|
89 '''histogram of changes to the repository |
3040 | 90 |
8823
d9f4c182aeca
churn: improve description
Cédric Duval <cedricduval@free.fr>
parents:
8254
diff
changeset
|
91 This command will display a histogram representing the number |
d9f4c182aeca
churn: improve description
Cédric Duval <cedricduval@free.fr>
parents:
8254
diff
changeset
|
92 of changed lines or revisions, grouped according to the given |
d9f4c182aeca
churn: improve description
Cédric Duval <cedricduval@free.fr>
parents:
8254
diff
changeset
|
93 template. The default template will group changes by author. |
d9f4c182aeca
churn: improve description
Cédric Duval <cedricduval@free.fr>
parents:
8254
diff
changeset
|
94 The --dateformat option may be used to group the results by |
d9f4c182aeca
churn: improve description
Cédric Duval <cedricduval@free.fr>
parents:
8254
diff
changeset
|
95 date instead. |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
96 |
8823
d9f4c182aeca
churn: improve description
Cédric Duval <cedricduval@free.fr>
parents:
8254
diff
changeset
|
97 Statistics are based on the number of changed lines, or |
d9f4c182aeca
churn: improve description
Cédric Duval <cedricduval@free.fr>
parents:
8254
diff
changeset
|
98 alternatively the number of matching revisions if the |
d9f4c182aeca
churn: improve description
Cédric Duval <cedricduval@free.fr>
parents:
8254
diff
changeset
|
99 --changesets option is specified. |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
100 |
9205
83132980e9cd
churn: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
9056
diff
changeset
|
101 Examples:: |
6666
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6598
diff
changeset
|
102 |
7070
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
103 # display count of changed lines for every committer |
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
104 hg churn -t '{author|email}' |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
105 |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
106 # display daily activity graph |
7070
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
107 hg churn -f '%H' -s -c |
6666
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6598
diff
changeset
|
108 |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
109 # display activity of developers by month |
7070
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
110 hg churn -f '%Y-%m' -s -c |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3090
diff
changeset
|
111 |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
112 # display count of lines changed in every year |
7070
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
113 hg churn -f '%Y' -s |
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
114 |
8823
d9f4c182aeca
churn: improve description
Cédric Duval <cedricduval@free.fr>
parents:
8254
diff
changeset
|
115 It is possible to map alternate email addresses to a main address |
9254
db13255617b3
churn: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9205
diff
changeset
|
116 by providing a file using the following format:: |
8843
eb7b247a98ea
kill trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8823
diff
changeset
|
117 |
11264
30c620e48d1c
churn: support spaces in aliases (issue2222)
Alexander Solovyov <piranha@piranha.org.ua>
parents:
10905
diff
changeset
|
118 <alias email> = <actual email> |
8254
f108e89400d8
churn: use .hgchurn in repo root as default map file
Martin Geisler <mg@lazybytes.net>
parents:
8228
diff
changeset
|
119 |
9254
db13255617b3
churn: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9205
diff
changeset
|
120 Such a file may be specified with the --aliases option, otherwise |
db13255617b3
churn: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9205
diff
changeset
|
121 a .hgchurn file will be looked for in the working directory root. |
8254
f108e89400d8
churn: use .hgchurn in repo root as default map file
Martin Geisler <mg@lazybytes.net>
parents:
8228
diff
changeset
|
122 ''' |
3040 | 123 def pad(s, l): |
6759 | 124 return (s + " " * l)[:l] |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3090
diff
changeset
|
125 |
3040 | 126 amap = {} |
3045
c0be8990e819
Add revision range support
Brendan Cully <brendan@kublai.com>
parents:
3043
diff
changeset
|
127 aliases = opts.get('aliases') |
8254
f108e89400d8
churn: use .hgchurn in repo root as default map file
Martin Geisler <mg@lazybytes.net>
parents:
8228
diff
changeset
|
128 if not aliases and os.path.exists(repo.wjoin('.hgchurn')): |
f108e89400d8
churn: use .hgchurn in repo root as default map file
Martin Geisler <mg@lazybytes.net>
parents:
8228
diff
changeset
|
129 aliases = repo.wjoin('.hgchurn') |
3040 | 130 if aliases: |
6759 | 131 for l in open(aliases, "r"): |
12069
7c3c44413bc1
churn: do not crash on malformed lines in alias file
Martin Geisler <mg@lazybytes.net>
parents:
12068
diff
changeset
|
132 try: |
7c3c44413bc1
churn: do not crash on malformed lines in alias file
Martin Geisler <mg@lazybytes.net>
parents:
12068
diff
changeset
|
133 alias, actual = l.split('=' in l and '=' or None, 1) |
7c3c44413bc1
churn: do not crash on malformed lines in alias file
Martin Geisler <mg@lazybytes.net>
parents:
12068
diff
changeset
|
134 amap[alias.strip()] = actual.strip() |
7c3c44413bc1
churn: do not crash on malformed lines in alias file
Martin Geisler <mg@lazybytes.net>
parents:
12068
diff
changeset
|
135 except ValueError: |
7c3c44413bc1
churn: do not crash on malformed lines in alias file
Martin Geisler <mg@lazybytes.net>
parents:
12068
diff
changeset
|
136 l = l.strip() |
7c3c44413bc1
churn: do not crash on malformed lines in alias file
Martin Geisler <mg@lazybytes.net>
parents:
12068
diff
changeset
|
137 if l: |
7c3c44413bc1
churn: do not crash on malformed lines in alias file
Martin Geisler <mg@lazybytes.net>
parents:
12068
diff
changeset
|
138 ui.warn(_("skipping malformed alias: %s\n" % l)) |
12068
2e7647d25458
churn: do not crash on empty lines in alias file
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
11321
diff
changeset
|
139 continue |
3040 | 140 |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
141 rate = countrate(ui, repo, amap, *pats, **opts).items() |
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
142 if not rate: |
5588
083b6e3142a2
churn: avoid division by zero
Matt Mackall <mpm@selenic.com>
parents:
5482
diff
changeset
|
143 return |
3040 | 144 |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
145 sortkey = ((not opts.get('sort')) and (lambda x: -sum(x[1])) or None) |
9032
1fa80c5428b8
compat: use 'key' argument instead of 'cmp' when sorting a list
Alejandro Santos <alejolp@alejolp.com>
parents:
8934
diff
changeset
|
146 rate.sort(key=sortkey) |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
147 |
9388
f7968bba2307
churn: issue833 was reintroduced in 9bc46d069a76, correct it and add a test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8934
diff
changeset
|
148 # Be careful not to have a zero maxcount (issue833) |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
149 maxcount = float(max(sum(v) for k, v in rate)) or 1.0 |
9390
637f2726ec7f
churn: use genexps now that we dropped 2.3 compatibility
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9389
diff
changeset
|
150 maxname = max(len(k) for k, v in rate) |
3040 | 151 |
7547
4949729ee9ee
python implementation of diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7369
diff
changeset
|
152 ttywidth = util.termwidth() |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9390
diff
changeset
|
153 ui.debug("assuming %i character terminal\n" % ttywidth) |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
154 width = ttywidth - maxname - 2 - 2 - 2 |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
155 |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
156 if opts.get('diffstat'): |
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
157 width -= 15 |
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
158 def format(name, (added, removed)): |
11310
ac873ecfc3c2
Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents:
11302
diff
changeset
|
159 return "%s %15s %s%s\n" % (pad(name, maxname), |
ac873ecfc3c2
Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents:
11302
diff
changeset
|
160 '+%d/-%d' % (added, removed), |
10821
a6ac91c313af
churn: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10700
diff
changeset
|
161 ui.label('+' * charnum(added), |
a6ac91c313af
churn: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10700
diff
changeset
|
162 'diffstat.inserted'), |
a6ac91c313af
churn: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10700
diff
changeset
|
163 ui.label('-' * charnum(removed), |
a6ac91c313af
churn: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents:
10700
diff
changeset
|
164 'diffstat.deleted')) |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
165 else: |
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
166 width -= 6 |
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
167 def format(name, count): |
11310
ac873ecfc3c2
Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents:
11302
diff
changeset
|
168 return "%s %6d %s\n" % (pad(name, maxname), sum(count), |
ac873ecfc3c2
Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents:
11302
diff
changeset
|
169 '*' * charnum(sum(count))) |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
170 |
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
171 def charnum(count): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
172 return int(round(count * width / maxcount)) |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
173 |
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
174 for name, count in rate: |
11310
ac873ecfc3c2
Backed out changeset: e1dde7363601
Steve Borho <steve@borho.org>
parents:
11302
diff
changeset
|
175 ui.write(format(name, count)) |
6223
bab6c8f2bb1a
churn: show comitter email addresses unclipped (bug 1023)
Stephen Deasey <sdeasey@gmail.com>
parents:
6212
diff
changeset
|
176 |
3040 | 177 |
178 cmdtable = { | |
7070
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
179 "churn": |
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
180 (churn, |
11321
40c06bbf58be
help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
11310
diff
changeset
|
181 [('r', 'rev', [], |
40c06bbf58be
help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
11310
diff
changeset
|
182 _('count rate for the specified revision or range'), _('REV')), |
40c06bbf58be
help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
11310
diff
changeset
|
183 ('d', 'date', '', |
40c06bbf58be
help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
11310
diff
changeset
|
184 _('count rate for revisions matching date spec'), _('DATE')), |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
185 ('t', 'template', '{author|email}', |
11321
40c06bbf58be
help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
11310
diff
changeset
|
186 _('template to group changesets'), _('TEMPLATE')), |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
187 ('f', 'dateformat', '', |
11321
40c06bbf58be
help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
11310
diff
changeset
|
188 _('strftime-compatible format for grouping by date'), _('FORMAT')), |
7070
2627ef59195d
churn and stats commands merged
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7065
diff
changeset
|
189 ('c', 'changesets', False, _('count rate by number of changesets')), |
7065
9bc46d069a76
churn: generalisation, now it is possible to see statistics grouped by custom template
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7051
diff
changeset
|
190 ('s', 'sort', False, _('sort by key (default: sort by count)')), |
9669
9b127e888640
churn: ability to display added/removed lines separately
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9665
diff
changeset
|
191 ('', 'diffstat', False, _('display added/removed lines separately')), |
11321
40c06bbf58be
help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
11310
diff
changeset
|
192 ('', 'aliases', '', |
40c06bbf58be
help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
11310
diff
changeset
|
193 _('file with email aliases'), _('FILE')), |
11265
ffd85ab578be
churn: add possibility to include/exclude paths
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11264
diff
changeset
|
194 ] + commands.walkopts, |
10647
4ba41eebb3a8
churn: use ui.progress instead of --progress
Eric Eisner <ede@mit.edu>
parents:
10282
diff
changeset
|
195 _("hg churn [-d DATE] [-r REV] [--aliases FILE] [FILE]")), |
3040 | 196 } |