The commit builtin did not previously have a configuration option to enable the 'Signed-off-by' trailer by default. For some use-cases (namely, when the user doesn't always have the right to contribute patches to a project) it makes sense to make it a conscientious decision to add the signoff trailer. However, others' might always have the right to ship patches -- in which case it makes sense to have an option to add the trailer by default for projects that require it. This patch introduces a commit.signOff configuration option that determine whether the trailer should be added for commits. It can be overridden with the --(no-)signoff command-line option. Signed-off-by: Hans Jerry Illikainen <hji@xxxxxxxxxxxx> --- Documentation/config/commit.txt | 8 ++++++++ Documentation/git-commit.txt | 4 ++++ builtin/commit.c | 4 ++++ t/t7502-commit-porcelain.sh | 36 +++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+) diff --git a/Documentation/config/commit.txt b/Documentation/config/commit.txt index 2c95573930..6ebfe384ac 100644 --- a/Documentation/config/commit.txt +++ b/Documentation/config/commit.txt @@ -15,6 +15,14 @@ commit.gpgSign:: convenient to use an agent to avoid typing your GPG passphrase several times. +commit.signOff:: + A boolean to specify whether commits should enable the + `-s/--signoff` option by default. *Note:* Adding the + Signed-off-by: line to a commit message should be a conscious + act and means that you certify you have the rights to submit the + work under the same open source license. Please see the + 'SubmittingPatches' document for further discussion. + commit.status:: A boolean to enable/disable inclusion of status information in the commit message template when using an editor to prepare the commit diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index ced5a9beab..61a362770d 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -165,12 +165,16 @@ The `-m` option is mutually exclusive with `-c`, `-C`, and `-F`. -s:: --signoff:: +--no-signoff:: Add Signed-off-by line by the committer at the end of the commit log message. The meaning of a signoff depends on the project, but it typically certifies that committer has the rights to submit this work under the same license and agrees to a Developer Certificate of Origin (see http://developercertificate.org/ for more information). + This option can be enabled by default with the `commit.signOff` + configuration option, in which case it can be disabled + temporarily with `--no-signoff`. -n:: --no-verify:: diff --git a/builtin/commit.c b/builtin/commit.c index c70ad01cc9..497e29c58c 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1474,6 +1474,10 @@ static int git_commit_config(const char *k, const char *v, void *cb) sign_commit = git_config_bool(k, v) ? "" : NULL; return 0; } + if (!strcmp(k, "commit.signoff")) { + signoff = git_config_bool(k, v); + return 0; + } if (!strcmp(k, "commit.verbose")) { int is_bool; config_commit_verbose = git_config_bool_or_int(k, v, &is_bool); diff --git a/t/t7502-commit-porcelain.sh b/t/t7502-commit-porcelain.sh index 14c92e4c25..7510325698 100755 --- a/t/t7502-commit-porcelain.sh +++ b/t/t7502-commit-porcelain.sh @@ -151,6 +151,42 @@ test_expect_success 'sign off' ' ' +test_expect_success 'commit.signOff=true' ' + test_config commit.signOff true && + echo 1 >>positive && + git add positive && + git commit -m "thank you" && + git cat-file commit HEAD >commit.msg && + sed -ne "s/Signed-off-by: //p" commit.msg >actual && + git var GIT_COMMITTER_IDENT >ident && + sed -e "s/>.*/>/" ident >expected && + test_cmp expected actual +' + +test_expect_success 'commit.signOff=true and --no-signoff' ' + test_config commit.signOff true && + echo 2 >>positive && + git add positive && + git commit --no-signoff -m "thank you" && + git cat-file commit HEAD >commit.msg && + sed -ne "s/Signed-off-by: //p" commit.msg >actual && + git var GIT_COMMITTER_IDENT >ident && + sed -e "s/>.*/>/" ident >expected && + ! test_cmp expected actual +' + +test_expect_success 'commit.signOff=false and --signoff' ' + test_config commit.signOff false && + echo 1 >>positive && + git add positive && + git commit --signoff -m "thank you" && + git cat-file commit HEAD >commit.msg && + sed -ne "s/Signed-off-by: //p" commit.msg >actual && + git var GIT_COMMITTER_IDENT >ident && + sed -e "s/>.*/>/" ident >expected && + test_cmp expected actual +' + test_expect_success 'multiple -m' ' >negative && -- 2.25.0.rc1.298.g45d5f025e1