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

[PATCH v5 00/39] SHA-256, part 3/3

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Jul 28, 2020, 23:34 UTC
Message-ID
<20200728233446.3066485-1-sandals@crustytoothpaste.net>

This is the final part required for the stage 4 implementation of SHA-256.

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
  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                              |   4 +-
 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              |  13 +-
 t/t9350-fast-export.sh                    |  15 +--
 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, 635 insertions(+), 354 deletions(-)
 create mode 100644 Documentation/config/extensions.txt
Diff-intervalle contre v4 :
 1:  2d720a6beb =  1:  fb53834bd3 t: make test-bloom initialize repository
 2:  530704736a =  2:  8170f55d65 t1001: use $ZERO_OID
 3:  33e7822d0e =  3:  4b14099f1a t3305: make hash agnostic
 4:  82a6827f45 !  4:  8d3ce7cccd t3404: prepare 'short SHA-1 collision' tests for SHA-256
    @@ Commit message
         commit message "collide2" to find such a collision. To make it easier to
         find such a collision, we reduce the number of digits to 4.
     
    -    The `t/oid-info/oid` file now lists the values found in that way, and
    -    the test cases are modified to use those values.
    -
         As the tests are no longer dependent on SHA-1, we also rename their
         titles to talk about "commit IDs" instead of "SHA-1s".
     
 5:  23cbd25060 =  5:  8329368075 t6100: make hash size independent
 6:  9e2553b1f2 =  6:  63595c30d4 t6101: make hash size independent
 7:  c2c5dd407e =  7:  88c7a501db t6301: make hash size independent
 8:  1ab4ed032a =  8:  4546001417 t6500: specify test values for SHA-256
 9:  54fcc025bb =  9:  4a9304a648 t6501: avoid hard-coded objects
10:  a2f420fcd4 = 10:  7785b7cc1f t7003: compute appropriate length constant
11:  766bba42f6 ! 11:  71db1716f5 t7063: make hash size independent
    @@ Metadata
      ## Commit message ##
         t7063: make hash size independent
     
    -    Use test_oid instead of hard-coding a fixed size all-zeros object ID.
    +    Use test_oid instead of hard-coding algorithm-specific constants and
    +    all-zero values.
     
         Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
     
    @@ t/t7063-status-untracked-cache.sh: EOF
      two
      EOF
      	test_cmp ../expect-from-test-dump ../actual
    -@@ t/t7063-status-untracked-cache.sh: test_expect_success 'using --untracked-cache does not fail when core.untrackedCa
    - '
    - 
    - test_expect_success 'setting core.untrackedCache to keep' '
    -+	touch ../expect-from-test-dump &&
    - 	git config core.untrackedCache keep &&
    - 	git update-index --untracked-cache &&
    - 	test-tool dump-untracked-cache >../actual &&
     @@ t/t7063-status-untracked-cache.sh: test_expect_success '"status" after file replacement should be clean with UC=tru
      	test-tool dump-untracked-cache >../actual &&
      	grep -F "recurse valid" ../actual >../actual.grep &&
12:  66d242ccd9 ! 12:  79dcdc3496 t7201: abstract away SHA-1-specific constants
    @@ t/t7201-co.sh: test_expect_success 'switch to another branch while carrying a de
      	test_line_count = 1 messages &&
      	H=$(git rev-parse --verify HEAD) &&
      	M=$(git show-ref -s --verify refs/heads/master) &&
    -@@ t/t7201-co.sh: test_expect_success 'checkout to detach HEAD' '
    +@@ t/t7201-co.sh: test_expect_success 'checkout to detach HEAD (with advice declined)' '
    + 
    + test_expect_success 'checkout to detach HEAD' '
      	git config advice.detachedHead true &&
    ++	rev=$(git rev-parse --short renamer^) &&
      	git checkout -f renamer && git clean -f &&
      	GIT_TEST_GETTEXT_POISON=false git checkout renamer^ 2>messages &&
     -	grep "HEAD is now at 7329388" messages &&
