Re: [PATCH] commit -c/-C/--amend: acquire authorship and restamp time with --claim

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]