git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3] Add a commit.signoff configuration option to always use --signoff in commit

From
Adeodato Simó <dato@net.com.org.es>
Date
Dec 29, 2008, 11:16 UTC
Message-ID
<1230549405-10000-1-git-send-email-dato@net.com.org.es>
In-Reply-To
<20081227120128.GA11322@chistera.yi.org>

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@net.com.org.es>
---

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@chistera.yi.org>

(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@example.com>
 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
Previous: Adeodato SimóNext: Adeodato Simó
Message 12 of 19 in “Add a commit.signoff configuration variable to always use --signoff.”
  1. Add a commit.signoff configuration variable to always use --signoff.Adeodato Simó, Dec 26, 2008
  2. Nanako ShiraishiDec 26, 2008
  3. Adeodato SimóDec 26, 2008
  4. Junio C HamanoDec 27, 2008
  5. Adeodato SimóDec 27, 2008
  6. Junio C HamanoDec 27, 2008
  7. Add a commit.signoff configuration variable to always use --signoffAdeodato Simó, Dec 27, 2008
  8. Thomas RastDec 27, 2008
  9. Adeodato SimóDec 27, 2008
  10. Junio C HamanoDec 27, 2008
  11. Adeodato SimóDec 27, 2008
  12. Add a commit.signoff configuration option to always use --signoff in commitAdeodato Simó, Dec 29, 2008
  13. Adeodato SimóDec 29, 2008
  14. Junio C HamanoDec 30, 2008
  15. Adeodato SimóJan 1, 2009
  16. Adeodato SimóJan 2, 2009
  17. Jan KrügerDec 27, 2008
  18. Adeodato SimóDec 27, 2008
  19. Jan KrügerDec 27, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.