builtin-commit: add --date option

This is like --author: allow a user to specify a given date without
using the GIT_AUTHOR_DATE environment variable.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Miklos Vajna 2009-12-02 23:16:18 +01:00 committed by Junio C Hamano
parent b809d9cd07
commit 02b47cd77e
3 changed files with 24 additions and 2 deletions

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
----------- -----------
@ -85,6 +85,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.

View File

@ -52,7 +52,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
@ -90,6 +90,7 @@ static struct option builtin_commit_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"),
@ -410,6 +411,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 &&