Merge branch 'mv/commit-date'

* mv/commit-date:
  Document date formats accepted by parse_date()
  builtin-commit: add --date option
This commit is contained in:
Junio C Hamano
2010-01-07 15:35:55 -08:00
5 changed files with 53 additions and 2 deletions

View File

@ -0,0 +1,26 @@
DATE FORMATS
------------
The GIT_AUTHOR_DATE, GIT_COMMITTER_DATE environment variables
ifdef::git-commit[]
and the `--date` option
endif::git-commit[]
support the following date formats:
Git internal format::
It is `<unix timestamp> <timezone offset>`, where `<unix
timestamp>` is the number of seconds since the UNIX epoch.
`<timezone offset>` is a positive or negative offset from UTC.
For example CET (which is 2 hours ahead UTC) is `+0200`.
RFC 2822::
The standard email format as described by RFC 2822, for example
`Thu, 07 Apr 2005 22:13:13 +0200`.
ISO 8601::
Time and date specified by the ISO 8601 standard, for example
`2005-04-07T22:13:13`. The parser accepts a space instead of the
`T` character as well.
+
NOTE: In addition, the date part is accepted in the following formats:
`YYYY.MM.DD`, `MM/DD/YYYY` and `DD.MM.YYYY`.

View File

@ -73,6 +73,7 @@ A commit comment is read from stdin. If a changelog
entry is not provided via "<" redirection, 'git-commit-tree' will just wait entry is not provided via "<" redirection, 'git-commit-tree' will just wait
for one to be entered and terminated with ^D. for one to be entered and terminated with ^D.
include::date-formats.txt[]
Diagnostics Diagnostics
----------- -----------

View File

@ -11,7 +11,7 @@ SYNOPSIS
'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run] 'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run]
[(-c | -C) <commit>] [-F <file> | -m <msg>] [--reset-author] [(-c | -C) <commit>] [-F <file> | -m <msg>] [--reset-author]
[--allow-empty] [--no-verify] [-e] [--author=<author>] [--allow-empty] [--no-verify] [-e] [--author=<author>]
[--cleanup=<mode>] [--] [[-i | -o ]<file>...] [--date=<date>] [--cleanup=<mode>] [--] [[-i | -o ]<file>...]
DESCRIPTION DESCRIPTION
----------- -----------
@ -99,6 +99,9 @@ OPTIONS
an existing commit that matches the given string and its author an existing commit that matches the given string and its author
name is used. name is used.
--date=<date>::
Override the author date used in the commit.
-m <msg>:: -m <msg>::
--message=<msg>:: --message=<msg>::
Use the given <msg> as the commit message. Use the given <msg> as the commit message.
@ -231,6 +234,8 @@ specified.
these files are also staged for the next commit on top these files are also staged for the next commit on top
of what have been staged before. of what have been staged before.
:git-commit: 1
include::date-formats.txt[]
EXAMPLES EXAMPLES
-------- --------

View File

@ -53,7 +53,7 @@ static char *edit_message, *use_message;
static char *author_name, *author_email, *author_date; static char *author_name, *author_email, *author_date;
static int all, edit_flag, also, interactive, only, amend, signoff; static int all, edit_flag, also, interactive, only, amend, signoff;
static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship; static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
static char *untracked_files_arg; static char *untracked_files_arg, *force_date;
/* /*
* The default commit message cleanup mode will remove the lines * The default commit message cleanup mode will remove the lines
* beginning with # (shell comments) and leading and trailing * beginning with # (shell comments) and leading and trailing
@ -98,6 +98,7 @@ static struct option builtin_commit_options[] = {
OPT_GROUP("Commit message options"), OPT_GROUP("Commit message options"),
OPT_FILENAME('F', "file", &logfile, "read log from file"), OPT_FILENAME('F', "file", &logfile, "read log from file"),
OPT_STRING(0, "author", &force_author, "AUTHOR", "override author for commit"), 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_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', "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"), OPT_STRING('C', "reuse-message", &use_message, "COMMIT", "reuse message from specified commit"),
@ -441,6 +442,9 @@ static void determine_author_info(void)
email = xstrndup(lb + 2, rb - (lb + 2)); email = xstrndup(lb + 2, rb - (lb + 2));
} }
if (force_date)
date = force_date;
author_name = name; author_name = name;
author_email = email; author_email = email;
author_date = date; author_date = date;

View File

@ -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)' ' test_expect_success 'sign off (1)' '
echo 1 >positive && echo 1 >positive &&