]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fast-export: --signed-commits is experimental
authorJunio C Hamano <gitster@pobox.com>
Wed, 28 May 2025 17:29:19 +0000 (10:29 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 28 May 2025 17:30:47 +0000 (10:30 -0700)
As the design of signature handling is still being discussed, it is
likely that the data stream produced by the code in Git 2.50 would
have to be changed in such a way that is not backward compatible.

Mark the feature as experimental and discourge its use for now.

Also flip the default on the generation side to "strip"; users of
existing versions would not have passed --signed-commits=strip and
will be broken by this change if the default is made to abort, and
will be encouraged by the error message to produce data stream with
future breakage guarantees by passing --signed-commits option.

As we tone down the default behaviour, we no longer need the
FAST_EXPORT_SIGNED_COMMITS_NOABORT environment variable, which was
not discoverable enough.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/RelNotes/2.50.0.adoc
Documentation/git-fast-export.adoc
Documentation/git-fast-import.adoc
builtin/fast-export.c
t/t9350-fast-export.sh

index c6c34d1a1d60ebad539583392f9a5b846fb32629..9a1cdf0dc0c69b43cee46762898d30a6661043db 100644 (file)
@@ -100,7 +100,9 @@ Performance, Internal Implementation, Development Support etc.
  * "git fsck" becomes more careful when checking the refs.
 
  * "git fast-export | git fast-import" learns to deal with commit and
-   tag objects with embedded signatures a bit better.
+   tag objects with embedded signatures a bit better.  This is highly
+   experimental and the format of the data stream may change in the
+   future without compatibility guarantees.
 
  * The code paths to check whether a refname X is available (by seeing
    if another ref X/Y exists, etc.) have been optimized.
index 413a5274969b6c3adab7562e46e5a080e92a799e..43bbb4f63ca6bf726b72c679546cd02a8c070bd2 100644 (file)
@@ -46,14 +46,12 @@ resulting tag will have an invalid signature.
 
 --signed-commits=(verbatim|warn-verbatim|warn-strip|strip|abort)::
        Specify how to handle signed commits.  Behaves exactly as
-       '--signed-tags', but for commits.  Default is 'abort'.
+       '--signed-tags', but for commits.  Default is 'strip', which
+       is the same as how earlier versions of this command without
+       this option behaved.
 +
-Earlier versions this command that did not have '--signed-commits'
-behaved as if '--signed-commits=strip'.  As an escape hatch for users
-of tools that call 'git fast-export' but do not yet support
-'--signed-commits', you may set the environment variable
-'FAST_EXPORT_SIGNED_COMMITS_NOABORT=1' in order to change the default
-from 'abort' to 'warn-strip'.
+NOTE: This is highly experimental and the format of the data stream may
+change in the future without compatibility guarantees.
 
 --tag-of-filtered-object=(abort|drop|rewrite)::
        Specify how to handle tags whose tagged object is filtered out.
index 7b107f5e8e9da5779856eb620ac4ef73de521909..250d86665217816246c005f087f9c398ed733c00 100644 (file)
@@ -523,6 +523,9 @@ that signs the commit data.
 Here <alg> specifies which hashing algorithm is used for this
 signature, either `sha1` or `sha256`.
 
+NOTE: This is highly experimental and the format of the data stream may
+change in the future without compatibility guarantees.
+
 `encoding`
 ^^^^^^^^^^
 The optional `encoding` command indicates the encoding of the commit
index 37c01d6c6fe6cb2d32555cdc343ab9bd261b028d..fcf6b00d5fe10af2e12eda7a96784957684bef43 100644 (file)
@@ -39,7 +39,7 @@ enum sign_mode { SIGN_ABORT, SIGN_VERBATIM, SIGN_STRIP, SIGN_WARN_VERBATIM, SIGN
 
 static int progress;
 static enum sign_mode signed_tag_mode = SIGN_ABORT;
-static enum sign_mode signed_commit_mode = SIGN_ABORT;
+static enum sign_mode signed_commit_mode = SIGN_STRIP;
 static enum tag_of_filtered_mode { TAG_FILTERING_ABORT, DROP, REWRITE } tag_of_filtered_mode = TAG_FILTERING_ABORT;
 static enum reencode_mode { REENCODE_ABORT, REENCODE_YES, REENCODE_NO } reencode_mode = REENCODE_ABORT;
 static int fake_missing_tagger;
@@ -1269,7 +1269,6 @@ int cmd_fast_export(int argc,
                    const char *prefix,
                    struct repository *repo UNUSED)
 {
-       const char *env_signed_commits_noabort;
        struct rev_info revs;
        struct commit *commit;
        char *export_filename = NULL,
@@ -1327,10 +1326,6 @@ int cmd_fast_export(int argc,
        if (argc == 1)
                usage_with_options (fast_export_usage, options);
 
-       env_signed_commits_noabort = getenv("FAST_EXPORT_SIGNED_COMMITS_NOABORT");
-       if (env_signed_commits_noabort && *env_signed_commits_noabort)
-               signed_commit_mode = SIGN_WARN_STRIP;
-
        /* we handle encodings */
        git_config(git_default_config, NULL);
 
index dda9e7c3e7ae333cb8e67a41d8fa1b418eb809e5..76619765fcbc98b0fcd366d8d997c496afaa78b3 100755 (executable)
@@ -299,22 +299,10 @@ test_expect_success GPG 'set up signed commit' '
 
 '
 
-test_expect_success GPG 'signed-commits default' '
-
-       sane_unset FAST_EXPORT_SIGNED_COMMITS_NOABORT &&
-       test_must_fail git fast-export --reencode=no commit-signing &&
-
-       FAST_EXPORT_SIGNED_COMMITS_NOABORT=1 git fast-export --reencode=no commit-signing >output 2>err &&
-       ! grep ^gpgsig output &&
-       grep "^encoding ISO-8859-1" output &&
-       test -s err &&
-       sed "s/commit-signing/commit-strip-signing/" output | (
-               cd new &&
-               git fast-import &&
-               STRIPPED=$(git rev-parse --verify refs/heads/commit-strip-signing) &&
-               test $COMMIT_SIGNING != $STRIPPED
-       )
-
+test_expect_success GPG 'signed-commits default is same as strip' '
+       git fast-export --reencode=no commit-signing >out1 2>err &&
+       git fast-export --reencode=no --signed-commits=strip commit-signing >out2 &&
+       test_cmp out1 out2
 '
 
 test_expect_success GPG 'signed-commits=abort' '