Changes from v5: * Remove useless test_oid_init invocations throughout the series. * Fix a commit message for grammar and style. * Fix a typo in a shell case statement. * Fix http-fetch to allow parsing options before failing on a missing git directory. Changes from v4: * Fix several commit message to fix typos and inaccuracies. * Remove useless touch statement in tests. * Adjust several tests to introduce less dependence on previous test assertions other than the setup ones. * Loosen the regexp for object IDs in a Perl script in a test. * Ensure help functionality works for git http-fetch. * Switch http-fetch.c to use the already existing struct argv_array instance. * Avoid a memory leak, albeit a minor one. * Improve error message for unknown bundle hash algorithm. * Hoist a strbuf_rtrim in the bundle parsing code to simplify things. * Specify a minimum version instead of a default version in the bundle code. * Remove a useless line in tests. * Avoid invoking git hash-object needlessly for the SHA1 prerequisite. * Be explicit about which algorithms we're testing in CI. * Properly capitalize "core.repositoryFormatVersion" in documentation. Changes from v2: * Move bundle signature parsing into a function. * Improve parsing of bundle capabilities. * Improve t5510 to select only the interesting lines with sed. * Use cat and a heredoc instead of multiple echos. * Use test_i18ngrep where appropriate. * Reject extensions.objectFormat for repo v0. * Update documentation accordingly. Changes from v1: * Add a patch to add a bundle v3 format with capabilities that include the hash algorithm. * Remove bundle detection of hash algorithm using hash algorithm length. * Fix typo in the extensions.objectFormat documentation. * Document that extensions.objectFormat is ignored for repo v0. * Use test instead of brackets. * Use a command group instead of a subshell for efficiency. * Drop the bizarre test_might_fail, since it isn't needed (and is bizarre and wrong). * Write "SHA-256" instead of "NewHash" in commit messages. * Split SHA-256 CI tests to an independent run and avoid running a third test run to a single CI job. Range-diff below. Johannes Schindelin (1): t3404: prepare 'short SHA-1 collision' tests for SHA-256 brian m. carlson (38): t: make test-bloom initialize repository t1001: use $ZERO_OID t3305: make hash agnostic t6100: make hash size independent t6101: make hash size independent t6301: make hash size independent t6500: specify test values for SHA-256 t6501: avoid hard-coded objects t7003: compute appropriate length constant t7063: make hash size independent t7201: abstract away SHA-1-specific constants t7102: abstract away SHA-1-specific constants t7400: make hash size independent t7405: make hash size independent t7506: avoid checking for SHA-1-specific constants t7508: use $ZERO_OID instead of hard-coded constant t8002: make hash size independent t8003: make hash size independent t8011: make hash size independent t9300: abstract away SHA-1-specific constants t9300: use $ZERO_OID instead of hard-coded object ID t9301: make hash size independent t9350: make hash size independent t9500: ensure that algorithm info is preserved in config t9700: make hash size independent t5308: make test work with SHA-256 t0410: mark test with SHA1 prerequisite http-fetch: set up git directory before parsing pack hashes builtin/verify-pack: implement an --object-format option bundle: add new version for use with SHA-256 setup: add support for reading extensions.objectformat repository: enable SHA-256 support by default t: add test_oid option to select hash algorithm t: allow testing different hash algorithms via environment t: make SHA1 prerequisite depend on default hash ci: run tests with SHA-256 docs: add documentation for extensions.objectFormat t: remove test_oid_init in tests Documentation/config.txt | 2 + Documentation/config/extensions.txt | 8 ++ Documentation/git-bundle.txt | 9 +- Documentation/technical/bundle-format.txt | 30 ++++- builtin/bundle.c | 5 +- builtin/init-db.c | 5 - builtin/verify-pack.c | 23 ++-- bundle.c | 83 +++++++++--- bundle.h | 4 +- ci/run-build-and-tests.sh | 6 + config.mak.dev | 2 - http-fetch.c | 6 +- repository.c | 4 - setup.c | 16 ++- t/helper/test-bloom.c | 2 + t/lib-pack.sh | 11 +- t/lib-submodule-update.sh | 1 - t/t0000-basic.sh | 15 ++- t/t0001-init.sh | 33 +++++ t/t0410-partial-clone.sh | 4 +- t/t1006-cat-file.sh | 2 - t/t1050-large.sh | 1 - t/t1091-sparse-checkout-builtin.sh | 4 +- t/t1410-reflog.sh | 1 - t/t1450-fsck.sh | 1 - t/t1500-rev-parse.sh | 1 - t/t3305-notes-fanout.sh | 2 +- t/t3308-notes-merge.sh | 1 - t/t3404-rebase-interactive.sh | 49 +++++-- t/t3600-rm.sh | 1 - t/t3800-mktag.sh | 1 - t/t4002-diff-basic.sh | 2 - t/t4027-diff-submodule.sh | 1 - t/t4134-apply-submodule.sh | 1 - t/t4200-rerere.sh | 1 - t/t4211-line-log.sh | 1 - t/t5300-pack-object.sh | 3 +- t/t5302-pack-index.sh | 1 - t/t5308-pack-detect-duplicates.sh | 20 +-- t/t5313-pack-bounds-checks.sh | 1 - t/t5318-commit-graph.sh | 3 +- t/t5319-multi-pack-index.sh | 1 - t/t5324-split-commit-graph.sh | 1 - t/t5504-fetch-receive-strict.sh | 1 - t/t5510-fetch.sh | 16 ++- t/t5530-upload-pack-error.sh | 1 - t/t5562-http-backend-content-length.sh | 1 - t/t5607-clone-bundle.sh | 31 +++++ t/t5702-protocol-v2.sh | 3 +- t/t5703-upload-pack-ref-in-want.sh | 1 - t/t6006-rev-list-format.sh | 1 - t/t6100-rev-list-in-order.sh | 4 +- t/t6101-rev-parse-parents.sh | 2 +- t/t6301-for-each-ref-errors.sh | 2 +- t/t6500-gc.sh | 27 +++- t/t6501-freshen-objects.sh | 14 +- t/t7003-filter-branch.sh | 3 +- t/t7063-status-untracked-cache.sh | 150 ++++++++++++---------- t/t7102-reset.sh | 93 ++++++++------ t/t7201-co.sh | 6 +- t/t7400-submodule-basic.sh | 26 ++-- t/t7405-submodule-merge.sh | 4 +- t/t7506-status-submodule.sh | 12 +- t/t7508-status.sh | 2 +- t/t8002-blame.sh | 18 ++- t/t8003-blame-corner-cases.sh | 3 +- t/t8011-blame-split-file.sh | 2 +- t/t9300-fast-import.sh | 118 +++++++++-------- t/t9301-fast-import-notes.sh | 12 +- t/t9350-fast-export.sh | 14 +- t/t9500-gitweb-standalone-no-errors.sh | 22 +++- t/t9700/test.pl | 6 +- t/test-lib-functions.sh | 16 ++- t/test-lib.sh | 9 +- 74 files changed, 638 insertions(+), 351 deletions(-) create mode 100644 Documentation/config/extensions.txt Diff-intervalle contre v5 : 1: 2d720a6beb = 1: fb53834bd3 t: make test-bloom initialize repository 2: 530704736a = 2: 8170f55d65 t1001: use $ZERO_OID 3: 33e7822d0e ! 3: 94b585296d t3305: make hash agnostic @@ t/t3305-notes-fanout.sh: test_description='Test that adding/removing many notes echo $path | grep -q "^\([0-9a-f]\{2\}/\)\{$fanout\}[0-9a-f]\{$after_last_slash\}$" } -@@ t/t3305-notes-fanout.sh: all_notes_have_fanout() { - } - - test_expect_success 'tweak test environment' ' -+ test_oid_init && - git checkout -b nondeterminism && - test_commit A && - git checkout --orphan with_notes; 4: 99081937cf ! 4: 82b373b830 t3404: prepare 'short SHA-1 collision' tests for SHA-256 @@ Commit message Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> ## t/t3404-rebase-interactive.sh ## -@@ t/t3404-rebase-interactive.sh: Initial setup: - . "$TEST_DIRECTORY"/lib-rebase.sh - - test_expect_success 'setup' ' -+ test_oid_init && - test_commit A file1 && - test_commit B file1 && - test_commit C file2 && @@ t/t3404-rebase-interactive.sh: test_expect_success 'rebase -i error on commits with \ in message' ' test_expect_code 1 grep " emp" error ' 5: 3cfa8bba75 = 5: adc32c2903 t6100: make hash size independent 6: 9a7de5790c = 6: 40db5bb392 t6101: make hash size independent 7: 76942eec3d ! 7: d4055790f3 t6301: make hash size independent @@ Commit message Instead of hard-coding a fixed length example object ID in the test, compute one using the translation tables. Move a variable into the - setup block so that we can ensure the exit status of test_oid_init is + setup block so that we can ensure the exit status of test_oid is checked. Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> @@ t/t6301-for-each-ref-errors.sh: test_description='for-each-ref errors for broken -MISSING=abababababababababababababababababababab test_expect_success setup ' -+ test_oid_init && + MISSING=$(test_oid deadbeef) && git commit --allow-empty -m "Initial" && git tag testtag && 8: b30a8a6736 = 8: a9578382ab t6500: specify test values for SHA-256 9: c3d68dcf1b ! 9: b022dda379 t6501: avoid hard-coded objects @@ Commit message Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> ## t/t6501-freshen-objects.sh ## -@@ t/t6501-freshen-objects.sh: maybe_repack () { - fi - } - -+test_expect_success 'setup' ' -+ test_oid_init -+' -+ - for repack in '' true; do - title=${repack:+repack} - title=${title:-loose} @@ t/t6501-freshen-objects.sh: for repack in '' true; do done 10: 865662f5c5 ! 10: d9eda002b9 t7003: compute appropriate length constant @@ Commit message Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> ## t/t7003-filter-branch.sh ## -@@ t/t7003-filter-branch.sh: test_description='git filter-branch' - . "$TEST_DIRECTORY/lib-gpg.sh" - - test_expect_success 'setup' ' -+ test_oid_init && - test_commit A && - GIT_COMMITTER_DATE="@0 +0000" GIT_AUTHOR_DATE="@0 +0000" && - test_commit --notick B && @@ t/t7003-filter-branch.sh: test_expect_success 'rewrite submodule with another content' ' ' 11: 1a7bd71fb4 = 11: 02da9e5630 t7063: make hash size independent 12: 55c545cf1f = 12: 4f567ee443 t7201: abstract away SHA-1-specific constants 13: 9875576b08 = 13: cec9eca4a3 t7102: abstract away SHA-1-specific constants 14: d1a2f91516 = 14: 0408e53002 t7400: make hash size independent 15: 9acdbf294c = 15: 3f0bb9751d t7405: make hash size independent 16: 2b506517de = 16: 406c9088af t7506: avoid checking for SHA-1-specific constants 17: 976974106c = 17: bea582c49f t7508: use $ZERO_OID instead of hard-coded constant 18: 459e6d2455 = 18: bb044354bc t8002: make hash size independent 19: 8c19b1280d ! 19: 888ffd32d3 t8003: make hash size independent @@ t/t8003-blame-corner-cases.sh: test_description='git blame corner cases' pick_fc='s/^[0-9a-f^]* *\([^ ]*\) *(\([^ ]*\) .*/\1-\2/' test_expect_success setup ' -+ test_oid_init && - +- echo A A A A A >one && echo B B B B B >two && + echo C C C C C >tres && @@ t/t8003-blame-corner-cases.sh: test_expect_success 'blame coalesce' ' $oid 1) ABC $oid 2) DEF 20: 42e8d962dc = 20: a6f7345990 t8011: make hash size independent 21: 076249fdea = 21: 25458092e4 t9300: abstract away SHA-1-specific constants 22: 36fed34e25 = 22: 637673d0f4 t9300: use $ZERO_OID instead of hard-coded object ID 23: fd2b44e138 ! 23: 77a42dbf51 t9301: make hash size independent @@ Commit message Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> ## t/t9301-fast-import-notes.sh ## -@@ t/t9301-fast-import-notes.sh: EOF - INPUT_END - - test_expect_success 'set up master branch' ' -- -+ test_oid_init && - git fast-import <input && - git whatchanged master - ' @@ t/t9301-fast-import-notes.sh: test_expect_success 'add lots of commits and notes' ' ' 24: 5cf2612131 ! 24: 3c405c54fd t9350: make hash size independent @@ Commit message Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> ## t/t9350-fast-export.sh ## -@@ t/t9350-fast-export.sh: test_description='git fast-export' - . ./test-lib.sh - - test_expect_success 'setup' ' -+ test_oid_init && - - echo break it > file0 && - git add file0 && @@ t/t9350-fast-export.sh: test_expect_success 'reencoding iso-8859-7' ' sed "s/wer/i18n/" iso-8859-7.fi | (cd new && 25: 64b56a029a = 25: c75d879bca t9500: ensure that algorithm info is preserved in config 26: 46800750af = 26: 82f2a6146f t9700: make hash size independent 27: 9c5a7b9c38 = 27: 60d7922842 t5308: make test work with SHA-256 28: 1a98d1e4b6 = 28: c668823701 t0410: mark test with SHA1 prerequisite 29: 359543b8de < -: ---------- http-fetch: set up git directory before parsing pack hashes -: ---------- > 29: e1e0e04e83 http-fetch: set up git directory before parsing pack hashes 30: bc5e6f6199 = 30: 96e770dce2 builtin/verify-pack: implement an --object-format option 31: 10f9420219 = 31: dd79604c8b bundle: add new version for use with SHA-256 32: 59717a9f42 = 32: 425fdcca3d setup: add support for reading extensions.objectformat 33: 8313384a88 ! 33: e7256281f4 Enable SHA-256 support by default @@ Metadata Author: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> ## Commit message ## - Enable SHA-256 support by default + repository: enable SHA-256 support by default - Now that the we have a complete SHA-256 implementation in Git, let's - enable it so people can use it. Remove the ENABLE_SHA256 define - constant everywhere it's used. Add tests for initializing a repository - with SHA-256. + Now that we have a complete SHA-256 implementation in Git, let's enable + it so people can use it. Remove the ENABLE_SHA256 define constant + everywhere it's used. Add tests for initializing a repository with + SHA-256. Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> 34: e8439aa0d0 = 34: 65d43826f6 t: add test_oid option to select hash algorithm 35: e5c9553da9 = 35: d32ff6431b t: allow testing different hash algorithms via environment 36: 2a6f2ccd55 ! 36: 8cc8c77f48 t: make SHA1 prerequisite depend on default hash @@ t/test-lib.sh: test_lazy_prereq CURL ' + case "$GIT_DEFAULT_HASH" in + sha1) true ;; + "") test $(git hash-object /dev/null) = e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ;; -+ *) false :: ++ *) false ;; + esac ' 37: 2eec901cdf = 37: 01d865b03e ci: run tests with SHA-256 38: 6a7fb3e911 = 38: 83f565d1d2 docs: add documentation for extensions.objectFormat 39: 448faa92fe ! 39: 6c3bf65a7d t: remove test_oid_init in tests @@ t/t1500-rev-parse.sh: test_rev_parse () { cp -R .git repo.git ' - ## t/t3305-notes-fanout.sh ## -@@ t/t3305-notes-fanout.sh: all_notes_have_fanout() { - } - - test_expect_success 'tweak test environment' ' -- test_oid_init && - git checkout -b nondeterminism && - test_commit A && - git checkout --orphan with_notes; - ## t/t3308-notes-merge.sh ## @@ t/t3308-notes-merge.sh: test_expect_success setup ' # Copy notes to remote-notes @@ t/t3308-notes-merge.sh: test_expect_success setup ' hash4a sha1:5e93d24084d32e1cb61f7070505b9d2530cca987 hash3a sha1:8366731eeee53787d2bdf8fc1eff7d94757e8da0 - ## t/t3404-rebase-interactive.sh ## -@@ t/t3404-rebase-interactive.sh: Initial setup: - . "$TEST_DIRECTORY"/lib-rebase.sh - - test_expect_success 'setup' ' -- test_oid_init && - test_commit A file1 && - test_commit B file1 && - test_commit C file2 && - ## t/t3600-rm.sh ## @@ t/t3600-rm.sh: test_expect_success 'refresh index before checking if it is up-to-date' ' ' @@ t/t6006-rev-list-format.sh: changed_iso88591=$(echo "$changed" | iconv -f utf-8 : >foo && git add foo && git config i18n.commitEncoding $test_encoding && - - ## t/t6301-for-each-ref-errors.sh ## -@@ t/t6301-for-each-ref-errors.sh: test_description='for-each-ref errors for broken refs' - ZEROS=$ZERO_OID - - test_expect_success setup ' -- test_oid_init && - MISSING=$(test_oid deadbeef) && - git commit --allow-empty -m "Initial" && - git tag testtag && - - ## t/t6501-freshen-objects.sh ## -@@ t/t6501-freshen-objects.sh: maybe_repack () { - fi - } - --test_expect_success 'setup' ' -- test_oid_init --' -- - for repack in '' true; do - title=${repack:+repack} - title=${title:-loose} - - ## t/t7003-filter-branch.sh ## -@@ t/t7003-filter-branch.sh: test_description='git filter-branch' - . "$TEST_DIRECTORY/lib-gpg.sh" - - test_expect_success 'setup' ' -- test_oid_init && - test_commit A && - GIT_COMMITTER_DATE="@0 +0000" GIT_AUTHOR_DATE="@0 +0000" && - test_commit --notick B && - - ## t/t8003-blame-corner-cases.sh ## -@@ t/t8003-blame-corner-cases.sh: test_description='git blame corner cases' - pick_fc='s/^[0-9a-f^]* *\([^ ]*\) *(\([^ ]*\) .*/\1-\2/' - - test_expect_success setup ' -- test_oid_init && -- - echo A A A A A >one && - echo B B B B B >two && - echo C C C C C >tres && - - ## t/t9301-fast-import-notes.sh ## -@@ t/t9301-fast-import-notes.sh: EOF - INPUT_END - - test_expect_success 'set up master branch' ' -- test_oid_init && - git fast-import <input && - git whatchanged master - ' - - ## t/t9350-fast-export.sh ## -@@ t/t9350-fast-export.sh: test_description='git fast-export' - . ./test-lib.sh - - test_expect_success 'setup' ' -- test_oid_init && -- - echo break it > file0 && - git add file0 && - test_tick &&