[PATCH] builtin-commit: add --date option

Subsystems: documentation, the rest

STALE3738d

5 messages, 2 authors, 2016-06-15 · open the first message on its own page

[PATCH] builtin-commit: add --date option

From: Miklos Vajna <hidden>
Date: 2016-06-15 22:47:48

This is useful in case git commit --amend is used but the user wants to
set the date of the new commit to a specified one, since GIT_AUTHOR_DATE
is ignored in such a situation.

Signed-off-by: Miklos Vajna <redacted>
---

 Documentation/git-commit.txt |    6 +++++-
 builtin-commit.c             |    6 +++++-
 t/t7501-commit.sh            |   15 +++++++++++++++
 3 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 3ea80c8..3b9a7c3 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -11,7 +11,7 @@ SYNOPSIS
 'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run]
 	   [(-c | -C) <commit>] [-F <file> | -m <msg>]
 	   [--allow-empty] [--no-verify] [-e] [--author=<author>]
-	   [--cleanup=<mode>] [--] [[-i | -o ]<file>...]
+	   [--date=<date>] [--cleanup=<mode>] [--] [[-i | -o ]<file>...]
 
 DESCRIPTION
 -----------
@@ -80,6 +80,10 @@ OPTIONS
 	an existing commit that matches the given string and its author
 	name is used.
 
+--date=<date>::
+	Override the date used in the commit.  The format is the Git
+	native one and is `<time> SP <offutc>`.
+
 -m <msg>::
 --message=<msg>::
 	Use the given <msg> as the commit message.
diff --git a/builtin-commit.c b/builtin-commit.c
index 09d2840..594328e 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c
@@ -52,7 +52,7 @@ static char *edit_message, *use_message;
 static char *author_name, *author_email, *author_date;
 static int all, edit_flag, also, interactive, only, amend, signoff;
 static int quiet, verbose, no_verify, allow_empty, dry_run;
-static char *untracked_files_arg;
+static char *untracked_files_arg, *force_date;
 /*
  * The default commit message cleanup mode will remove the lines
  * beginning with # (shell comments) and leading and trailing
@@ -90,6 +90,7 @@ static struct option builtin_commit_options[] = {
 
 	OPT_FILENAME('F', "file", &logfile, "read log from file"),
 	OPT_STRING(0, "author", &force_author, "AUTHOR", "override author for commit"),
+	OPT_STRING(0, "date", &force_date, "DATE", "override date for commit"),
 	OPT_CALLBACK('m', "message", &message, "MESSAGE", "specify commit message", opt_parse_m),
 	OPT_STRING('c', "reedit-message", &edit_message, "COMMIT", "reuse and edit message from specified commit "),
 	OPT_STRING('C', "reuse-message", &use_message, "COMMIT", "reuse message from specified commit"),
@@ -409,6 +410,9 @@ static void determine_author_info(void)
 		email = xstrndup(lb + 2, rb - (lb + 2));
 	}
 
+	if (force_date)
+		date = force_date;
+
 	author_name = name;
 	author_email = email;
 	author_date = date;
diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh
index a603f6d..a529701 100755
--- a/t/t7501-commit.sh
+++ b/t/t7501-commit.sh
@@ -211,6 +211,21 @@ test_expect_success 'amend commit to fix author' '
 
 '
 
+test_expect_success 'amend commit to fix date' '
+
+	test_tick &&
+	newtick=$GIT_AUTHOR_DATE &&
+	git reset --hard &&
+	git cat-file -p HEAD |
+	sed -e "s/author.*/author $author $newtick/" \
+		-e "s/^\(committer.*> \).*$/\1$GIT_COMMITTER_DATE/" > \
+		expected &&
+	git commit --amend --date="$newtick" &&
+	git cat-file -p HEAD > current &&
+	test_cmp expected current
+
+'
+
 test_expect_success 'sign off (1)' '
 
 	echo 1 >positive &&
-- 
1.6.5.2

Re: [PATCH] builtin-commit: add --date option

From: Miklos Vajna <hidden>
Date: 2016-06-15 22:47:49

On Tue, Dec 01, 2009 at 01:27:32AM +0100, Miklos Vajna [off-list ref] wrote:
+--date=<date>::
+	Override the date used in the commit.  The format is the Git
+	native one and is `<time> SP <offutc>`.
I just noticed that fmt_ident() calls parse_date(), so other formats are
supported as well.

Is there any documentation describing what does parse_date() accept?

Based on t0006-date.sh and the comments in the source, I see 3 supported
formats:

1) <unix timestamp> <timezone>

2) A format like 2008-12-02 18:04:00

3) RFC 2822 (Thu, 21 Dec 2000 16:01:07 +0200)

Thanks.

Re: [PATCH] builtin-commit: add --date option

From: Jeff King <hidden>
Date: 2016-06-15 22:47:49

On Tue, Dec 01, 2009 at 01:27:32AM +0100, Miklos Vajna wrote:
This is useful in case git commit --amend is used but the user wants to
set the date of the new commit to a specified one, since GIT_AUTHOR_DATE
is ignored in such a situation.
Do you really want to set the date to something arbitrary, or do you
just want to set it to "now"? If the latter case, do you really just
want the recently discussed --reset-author?

Also, is there a good reason why GIT_AUTHOR_DATE is not respected in
this case?  If not, should we simply be fixing that bug instead?

-Peff

Re: [PATCH] builtin-commit: add --date option

From: Miklos Vajna <hidden>
Date: 2016-06-15 22:47:49

On Wed, Dec 02, 2009 at 02:26:14PM -0500, Jeff King [off-list ref] wrote:
Do you really want to set the date to something arbitrary, or do you
just want to set it to "now"? If the latter case, do you really just
want the recently discussed --reset-author?
No, I want to set it to two days ago, for example when I forgot to
commit at the end of the day and I notice it two days later before I
start to work on something again.
Also, is there a good reason why GIT_AUTHOR_DATE is not respected in
this case?  If not, should we simply be fixing that bug instead?
GIT_AUTHOR_DATE is respected by --reset-author, just given that we have
--author already, using environment variables for a user can be
uncomfortable.

Re: [PATCH] builtin-commit: add --date option

From: Jeff King <hidden>
Date: 2016-06-15 22:47:49

On Wed, Dec 02, 2009 at 11:12:32PM +0100, Miklos Vajna wrote:
No, I want to set it to two days ago, for example when I forgot to
commit at the end of the day and I notice it two days later before I
start to work on something again.
OK. I think you are being overly meticulous about your commit date, but
that is your right. ;)
quoted
Also, is there a good reason why GIT_AUTHOR_DATE is not respected in
this case?  If not, should we simply be fixing that bug instead?
GIT_AUTHOR_DATE is respected by --reset-author, just given that we have
--author already, using environment variables for a user can be
uncomfortable.
OK, I can agree with that reasoning.

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help