I am gonna check all this information but you probably missed the last patch I sent: http://marc.info/?l=git&m=125712272606721&w=2 Could you please check this one... while I am checking this e-mail. Regards 2009/11/2 Junio C Hamano <gitster@xxxxxxxxx>: > The last one was probably harder to read since it was an interdiff. Here > is what I am considering to queue. > > No, I didn't use --mine option when I ran "commit --amend" to record this > one ;-) > > -- >8 -- > From: Erick Mattos <erick.mattos@xxxxxxxxx> > Date: Sun, 1 Nov 2009 16:45:27 -0200 > Subject: [PATCH] git commit --mine: ignore authorship information taken from -c/-C/--amend > > When we use -c, -C, or --amend, we are trying one of two things: using the > source as a template or modifying a commit with corrections. > > When these options are are used, the authorship and timestamp recorded in > the newly created commit is always taken from the original commit. This > is inconvenient when you want to just borrow the commit log message, or > your change is so significant that you should take over the authorship > (with the blame for bugs you introduced). > > Signed-off-by: Erick Mattos <erick.mattos@xxxxxxxxx> > Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> > --- > Documentation/git-commit.txt | 7 +++- > builtin-commit.c | 10 +++- > t/t7509-commit.sh | 103 ++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 116 insertions(+), 4 deletions(-) > create mode 100755 t/t7509-commit.sh > > diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt > index 0578a40..7832720 100644 > --- a/Documentation/git-commit.txt > +++ b/Documentation/git-commit.txt > @@ -9,7 +9,7 @@ SYNOPSIS > -------- > [verse] > 'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run] > - [(-c | -C) <commit>] [-F <file> | -m <msg>] > + [(-c | -C) <commit>] [-F <file> | -m <msg>] [--mine] > [--allow-empty] [--no-verify] [-e] [--author=<author>] > [--cleanup=<mode>] [--] [[-i | -o ]<file>...] > > @@ -69,6 +69,11 @@ OPTIONS > Like '-C', but with '-c' the editor is invoked, so that > the user can further edit the commit message. > > +--mine:: > + When used with -C/-c/--amend options, declare that the > + authorship of the resulting commit now belongs of the committer. > + This also renews the author timestamp. > + > -F <file>:: > --file=<file>:: > Take the commit message from the given file. Use '-' to > diff --git a/builtin-commit.c b/builtin-commit.c > index beddf01..aa42989 100644 > --- a/builtin-commit.c > +++ b/builtin-commit.c > @@ -51,7 +51,7 @@ static const char *template_file; > 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 int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship; > static char *untracked_files_arg; > /* > * The default commit message cleanup mode will remove the lines > @@ -91,8 +91,9 @@ 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_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_BOOLEAN(0, "mine", &renew_authorship, "the commit is authored by me now (used with -C-c/--amend)"), > OPT_BOOLEAN('s', "signoff", &signoff, "add Signed-off-by:"), > OPT_FILENAME('t', "template", &template_file, "use specified template file"), > OPT_BOOLEAN('e', "edit", &edit_flag, "force edit of commit"), > @@ -381,7 +382,7 @@ static void determine_author_info(void) > email = getenv("GIT_AUTHOR_EMAIL"); > date = getenv("GIT_AUTHOR_DATE"); > > - if (use_message) { > + if (use_message && !renew_authorship) { > const char *a, *lb, *rb, *eol; > > a = strstr(use_message_buffer, "\nauthor "); > @@ -747,6 +748,9 @@ static int parse_and_validate_options(int argc, const char *argv[], > if (force_author && !strchr(force_author, '>')) > force_author = find_author_by_nickname(force_author); > > + if (force_author && renew_authorship) > + die("Using both --mine and --author does not make sense"); > + > if (logfile || message.len || use_message) > use_editor = 0; > if (edit_flag) > diff --git a/t/t7509-commit.sh b/t/t7509-commit.sh > new file mode 100755 > index 0000000..ec13cea > --- /dev/null > +++ b/t/t7509-commit.sh > @@ -0,0 +1,103 @@ > +#!/bin/sh > +# > +# Copyright (c) 2009 Erick Mattos > +# > + > +test_description='git commit --mine' > + > +. ./test-lib.sh > + > +author_header () { > + git cat-file commit "$1" | > + sed -n -e '/^$/q' -e '/^author /p' > +} > + > +message_body () { > + git cat-file commit "$1" | > + sed -e '1,/^$/d' > +} > + > +test_expect_success '-C option copies authorship and message' ' > + echo "Initial" >foo && > + git add foo && > + test_tick && > + git commit -m "Initial Commit" --author Frigate\ \<flying@xxxxxxxxxx\> && > + git tag Initial && > + echo "Test 1" >>foo && > + test_tick && > + git commit -a -C Initial && > + author_header Initial >expect && > + author_header HEAD >actual && > + test_cmp expect actual > +' > + > +test_expect_success '-C option copies only the message with --mine' ' > + echo "Test 2" >>foo && > + test_tick && > + git commit -a -C Initial --mine && > + echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect && > + author_header HEAD >actual > + test_cmp expect actual && > + > + message_body Initial >expect && > + message_body HEAD >actual && > + test_cmp expect actual > +' > + > +test_expect_success '-c option copies authorship and message' ' > + echo "Test 3" >>foo && > + test_tick && > + EDITOR=: VISUAL=: git commit -a -c Initial && > + author_header Initial >expect && > + author_header HEAD >actual && > + test_cmp expect actual > +' > + > +test_expect_success '-c option copies only the message with --mine' ' > + echo "Test 4" >>foo && > + test_tick && > + EDITOR=: VISUAL=: git commit -a -c Initial --mine && > + echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect && > + author_header HEAD >actual && > + test_cmp expect actual && > + > + message_body Initial >expect && > + message_body HEAD >actual && > + test_cmp expect actual > +' > + > +test_expect_success '--amend option copies authorship' ' > + git checkout Initial && > + echo "Test 5" >>foo && > + test_tick && > + git commit -a --amend -m "amend test" && > + author_header Initial >expect && > + author_header HEAD >actual && > + > + echo "amend test" >expect && > + message_body HEAD >actual && > + test_cmp expect actual > +' > + > +test_expect_success '--mine makes the commit ours even with --amend option' ' > + git checkout Initial && > + echo "Test 6" >>foo && > + test_tick && > + git commit -a --mine -m "Changed again" --amend && > + echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect && > + author_header HEAD >actual && > + test_cmp expect actual && > + > + echo "Changed again" >expect && > + message_body HEAD >actual && > + test_cmp expect actual > +' > + > +test_expect_success '--mine and --author are mutually exclusive' ' > + git checkout Initial && > + echo "Test 7" >>foo && > + test_tick && > + test_must_fail git commit -a --mine --author="Xyzzy <frotz@xxxxxxxxx>" > +' > + > +test_done > -- > 1.6.5.2.246.gc99575 > > -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html