threads / patch / 40508

patchpretty: add format specifiers for short and raw date formats

Subject: [PATCH] pretty: add format specifiers for short and raw date formats

## tl;dr

3 messages between Oct 7, 2015 and Oct 8, 2015. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

SZEDER Gábor· Oct 7, 2015, 16:28 UTC · lore

Other date formats already have their format specifiers and so should these, so they will be available in pretty format aliases as well.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
---
 Documentation/pretty-formats.txt | 4 ++++
 pretty.c                         | 6 ++++++
 2 files changed, 10 insertions(+)
Show changes to 2 files +10 −0

Documentation/pretty-formats.txt, pretty.c

diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index 671cebd95c..ce62c70659 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.txt
@@ -120,6 +120,8 @@ The placeholders are:
 - '%at': author date, UNIX timestamp
 - '%ai': author date, ISO 8601-like format
 - '%aI': author date, strict ISO 8601 format
+- '%as': author date, short format
+- '%aR': author date, raw format
 - '%cn': committer name
 - '%cN': committer name (respecting .mailmap, see
   linkgit:git-shortlog[1] or linkgit:git-blame[1])
@@ -132,6 +134,8 @@ The placeholders are:
 - '%ct': committer date, UNIX timestamp
 - '%ci': committer date, ISO 8601-like format
 - '%cI': committer date, strict ISO 8601 format
+- '%cs': committer date, short format
+- '%cR': committer date, raw format
 - '%d': ref names, like the --decorate option of linkgit:git-log[1]
 - '%D': ref names without the " (", ")" wrapping.
 - '%e': encoding
diff --git a/pretty.c b/pretty.c
index 151c2ae312..e3ea2c03b0 100644
--- a/pretty.c
+++ b/pretty.c
@@ -723,6 +723,12 @@ static size_t format_person_part(struct strbuf *sb, char part,
 	case 'I':	/* date, ISO 8601 strict */
 		strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(ISO8601_STRICT)));
 		return placeholder_len;
+	case 's':	/* date, short */
+		strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(SHORT)));
+		return placeholder_len;
+	case 'R':	/* date, raw */
+		strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(RAW)));
+		return placeholder_len;
 	}
 
 skip:
-- 
2.6.1.134.ge857153
Junio C Hamano· Oct 7, 2015, 20:22 UTC · re: SZEDER Gábor · lore

Re: [PATCH] pretty: add format specifiers for short and raw date formats

SZEDER Gábor <szeder@ira.uka.de> writes:
Show 6 quoted lines
> @@ -120,6 +120,8 @@ The placeholders are:
>  - '%at': author date, UNIX timestamp
>  - '%ai': author date, ISO 8601-like format
>  - '%aI': author date, strict ISO 8601 format
> +- '%as': author date, short format
> +- '%aR': author date, raw format
Hmmm, are these two a good things the only ones that are missing?

It makes me wonder if it's time for us to move to a more extensible format, e.g. "%aT(...)", in which 'T' stands for 'timestamp' and the part in the parentheses can be any format string that is understood by "log --date=<format>" [*1*]. Once we have something like that, we can keep the existing ones for historical convenience, stop adding new ones [*2*] and do not have to worry about these two mechanisms going out of sync.

Also, "%at" is almost there as a replacement for "%aR"; what we are missing really is "%aZ" for zone offset. If we had "%aZ", we do not need "%aR", as that is "%at %aZ".

[Footnote]
*1* Yes, and in longer term, we should really aim to unify the
    for-each-ref format and "--pretty=format:" format.  "%aT(...)"
    is probably a step in a wrong direction, and it should probably
    be more like "%(authordate:...)".
*2* Because we have "%ad", we _can_ stop adding new ones already.
SZEDER Gábor· Oct 8, 2015, 11:04 UTC · re: Junio C Hamano · lore

Re: [PATCH] pretty: add format specifiers for short and raw date formats

Quoting Junio C Hamano <gitster@pobox.com>:
Show 10 quoted lines
> SZEDER Gábor <szeder@ira.uka.de> writes:
>
>> @@ -120,6 +120,8 @@ The placeholders are:
>>  - '%at': author date, UNIX timestamp
>>  - '%ai': author date, ISO 8601-like format
>>  - '%aI': author date, strict ISO 8601 format
>> +- '%as': author date, short format
>> +- '%aR': author date, raw format
>
> Hmmm, are these two a good things the only ones that are missing?

Sort of. There is 'local', but after add00ba2de (date: make "local" orthogonal to date format, 2015-09-03) hit master that's not a format anymore.

Show 7 quoted lines
> It makes me wonder if it's time for us to move to a more extensible
> format, e.g. "%aT(...)", in which 'T' stands for 'timestamp' and the
> part in the parentheses can be any format string that is understood
> by "log --date=<format>" [*1*].  Once we have something like that,
> we can keep the existing ones for historical convenience, stop
> adding new ones [*2*] and do not have to worry about these two
> mechanisms going out of sync.
> *1* Yes, and in longer term, we should really aim to unify the
>     for-each-ref format and "--pretty=format:" format.  "%aT(...)"
>     is probably a step in a wrong direction, and it should probably
>     be more like "%(authordate:...)".

That would be great, especially that in [*1*]. Real words are so much better than one or two letter codes. Of course that would also be a lot more invasive change.

> *2* Because we have "%ad", we _can_ stop adding new ones already.
With this patch in my tree I have this pretty alias
   pretty.commitref=tformat:%h (%s, %as)

in my config, and a simple '--pretty=commitref' option works on its own to produce the format that I used above. With '%ad' that wouldn't work, because I would need the additional '--date=short' option, too, which means I have to remember it and have to type more every time.

Gábor

← back to recent threads