13:  090041ee54 = 13:  f89560df08 t7102: abstract away SHA-1-specific constants
14:  4a6991d6a1 = 14:  79800ba8a3 t7400: make hash size independent
15:  d39bbeb5a2 = 15:  07d287fe0f t7405: make hash size independent
16:  5b0d52ae0e = 16:  1ee37967f2 t7506: avoid checking for SHA-1-specific constants
17:  54d1706107 = 17:  ba3c997fd7 t7508: use $ZERO_OID instead of hard-coded constant
18:  f3f4239ce9 ! 18:  362e0a9440 t8002: make hash size independent
    @@ Metadata
      ## Commit message ##
         t8002: make hash size independent
     
    -    Compute the length of an object ID instead of of hard-coding 40-based
    +    Compute the length of an object ID instead of hard-coding 40-based
         values.
     
         Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
    @@ t/t8002-blame.sh: test_description='git blame'
      . "$TEST_DIRECTORY"/annotate-tests.sh
      
     +test_expect_success 'setup' '
    -+	test_oid_init
    ++	hexsz=$(test_oid hexsz)
     +'
     +
      test_expect_success 'blame untracked file in empty repo' '
    @@ t/t8002-blame.sh: test_expect_success 'blame --abbrev=<n> works' '
      test_expect_success 'blame -l aligns regular and boundary commits' '
     -	check_abbrev 40 -l HEAD &&
     -	check_abbrev 39 -l ^HEAD
    -+	hexsz=$(test_oid hexsz) &&
     +	check_abbrev $hexsz         -l HEAD &&
     +	check_abbrev $((hexsz - 1)) -l ^HEAD
      '
