mirror of
https://github.com/git/git.git
synced 2025-12-23 12:14:22 +01:00
shortlog: accept --date-related options
Prepare for a future patch which will introduce arbitrary pretty formats via the `--group` argument. To allow additional customizability (for example, to support something like `git shortlog -s --group='%aD' --date='format:%Y-%m' ...` (which groups commits by the datestring 'YYYY-mm' according to author date), we must store off the `--date` parsed from calling `parse_revision_opt()`. Note that this also affects custom output `--format` strings in `git shortlog`. Though this is a behavior change, this is arguably fixing a long-standing bug (ie., that `--format` strings are not affected by `--date` specifiers as they should be). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
45c9f05c44
commit
251554c269
@@ -47,6 +47,11 @@ OPTIONS
|
|||||||
|
|
||||||
Each pretty-printed commit will be rewrapped before it is shown.
|
Each pretty-printed commit will be rewrapped before it is shown.
|
||||||
|
|
||||||
|
--date=<format>::
|
||||||
|
Show dates formatted according to the given date string. (See
|
||||||
|
the `--date` option in the "Commit Formatting" section of
|
||||||
|
linkgit:git-log[1]).
|
||||||
|
|
||||||
--group=<type>::
|
--group=<type>::
|
||||||
Group commits based on `<type>`. If no `--group` option is
|
Group commits based on `<type>`. If no `--group` option is
|
||||||
specified, the default is `author`. `<type>` is one of:
|
specified, the default is `author`. `<type>` is one of:
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
|
|||||||
ctx.fmt = CMIT_FMT_USERFORMAT;
|
ctx.fmt = CMIT_FMT_USERFORMAT;
|
||||||
ctx.abbrev = log->abbrev;
|
ctx.abbrev = log->abbrev;
|
||||||
ctx.print_email_subject = 1;
|
ctx.print_email_subject = 1;
|
||||||
ctx.date_mode.type = DATE_NORMAL;
|
ctx.date_mode = log->date_mode;
|
||||||
ctx.output_encoding = get_log_output_encoding();
|
ctx.output_encoding = get_log_output_encoding();
|
||||||
|
|
||||||
if (!log->summary) {
|
if (!log->summary) {
|
||||||
@@ -407,6 +407,7 @@ parse_done:
|
|||||||
log.user_format = rev.commit_format == CMIT_FMT_USERFORMAT;
|
log.user_format = rev.commit_format == CMIT_FMT_USERFORMAT;
|
||||||
log.abbrev = rev.abbrev;
|
log.abbrev = rev.abbrev;
|
||||||
log.file = rev.diffopt.file;
|
log.file = rev.diffopt.file;
|
||||||
|
log.date_mode = rev.date_mode;
|
||||||
|
|
||||||
if (!log.groups)
|
if (!log.groups)
|
||||||
log.groups = SHORTLOG_GROUP_AUTHOR;
|
log.groups = SHORTLOG_GROUP_AUTHOR;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define SHORTLOG_H
|
#define SHORTLOG_H
|
||||||
|
|
||||||
#include "string-list.h"
|
#include "string-list.h"
|
||||||
|
#include "date.h"
|
||||||
|
|
||||||
struct commit;
|
struct commit;
|
||||||
|
|
||||||
@@ -15,6 +16,7 @@ struct shortlog {
|
|||||||
int in2;
|
int in2;
|
||||||
int user_format;
|
int user_format;
|
||||||
int abbrev;
|
int abbrev;
|
||||||
|
struct date_mode date_mode;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
SHORTLOG_GROUP_AUTHOR = (1 << 0),
|
SHORTLOG_GROUP_AUTHOR = (1 << 0),
|
||||||
|
|||||||
@@ -83,6 +83,13 @@ test_expect_success 'pretty format' '
|
|||||||
test_cmp expect log.predictable
|
test_cmp expect log.predictable
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'pretty format (with --date)' '
|
||||||
|
sed "s/SUBJECT/2005-04-07 OBJECT_NAME/" expect.template >expect &&
|
||||||
|
git shortlog --format="%ad %H" --date=short HEAD >log &&
|
||||||
|
fuzz log >log.predictable &&
|
||||||
|
test_cmp expect log.predictable
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success '--abbrev' '
|
test_expect_success '--abbrev' '
|
||||||
sed s/SUBJECT/OBJID/ expect.template >expect &&
|
sed s/SUBJECT/OBJID/ expect.template >expect &&
|
||||||
git shortlog --format="%h" --abbrev=35 HEAD >log &&
|
git shortlog --format="%h" --abbrev=35 HEAD >log &&
|
||||||
|
|||||||
Reference in New Issue
Block a user