make oneline reflog dates more consistent with multiline format
The multiline reflog format (e.g., as shown by "git log -g")
will show HEAD@{<date>} rather than HEAD@{<count>} in two
situations:
1. If the user gave branch@{<date>} syntax to specify the
reflog
2. If the user gave a --date=<format> specifier
It uses the "normal" date format in case 1, and the
user-specified format in case 2.
The oneline reflog format (e.g., "git reflog show" or "git
log -g --oneline") will show the date in the same two
circumstances. However, it _always_ shows the date as a
relative date, and it always ignores the timezone.
In case 2, it seems ridiculous to trigger the date but use a
format totally different from what the user requested.
For case 1, it is arguable that the user might want to see
the relative date by default; however, the multiline version
shows the normal format.
This patch does three things:
- refactors the "relative_date" parameter to
show_reflog_message to be an actual date_mode enum,
since this is how it is used (it is passed to show_date)
- uses the passed date_mode parameter in the oneline
format (making it consistent with the multiline format)
- does not ignore the timezone parameter in oneline mode
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
parent
570ccad33e
commit
cd4371208a
|
|
@ -242,7 +242,7 @@ void fake_reflog_parent(struct reflog_walk_info *info, struct commit *commit)
|
|||
}
|
||||
|
||||
void show_reflog_message(struct reflog_walk_info* info, int oneline,
|
||||
int relative_date)
|
||||
enum date_mode dmode)
|
||||
{
|
||||
if (info && info->last_commit_reflog) {
|
||||
struct commit_reflog *commit_reflog = info->last_commit_reflog;
|
||||
|
|
@ -251,8 +251,10 @@ void show_reflog_message(struct reflog_walk_info* info, int oneline,
|
|||
info = &commit_reflog->reflogs->items[commit_reflog->recno+1];
|
||||
if (oneline) {
|
||||
printf("%s@{", commit_reflog->reflogs->ref);
|
||||
if (commit_reflog->flag || relative_date)
|
||||
printf("%s", show_date(info->timestamp, 0, 1));
|
||||
if (commit_reflog->flag || dmode)
|
||||
printf("%s", show_date(info->timestamp,
|
||||
info->tz,
|
||||
dmode));
|
||||
else
|
||||
printf("%d", commit_reflog->reflogs->nr
|
||||
- 2 - commit_reflog->recno);
|
||||
|
|
@ -260,10 +262,10 @@ void show_reflog_message(struct reflog_walk_info* info, int oneline,
|
|||
}
|
||||
else {
|
||||
printf("Reflog: %s@{", commit_reflog->reflogs->ref);
|
||||
if (commit_reflog->flag || relative_date)
|
||||
if (commit_reflog->flag || dmode)
|
||||
printf("%s", show_date(info->timestamp,
|
||||
info->tz,
|
||||
relative_date));
|
||||
dmode));
|
||||
else
|
||||
printf("%d", commit_reflog->reflogs->nr
|
||||
- 2 - commit_reflog->recno);
|
||||
|
|
|
|||
|
|
@ -1,11 +1,14 @@
|
|||
#ifndef REFLOG_WALK_H
|
||||
#define REFLOG_WALK_H
|
||||
|
||||
#include "cache.h"
|
||||
|
||||
extern void init_reflog_walk(struct reflog_walk_info** info);
|
||||
extern int add_reflog_for_walk(struct reflog_walk_info *info,
|
||||
struct commit *commit, const char *name);
|
||||
extern void fake_reflog_parent(struct reflog_walk_info *info,
|
||||
struct commit *commit);
|
||||
extern void show_reflog_message(struct reflog_walk_info *info, int, int);
|
||||
extern void show_reflog_message(struct reflog_walk_info *info, int,
|
||||
enum date_mode);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -0,0 +1,67 @@
|
|||
#!/bin/sh
|
||||
|
||||
test_description='Test reflog display routines'
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo content >file &&
|
||||
git add file &&
|
||||
test_tick &&
|
||||
git commit -m one
|
||||
'
|
||||
|
||||
cat >expect <<'EOF'
|
||||
Reflog: HEAD@{0} (C O Mitter <committer@example.com>)
|
||||
Reflog message: commit (initial): one
|
||||
EOF
|
||||
test_expect_success 'log -g shows reflog headers' '
|
||||
git log -g -1 >tmp &&
|
||||
grep ^Reflog <tmp >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
cat >expect <<'EOF'
|
||||
e46513e HEAD@{0}: commit (initial): one
|
||||
EOF
|
||||
test_expect_success 'oneline reflog format' '
|
||||
git log -g -1 --oneline >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
cat >expect <<'EOF'
|
||||
Reflog: HEAD@{Thu Apr 7 15:13:13 2005 -0700} (C O Mitter <committer@example.com>)
|
||||
Reflog message: commit (initial): one
|
||||
EOF
|
||||
test_expect_success 'using @{now} syntax shows reflog date (multiline)' '
|
||||
git log -g -1 HEAD@{now} >tmp &&
|
||||
grep ^Reflog <tmp >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
cat >expect <<'EOF'
|
||||
e46513e HEAD@{Thu Apr 7 15:13:13 2005 -0700}: commit (initial): one
|
||||
EOF
|
||||
test_expect_success 'using @{now} syntax shows reflog date (oneline)' '
|
||||
git log -g -1 --oneline HEAD@{now} >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
cat >expect <<'EOF'
|
||||
Reflog: HEAD@{1112911993 -0700} (C O Mitter <committer@example.com>)
|
||||
Reflog message: commit (initial): one
|
||||
EOF
|
||||
test_expect_success 'using --date= shows reflog date (multiline)' '
|
||||
git log -g -1 --date=raw >tmp &&
|
||||
grep ^Reflog <tmp >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
cat >expect <<'EOF'
|
||||
e46513e HEAD@{1112911993 -0700}: commit (initial): one
|
||||
EOF
|
||||
test_expect_success 'using --date= shows reflog date (oneline)' '
|
||||
git log -g -1 --oneline --date=raw >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
Loading…
Reference in New Issue