The intent is that it only applies when the user runs `git commit` themselves, hence a number of commands (rebase and revert/cherry-pick) have started passing --no-signoff when invoking commit. Signed-off-by: Adeodato Simó <dato@xxxxxxxxxxxxxx> --- Hello, I've worked a bit more on this patch, and I'd like to know if it's going in a good direction or not. Changes since v2: t/t7500-commit.sh | 22 ++++++++++++++++++++++ * add tests to check that commit.signoff works correctly, and that is overriden by --no-signoff git-rebase.sh | 2 +- t/t3402-rebase-merge.sh | 6 +++++- * make git-rebase pass --no-signoff when invoking `git commit`, and add a test for it builtin-revert.c | 2 ++ * make revert/cherry-pick pass --no-signoff unless -s was given by the user (missing test) Documentation/config.txt | 4 ++-- * improve config.txt wording as per <20081227120128.GA11322@xxxxxxxxxxxxxxx> (I don't know if it's customary to send a diff from v2 to v3, if it is please let me know.) Thanks, Documentation/config.txt | 9 +++++++++ Documentation/git-commit.txt | 3 ++- builtin-commit.c | 5 +++++ builtin-revert.c | 2 ++ git-rebase.sh | 2 +- t/t3402-rebase-merge.sh | 6 +++++- t/t7500-commit.sh | 22 ++++++++++++++++++++++ 7 files changed, 46 insertions(+), 3 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index 52786c7..13f2200 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -591,6 +591,15 @@ color.ui:: commit.template:: Specify a file to use as the template for new commit messages. +commit.signoff:: + If set, 'git commit' will behave as if '-s' option was given. + Please use this option with care: by enabling it globally, you'd + be stating that all your commits will invariably meet the S-o-b + requirements for any project you send patches to. It's probably + best to only use it from your private repositories' .git/config + file, and only for projects who require a S-o-b as proof of + provenance of the patch, and not of its correctness or quality. + diff.autorefreshindex:: When using 'git-diff' to compare with work tree files, do not consider stat-only change as changed. diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index b5d81be..abab839 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -96,7 +96,8 @@ OPTIONS -s:: --signoff:: Add Signed-off-by line by the committer at the end of the commit - log message. + log message. This overrides the `commit.signoff` configuration + variable. -n:: --no-verify:: diff --git a/builtin-commit.c b/builtin-commit.c index e88b78f..fc09539 100644 --- a/builtin-commit.c +++ b/builtin-commit.c @@ -929,6 +929,11 @@ static int git_commit_config(const char *k, const char *v, void *cb) if (!strcmp(k, "commit.template")) return git_config_string(&template_file, k, v); + if (!strcmp(k, "commit.signoff")) { + signoff = git_config_bool(k, v); + return 0; + } + return git_status_config(k, v, cb); } diff --git a/builtin-revert.c b/builtin-revert.c index d48313c..395c7a5 100644 --- a/builtin-revert.c +++ b/builtin-revert.c @@ -429,6 +429,8 @@ static int revert_or_cherry_pick(int argc, const char **argv) args[i++] = "-n"; if (signoff) args[i++] = "-s"; + else + args[i++] = "--no-signoff"; if (!edit) { args[i++] = "-F"; args[i++] = defmsg; diff --git a/git-rebase.sh b/git-rebase.sh index ebd4df3..bf520d0 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -63,7 +63,7 @@ continue_merge () { cmt=`cat "$dotest/current"` if ! git diff-index --quiet --ignore-submodules HEAD -- then - if ! git commit --no-verify -C "$cmt" + if ! git commit --no-verify --no-signoff -C "$cmt" then echo "Commit failed, please do not call \"git commit\"" echo "directly, but instead do one of the following: " diff --git a/t/t3402-rebase-merge.sh b/t/t3402-rebase-merge.sh index 7b7d072..bd2d08c 100755 --- a/t/t3402-rebase-merge.sh +++ b/t/t3402-rebase-merge.sh @@ -41,7 +41,8 @@ test_expect_success setup ' git branch test-rebase side && git branch test-rebase-pick side && git branch test-reference-pick side && - git checkout -b test-merge side + git checkout -b test-merge side && + git config commit.signoff true ' test_expect_success 'reference merge' ' @@ -54,6 +55,9 @@ test_expect_success rebase ' GIT_TRACE=1 git rebase --merge master ' +test_expect_success 'rebase uses --no-signoff' ' + !(git log | grep -q Signed-off-by)' + test_expect_success 'test-rebase@{1} is pre rebase' ' test $PRE_REBASE = $(git rev-parse test-rebase@{1}) ' diff --git a/t/t7500-commit.sh b/t/t7500-commit.sh index 6e18a96..c7deb3e 100755 --- a/t/t7500-commit.sh +++ b/t/t7500-commit.sh @@ -147,6 +147,10 @@ zort Signed-off-by: C O Mitter <committer@xxxxxxxxxxx> EOF +cat > expect_no_signoff << EOF +zort +EOF + test_expect_success '--signoff' ' echo "yet another content *narf*" >> foo && echo "zort" | ( @@ -157,6 +161,24 @@ test_expect_success '--signoff' ' test_cmp expect output ' +test_expect_success 'commit.signoff' ' + echo "and more content" >> foo && + git config commit.signoff true && + echo "zort" | git commit -F - foo && + git config --unset commit.signoff && + git cat-file commit HEAD | sed "1,/^$/d" > output && + test_cmp expect output +' + +test_expect_success '--no-signoff trumps commit.signoff' ' + echo "and even more" >> foo && + git config commit.signoff true && + echo "zort" | git commit --no-signoff -F - foo && + git config --unset commit.signoff && + git cat-file commit HEAD | sed "1,/^$/d" > output && + test_cmp expect_no_signoff output +' + test_expect_success 'commit message from file (1)' ' mkdir subdir && echo "Log in top directory" >log && -- 1.6.1.307.g07803 -- 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