19:  719db3822e = 19:  eeeba30e75 t8003: make hash size independent
20:  803e5665e9 ! 20:  a71b7fb7f1 t8011: make hash size independent
    @@ t/t8011-blame-split-file.sh: test_expect_success 'setup simulated porcelain' '
      	my $field = shift;
      	while (<>) {
     -		if (/^[0-9a-f]{40} /) {
    -+		if (/^[0-9a-f]{40,64} /) {
    ++		if (/^[0-9a-f]{40,} /) {
      			flush();
      			$hash = $&;
      		} elsif (/^$field (.*)/) {
21:  d1c4351bc9 ! 21:  b9a4ac6547 t9300: abstract away SHA-1-specific constants
    @@ Commit message
         t9300: abstract away SHA-1-specific constants
     
         Adjust the test so that it computes variables for object IDs instead of
    -    using hard-coded hashes.
    +    using hard-coded hashes.  In addition, use cut to filter out the object
    +    IDs and verify only the information that we're really interested in.
     
         Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
     
      ## t/t9300-fast-import.sh ##
     @@ t/t9300-fast-import.sh: test_expect_success 'A: verify pack' '
    + '
      
      test_expect_success 'A: verify diff' '
    ++	copy=$(git rev-parse --verify master:file2) &&
      	cat >expect <<-EOF &&
     -	:000000 100755 0000000000000000000000000000000000000000 7123f7f44e39be127c5eb701e5968176ee9d78b1 A	copy-of-file2
    -+	:000000 100755 0000000000000000000000000000000000000000 $(git rev-parse --verify master:file2) A	copy-of-file2
    ++	:000000 100755 0000000000000000000000000000000000000000 $copy A	copy-of-file2
      	EOF
      	git diff-tree -M -r master verify--import-marks >actual &&
      	compare_diff_raw expect actual &&
22:  db74bf3c8c ! 22:  8d617381c0 t9300: use $ZERO_OID instead of hard-coded object ID
    @@ t/t9300-fast-import.sh: test_expect_success 'A: create pack from stdin' '
      	tag nested
      	mark :7
     @@ t/t9300-fast-import.sh: test_expect_success 'A: verify pack' '
    - 
      test_expect_success 'A: verify diff' '
    + 	copy=$(git rev-parse --verify master:file2) &&
      	cat >expect <<-EOF &&
    --	:000000 100755 0000000000000000000000000000000000000000 $(git rev-parse --verify master:file2) A	copy-of-file2
    -+	:000000 100755 $ZERO_OID $(git rev-parse --verify master:file2) A	copy-of-file2
    +-	:000000 100755 0000000000000000000000000000000000000000 $copy A	copy-of-file2
    ++	:000000 100755 $ZERO_OID $copy A	copy-of-file2
      	EOF
      	git diff-tree -M -r master verify--import-marks >actual &&
      	compare_diff_raw expect actual &&
23:  fa7daed2bf = 23:  d3ddbe3bcf t9301: make hash size independent
24:  84aef86ac0 = 24:  70bfe6c076 t9350: make hash size independent
25:  541108fc64 = 25:  c784e76075 t9500: ensure that algorithm info is preserved in config
26:  2de5d2da58 = 26:  00e82dc23e t9700: make hash size independent
27:  c916058c38 = 27:  2d03d136df t5308: make test work with SHA-256
28:  b0781430ef = 28:  d8941dd81d t0410: mark test with SHA1 prerequisite
29:  230a933e87 ! 29:  39eb2e82b5 http-fetch: set up git directory before parsing pack hashes
    @@ Commit message
         To ensure that we can parse packfile hashes of the right length, let's
         set up the git directory before we start parsing arguments.
     
    +    Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
    +
      ## http-fetch.c ##
     @@ http-fetch.c: int cmd_main(int argc, const char **argv)
      	int packfile = 0;
      	struct object_id packfile_hash;
      
    -+	setup_git_directory();
    ++	setup_git_directory_gently(NULL);
     +
      	while (arg < argc && argv[arg][0] == '-') {
      		const char *p;
30:  d3dbe9e760 ! 30:  7c71a12f67 builtin/verify-pack: implement an --object-format option
    @@ builtin/verify-pack.c
      {
      	struct child_process index_pack = CHILD_PROCESS_INIT;
     -	const char *argv[] = {"index-pack", NULL, NULL, NULL };
    --	struct strbuf arg = STRBUF_INIT;
    -+	struct argv_array argv = ARGV_ARRAY_INIT;
    -+	struct strbuf arg = STRBUF_INIT, hash_arg = STRBUF_INIT;
    ++	struct argv_array *argv = &index_pack.args;
    + 	struct strbuf arg = STRBUF_INIT;
      	int verbose = flags & VERIFY_PACK_VERBOSE;
      	int stat_only = flags & VERIFY_PACK_STAT_ONLY;
      	int err;
      
    -+	argv_array_push(&argv, "index-pack");
    ++	argv_array_push(argv, "index-pack");
     +
      	if (stat_only)
     -		argv[1] = "--verify-stat-only";
    -+		argv_array_push(&argv, "--verify-stat-only");
    ++		argv_array_push(argv, "--verify-stat-only");
      	else if (verbose)
     -		argv[1] = "--verify-stat";
    -+		argv_array_push(&argv, "--verify-stat");
    ++		argv_array_push(argv, "--verify-stat");
      	else
     -		argv[1] = "--verify";
    -+		argv_array_push(&argv, "--verify");
    ++		argv_array_push(argv, "--verify");
     +
    -+	if (hash_algo) {
    -+		strbuf_addf(&hash_arg, "--object-format=%s", hash_algo);
    -+		argv_array_push(&argv, hash_arg.buf);
    -+	}
    ++	if (hash_algo)
    ++		argv_array_pushf(argv, "--object-format=%s", hash_algo);
      
      	/*
      	 * In addition to "foo.pack" we accept "foo.idx" and "foo";
    @@ builtin/verify-pack.c: static int verify_one_pack(const char *path, unsigned int
      	    !ends_with(arg.buf, ".pack"))
      		strbuf_addstr(&arg, ".pack");
     -	argv[2] = arg.buf;
    -+	argv_array_push(&argv, arg.buf);
    ++	argv_array_push(argv, arg.buf);
      
     -	index_pack.argv = argv;
    -+	index_pack.argv = argv.argv;
      	index_pack.git_cmd = 1;
      
      	err = run_command(&index_pack);
    -@@ builtin/verify-pack.c: static int verify_one_pack(const char *path, unsigned int flags)
    - 		}
    - 	}
    - 	strbuf_release(&arg);
    -+	argv_array_clear(&argv);
    - 
    - 	return err;
    - }
     @@ builtin/verify-pack.c: int cmd_verify_pack(int argc, const char **argv, const char *prefix)
      {
      	int err = 0;
31:  e3805101ce ! 31:  9a0345a1f6 bundle: add new version for use with SHA-256
    @@ bundle.c: static void add_to_ref_list(const struct object_id *oid, const char *n
     +	if (skip_prefix(capability, "object-format=", &arg)) {
     +		int algo = hash_algo_by_name(arg);
     +		if (algo == GIT_HASH_UNKNOWN)
    -+			return error(_("unable to detect hash algorithm"));
    ++			return error(_("unrecognized bundle hash algorithm: %s"), arg);
     +		header->hash_algo = &hash_algos[algo];
     +		return 0;
     +	}
    @@ bundle.c: static int parse_bundle_header(int fd, struct bundle_header *header,
      		int is_prereq = 0;
      		const char *p;
      
    -+		if (header->version == 3 && *buf.buf == '@') {
    -+			buf.buf[--buf.len] = '\0';
    -+			if (parse_capability(header, buf.buf + 1)) {
    -+				status = -1;
    -+				break;
    -+			}
    -+			continue;
    -+		}
    -+
    - 		if (*buf.buf == '-') {
    - 			is_prereq = 1;
    - 			strbuf_remove(&buf, 0, 1);
    - 		}
    +-		if (*buf.buf == '-') {
    +-			is_prereq = 1;
    +-			strbuf_remove(&buf, 0, 1);
    +-		}
      		strbuf_rtrim(&buf);
      
     -		if (!header->hash_algo) {
     -			header->hash_algo = detect_hash_algo(&buf);
     -			if (!header->hash_algo) {
     -				error(_("unknown hash algorithm length"));
    --				status = -1;
    --				break;
    --			}
    --		}
    --
    ++		if (header->version == 3 && *buf.buf == '@') {
    ++			if (parse_capability(header, buf.buf + 1)) {
    + 				status = -1;
    + 				break;
    + 			}
    ++			continue;
    ++		}
    ++
    ++		if (*buf.buf == '-') {
    ++			is_prereq = 1;
    ++			strbuf_remove(&buf, 0, 1);
    + 		}
    + 
      		/*
    - 		 * Tip lines have object name, SP, and refname.
    - 		 * Prerequisites have object name that is optionally
     @@ bundle.c: static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
      }
      
    @@ bundle.c: static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
      	int bundle_to_stdout;
      	int ref_count = 0;
      	struct rev_info revs;
    -+	int default_version = the_hash_algo == &hash_algos[GIT_HASH_SHA1] ? 2 : 3;
    ++	int min_version = the_hash_algo == &hash_algos[GIT_HASH_SHA1] ? 2 : 3;
      
      	bundle_to_stdout = !strcmp(path, "-");
      	if (bundle_to_stdout)
    @@ bundle.c: int create_bundle(struct repository *r, const char *path,
     -	/* write signature */
     -	write_or_die(bundle_fd, bundle_signature, strlen(bundle_signature));
     +	if (version == -1)
    -+		version = default_version;
    ++		version = min_version;
     +
     +	if (version < 2 || version > 3) {
     +		die(_("unsupported bundle version %d"), version);
    -+	} else if (version < default_version) {
    ++	} else if (version < min_version) {
     +		die(_("cannot write bundle version %d with algorithm %s"), version, the_hash_algo->name);
     +	} else if (version == 2) {
     +		write_or_die(bundle_fd, v2_bundle_signature, strlen(v2_bundle_signature));
    @@ t/t5510-fetch.sh: test_expect_success 'create bundle 1' '
      '
      
      test_expect_success 'header of bundle looks right' '
    - 	head -n 4 "$D"/bundle1 &&
    +-	head -n 4 "$D"/bundle1 &&
     -	head -n 1 "$D"/bundle1 | grep "^#" &&
     -	head -n 2 "$D"/bundle1 | grep "^-$OID_REGEX " &&
     -	head -n 3 "$D"/bundle1 | grep "^$OID_REGEX " &&
    @@ t/t5510-fetch.sh: test_expect_success 'create bundle 1' '
     +	cat >expect <<-EOF &&
     +	# v3 git bundle
     +	@object-format=$(test_oid algo)
    -+	-OID message
    -+	OID message
    ++	-OID updated by origin
    ++	OID refs/heads/master
     +
     +	EOF
    -+	sed -e "s/$OID_REGEX .*/OID message/g" -e "5q" "$D"/bundle1 >actual &&
    ++	sed -e "s/$OID_REGEX/OID/g" -e "5q" "$D"/bundle1 >actual &&
     +	test_cmp expect actual
      '
      
32:  c941fcf63c = 32:  4b72b98ce7 setup: add support for reading extensions.objectformat
33:  7c6264ac79 ! 33:  73ef3ef66a Enable SHA-256 support by default
    @@ t/t0001-init.sh: test_expect_success 're-init from a linked worktree' '
     +'
     +
     +test_expect_success 'init honors --object-format' '
    -+	git init --object-format=sha256 explicit &&
    -+	git -C explicit rev-parse --show-object-format >actual &&
    ++	git init --object-format=sha1 explicit-sha1 &&
    ++	git -C explicit-sha1 rev-parse --show-object-format >actual &&
    ++	echo sha1 >expected &&
    ++	test_cmp expected actual &&
    ++	git init --object-format=sha256 explicit-sha256 &&
    ++	git -C explicit-sha256 rev-parse --show-object-format >actual &&
     +	echo sha256 >expected &&
     +	test_cmp expected actual
     +'
34:  2719ab94e6 = 34:  2512a1669c t: add test_oid option to select hash algorithm
35:  1c8e5041d1 = 35:  015636559b t: allow testing different hash algorithms via environment
36:  7213d59222 <  -:  ---------- t: make SHA1 prerequisite depend on default hash
 -:  ---------- > 36:  6f2dec51cd t: make SHA1 prerequisite depend on default hash
37:  caf6c026ba ! 37:  32536503f3 ci: run tests with SHA-256
    @@ Commit message
         run as fast as possible, so we wouldn't want to add a third run to the
         linux-gcc job.  To make sure we properly exercise the code, let's run
         the tests in the default mode (SHA-1) first and then run a second time
    -    with SHA-256.
    +    with SHA-256.  We explicitly specify SHA-1 for the first run so that if
    +    we change the default in the future, we make sure to test both cases.
     
         Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
     
    @@ ci/run-build-and-tests.sh: linux-gcc)
      	make test
      	;;
     +linux-clang)
    ++	export GIT_TEST_DEFAULT_HASH=sha1
     +	make test
     +	export GIT_TEST_DEFAULT_HASH=sha256
     +	make test
38:  ec4e6ae166 ! 38:  cc5679d353 docs: add documentation for extensions.objectFormat
    @@ Documentation/config/extensions.txt (new)
     +extensions.objectFormat::
     +	Specify the hash algorithm to use.  The acceptable values are `sha1` and
     +	`sha256`.  If not specified, `sha1` is assumed.  It is an error to specify
    -+	this key unless `core.repositoryformatversion` is 1.
    ++	this key unless `core.repositoryFormatVersion` is 1.
     ++
     +Note that this setting should only be set by linkgit:git-init[1] or
     +linkgit:git-clone[1].  Trying to change it after initialization will not
39:  3185c62cfc ! 39:  307b75c88e t: remove test_oid_init in tests
    @@ t/t7003-filter-branch.sh: test_description='git filter-branch'
      	GIT_COMMITTER_DATE="@0 +0000" GIT_AUTHOR_DATE="@0 +0000" &&
      	test_commit --notick B &&
     
    - ## t/t8002-blame.sh ##
    -@@ t/t8002-blame.sh: test_description='git blame'
    - PROG='git blame -c'
    - . "$TEST_DIRECTORY"/annotate-tests.sh
    - 
    --test_expect_success 'setup' '
    --	test_oid_init
    --'
    --
    - test_expect_success 'blame untracked file in empty repo' '
    - 	>untracked &&
    - 	test_must_fail git blame untracked
    -
      ## 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/'
Next: brian m. carlson
Message 1 of 116 in “SHA-256, part 3/3”
  1. 00/39 SHA-256, part 3/3brian m. carlson, Jul 28, 2020
  2. 02/39 t1001: use $ZERO_OIDbrian m. carlson, Jul 28, 2020
  3. 03/39 t3305: make hash agnosticbrian m. carlson, Jul 28, 2020
  4. 04/39 t3404: prepare 'short SHA-1 collision' tests for SHA-256brian m. carlson, Jul 28, 2020
  5. 06/39 t6101: make hash size independentbrian m. carlson, Jul 28, 2020
  6. 10/39 t7003: compute appropriate length constantbrian m. carlson, Jul 28, 2020
  7. 12/39 t7201: abstract away SHA-1-specific constantsbrian m. carlson, Jul 28, 2020
  8. 15/39 t7405: make hash size independentbrian m. carlson, Jul 28, 2020
  9. 13/39 t7102: abstract away SHA-1-specific constantsbrian m. carlson, Jul 28, 2020
  10. 20/39 t8011: make hash size independentbrian m. carlson, Jul 28, 2020
  11. 17/39 t7508: use $ZERO_OID instead of hard-coded constantbrian m. carlson, Jul 28, 2020
  12. 27/39 t5308: make test work with SHA-256brian m. carlson, Jul 28, 2020
  13. 26/39 t9700: make hash size independentbrian m. carlson, Jul 28, 2020
  14. 24/39 t9350: make hash size independentbrian m. carlson, Jul 28, 2020
  15. 22/39 t9300: use $ZERO_OID instead of hard-coded object IDbrian m. carlson, Jul 28, 2020
  16. 32/39 setup: add support for reading extensions.objectformatbrian m. carlson, Jul 28, 2020
  17. 35/39 t: allow testing different hash algorithms via environmentbrian m. carlson, Jul 28, 2020
  18. 38/39 docs: add documentation for extensions.objectFormatbrian m. carlson, Jul 28, 2020
  19. 36/39 t: make SHA1 prerequisite depend on default hashbrian m. carlson, Jul 28, 2020
  20. Eric SunshineJul 29, 2020
  21. 31/39 bundle: add new version for use with SHA-256brian m. carlson, Jul 28, 2020
  22. Eric SunshineJul 29, 2020
  23. brian m. carlsonJul 29, 2020
  24. 39/39 t: remove test_oid_init in testsbrian m. carlson, Jul 28, 2020
  25. 34/39 t: add test_oid option to select hash algorithmbrian m. carlson, Jul 28, 2020
  26. 37/39 ci: run tests with SHA-256brian m. carlson, Jul 28, 2020
  27. 25/39 t9500: ensure that algorithm info is preserved in configbrian m. carlson, Jul 28, 2020
  28. 01/39 t: make test-bloom initialize repositorybrian m. carlson, Jul 28, 2020
  29. 05/39 t6100: make hash size independentbrian m. carlson, Jul 28, 2020
  30. 14/39 t7400: make hash size independentbrian m. carlson, Jul 28, 2020
  31. 11/39 t7063: make hash size independentbrian m. carlson, Jul 28, 2020
  32. 09/39 t6501: avoid hard-coded objectsbrian m. carlson, Jul 28, 2020
  33. 07/39 t6301: make hash size independentbrian m. carlson, Jul 28, 2020
  34. 29/39 http-fetch: set up git directory before parsing pack hashesbrian m. carlson, Jul 28, 2020
  35. Eric SunshineJul 29, 2020
  36. 21/39 t9300: abstract away SHA-1-specific constantsbrian m. carlson, Jul 28, 2020
  37. 30/39 builtin/verify-pack: implement an --object-format optionbrian m. carlson, Jul 28, 2020
  38. 33/39 Enable SHA-256 support by defaultbrian m. carlson, Jul 28, 2020
  39. Eric SunshineJul 29, 2020
  40. 28/39 t0410: mark test with SHA1 prerequisitebrian m. carlson, Jul 28, 2020
  41. 08/39 t6500: specify test values for SHA-256brian m. carlson, Jul 28, 2020
  42. 18/39 t8002: make hash size independentbrian m. carlson, Jul 28, 2020
  43. Eric SunshineJul 29, 2020
  44. brian m. carlsonJul 29, 2020
  45. 19/39 t8003: make hash size independentbrian m. carlson, Jul 28, 2020
  46. 23/39 t9301: make hash size independentbrian m. carlson, Jul 28, 2020
  47. 16/39 t7506: avoid checking for SHA-1-specific constantsbrian m. carlson, Jul 28, 2020
  48. 00/39 SHA-256, part 3/3brian m. carlson, Jul 29, 2020
  49. 01/39 t: make test-bloom initialize repositorybrian m. carlson, Jul 29, 2020
  50. 04/39 t3404: prepare 'short SHA-1 collision' tests for SHA-256brian m. carlson, Jul 29, 2020
  51. 07/39 t6301: make hash size independentbrian m. carlson, Jul 29, 2020
  52. 09/39 t6501: avoid hard-coded objectsbrian m. carlson, Jul 29, 2020
  53. 11/39 t7063: make hash size independentbrian m. carlson, Jul 29, 2020
  54. 13/39 t7102: abstract away SHA-1-specific constantsbrian m. carlson, Jul 29, 2020
  55. 16/39 t7506: avoid checking for SHA-1-specific constantsbrian m. carlson, Jul 29, 2020
  56. 17/39 t7508: use $ZERO_OID instead of hard-coded constantbrian m. carlson, Jul 29, 2020
  57. 19/39 t8003: make hash size independentbrian m. carlson, Jul 29, 2020
  58. 22/39 t9300: use $ZERO_OID instead of hard-coded object IDbrian m. carlson, Jul 29, 2020
  59. 25/39 t9500: ensure that algorithm info is preserved in configbrian m. carlson, Jul 29, 2020
  60. 27/39 t5308: make test work with SHA-256brian m. carlson, Jul 29, 2020
  61. 26/39 t9700: make hash size independentbrian m. carlson, Jul 29, 2020
  62. 31/39 bundle: add new version for use with SHA-256brian m. carlson, Jul 29, 2020
  63. 38/39 docs: add documentation for extensions.objectFormatbrian m. carlson, Jul 29, 2020
  64. 33/39 repository: enable SHA-256 support by defaultbrian m. carlson, Jul 29, 2020
  65. 37/39 ci: run tests with SHA-256brian m. carlson, Jul 29, 2020
  66. 30/39 builtin/verify-pack: implement an --object-format optionbrian m. carlson, Jul 29, 2020
  67. 35/39 t: allow testing different hash algorithms via environmentbrian m. carlson, Jul 29, 2020
  68. 32/39 setup: add support for reading extensions.objectformatbrian m. carlson, Jul 29, 2020
  69. 39/39 t: remove test_oid_init in testsbrian m. carlson, Jul 29, 2020
  70. 03/39 t3305: make hash agnosticbrian m. carlson, Jul 29, 2020
  71. 05/39 t6100: make hash size independentbrian m. carlson, Jul 29, 2020
  72. 08/39 t6500: specify test values for SHA-256brian m. carlson, Jul 29, 2020
  73. 12/39 t7201: abstract away SHA-1-specific constantsbrian m. carlson, Jul 29, 2020
  74. 06/39 t6101: make hash size independentbrian m. carlson, Jul 29, 2020
  75. 18/39 t8002: make hash size independentbrian m. carlson, Jul 29, 2020
  76. 10/39 t7003: compute appropriate length constantbrian m. carlson, Jul 29, 2020
  77. 14/39 t7400: make hash size independentbrian m. carlson, Jul 29, 2020
  78. 15/39 t7405: make hash size independentbrian m. carlson, Jul 29, 2020
  79. 02/39 t1001: use $ZERO_OIDbrian m. carlson, Jul 29, 2020
  80. 36/39 t: make SHA1 prerequisite depend on default hashbrian m. carlson, Jul 29, 2020
  81. 28/39 t0410: mark test with SHA1 prerequisitebrian m. carlson, Jul 29, 2020
  82. 21/39 t9300: abstract away SHA-1-specific constantsbrian m. carlson, Jul 29, 2020
  83. 24/39 t9350: make hash size independentbrian m. carlson, Jul 29, 2020
  84. 23/39 t9301: make hash size independentbrian m. carlson, Jul 29, 2020
  85. 20/39 t8011: make hash size independentbrian m. carlson, Jul 29, 2020
  86. 29/39 http-fetch: set up git directory before parsing pack hashesbrian m. carlson, Jul 29, 2020
  87. 34/39 t: add test_oid option to select hash algorithmbrian m. carlson, Jul 29, 2020
  88. Eric SunshineJul 30, 2020
  89. Junio C HamanoJul 30, 2020
  90. Ævar Arnfjörð BjarmasonMar 10, 2021
  91. Elijah NewrenMar 10, 2021
  92. Jeff KingMar 10, 2021
  93. 0/3 sha256 fixes for filter-branchJeff King, Mar 10, 2021
  94. 3/3 filter-branch: drop $_x40 globJeff King, Mar 10, 2021
  95. Junio C HamanoMar 10, 2021
  96. 1/4 git-bisect: remove unused SHA-1 $x40 shell variableÆvar Arnfjörð Bjarmason, Mar 11, 2021
  97. 0/4 bisect + tests: remove old $_x05, $_x35 and $_x40 variablesÆvar Arnfjörð Bjarmason, Mar 11, 2021
  98. 4/4 tests: get rid of $_x05 from the test suiteÆvar Arnfjörð Bjarmason, Mar 11, 2021
  99. Junio C HamanoMar 11, 2021
  100. Ævar Arnfjörð BjarmasonMar 11, 2021
  101. Junio C HamanoMar 11, 2021
  102. 3/4 shortlog tests: rewrite to get rid of --abbrev=35 hardcodingÆvar Arnfjörð Bjarmason, Mar 11, 2021
  103. Junio C HamanoMar 11, 2021
  104. Jeff KingMar 11, 2021
  105. 2/4 test-lib: remove unused $_x40 and $_z40 variablesÆvar Arnfjörð Bjarmason, Mar 11, 2021
  106. Junio C HamanoMar 11, 2021
  107. 1/3 t7003: test ref rewriting explicitlyJeff King, Mar 10, 2021
  108. Ævar Arnfjörð BjarmasonMar 11, 2021
  109. brian m. carlsonMar 11, 2021
  110. Jeff KingMar 11, 2021
  111. brian m. carlsonMar 11, 2021
  112. 2/3 filter-branch: drop multiple-ancestor warningJeff King, Mar 10, 2021
  113. Junio C HamanoMar 10, 2021
  114. Elijah NewrenMar 10, 2021
  115. Junio C HamanoMar 10, 2021
  116. brian m. carlsonMar 10, 2021

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.