63d24fa0b0
Now that shortlog supports reading from trailers, it can be useful to combine counts from multiple trailers, or between trailers and authors. This can be done manually by post-processing the output from multiple runs, but it's non-trivial to make sure that each name/commit pair is counted only once. This patch teaches shortlog to accept multiple --group options on the command line, and pull data from all of them. That makes it possible to run: git shortlog -ns --group=author --group=trailer:co-authored-by to get a shortlog that counts authors and co-authors equally. The implementation is mostly straightforward. The "group" enum becomes a bitfield, and the trailer key becomes a list. I didn't bother implementing the multi-group semantics for reading from stdin. It would be possible to do, but the existing matching code makes it awkward, and I doubt anybody cares. The duplicate suppression we used for trailers now covers authors and committers as well (though in non-trailer single-group mode we can skip the hash insertion and lookup, since we only see one value per commit). There is one subtlety: we now care about the case when no group bit is set (in which case we default to showing the author). The caller in builtin/log.c needs to be adapted to ask explicitly for authors, rather than relying on shortlog_init(). It would be possible with some gymnastics to make this keep working as-is, but it's not worth it for a single caller. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
123 lines
4.0 KiB
Plaintext
123 lines
4.0 KiB
Plaintext
git-shortlog(1)
|
|
===============
|
|
|
|
NAME
|
|
----
|
|
git-shortlog - Summarize 'git log' output
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[verse]
|
|
'git shortlog' [<options>] [<revision range>] [[--] <path>...]
|
|
git log --pretty=short | 'git shortlog' [<options>]
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
Summarizes 'git log' output in a format suitable for inclusion
|
|
in release announcements. Each commit will be grouped by author and title.
|
|
|
|
Additionally, "[PATCH]" will be stripped from the commit description.
|
|
|
|
If no revisions are passed on the command line and either standard input
|
|
is not a terminal or there is no current branch, 'git shortlog' will
|
|
output a summary of the log read from standard input, without
|
|
reference to the current repository.
|
|
|
|
OPTIONS
|
|
-------
|
|
|
|
-n::
|
|
--numbered::
|
|
Sort output according to the number of commits per author instead
|
|
of author alphabetic order.
|
|
|
|
-s::
|
|
--summary::
|
|
Suppress commit description and provide a commit count summary only.
|
|
|
|
-e::
|
|
--email::
|
|
Show the email address of each author.
|
|
|
|
--format[=<format>]::
|
|
Instead of the commit subject, use some other information to
|
|
describe each commit. '<format>' can be any string accepted
|
|
by the `--format` option of 'git log', such as '* [%h] %s'.
|
|
(See the "PRETTY FORMATS" section of linkgit:git-log[1].)
|
|
|
|
Each pretty-printed commit will be rewrapped before it is shown.
|
|
|
|
--group=<type>::
|
|
Group commits based on `<type>`. If no `--group` option is
|
|
specified, the default is `author`. `<type>` is one of:
|
|
+
|
|
--
|
|
- `author`, commits are grouped by author
|
|
- `committer`, commits are grouped by committer (the same as `-c`)
|
|
- `trailer:<field>`, the `<field>` is interpreted as a case-insensitive
|
|
commit message trailer (see linkgit:git-interpret-trailers[1]). For
|
|
example, if your project uses `Reviewed-by` trailers, you might want
|
|
to see who has been reviewing with
|
|
`git shortlog -ns --group=trailer:reviewed-by`.
|
|
+
|
|
Note that commits that do not include the trailer will not be counted.
|
|
Likewise, commits with multiple trailers (e.g., multiple signoffs) may
|
|
be counted more than once (but only once per unique trailer value in
|
|
that commit).
|
|
+
|
|
Shortlog will attempt to parse each trailer value as a `name <email>`
|
|
identity. If successful, the mailmap is applied and the email is omitted
|
|
unless the `--email` option is specified. If the value cannot be parsed
|
|
as an identity, it will be taken literally and completely.
|
|
--
|
|
+
|
|
If `--group` is specified multiple times, commits are counted under each
|
|
value (but again, only once per unique value in that commit). For
|
|
example, `git shortlog --group=author --group=trailer:co-authored-by`
|
|
counts both authors and co-authors.
|
|
|
|
-c::
|
|
--committer::
|
|
This is an alias for `--group=committer`.
|
|
|
|
-w[<width>[,<indent1>[,<indent2>]]]::
|
|
Linewrap the output by wrapping each line at `width`. The first
|
|
line of each entry is indented by `indent1` spaces, and the second
|
|
and subsequent lines are indented by `indent2` spaces. `width`,
|
|
`indent1`, and `indent2` default to 76, 6 and 9 respectively.
|
|
+
|
|
If width is `0` (zero) then indent the lines of the output without wrapping
|
|
them.
|
|
|
|
<revision range>::
|
|
Show only commits in the specified revision range. When no
|
|
<revision range> is specified, it defaults to `HEAD` (i.e. the
|
|
whole history leading to the current commit). `origin..HEAD`
|
|
specifies all the commits reachable from the current commit
|
|
(i.e. `HEAD`), but not from `origin`. For a complete list of
|
|
ways to spell <revision range>, see the "Specifying Ranges"
|
|
section of linkgit:gitrevisions[7].
|
|
|
|
[--] <path>...::
|
|
Consider only commits that are enough to explain how the files
|
|
that match the specified paths came to be.
|
|
+
|
|
Paths may need to be prefixed with `--` to separate them from
|
|
options or the revision range, when confusion arises.
|
|
|
|
:git-shortlog: 1
|
|
include::rev-list-options.txt[]
|
|
|
|
MAPPING AUTHORS
|
|
---------------
|
|
|
|
The `.mailmap` feature is used to coalesce together commits by the same
|
|
person in the shortlog, where their name and/or email address was
|
|
spelled differently.
|
|
|
|
include::mailmap.txt[]
|
|
|
|
GIT
|
|
---
|
|
Part of the linkgit:git[1] suite
|