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

Re: ab/fsck-unexpected-type (and "cat-file replace handling and optimization")

From
Jeff King <peff@peff.net>
Date
Oct 5, 2021, 22:01 UTC
Message-ID
<YVzLRSa9/vUWJPL0@coredump.intra.peff.net>
In-Reply-To
<87bl43jit5.fsf@evledraar.gmail.com>
On Tue, Oct 05, 2021 at 10:47:26PM +0200, Ævar Arnfjörð Bjarmason wrote:
Show 11 quoted lines
> > * ab/fsck-unexpected-type (2021-10-01) 17 commits
> [...]
> Note that Jeff's just-submitted cat-file series[3] will conflict with
> this, as they both adjust the same "garbage" object tests. The semantic
> conflict is minimal/none, but the textual one is probably annoying
> (e.g. his 1/5 uses a variable I split/renamed).
> 
> Jeff: Depending on what Junio thinks of queuing ab/fsck-unexpected-type
> for next what do you think about rebasing your series on top, or perhaps
> take a look at the v10[4] of it/ack it in case that helps with that (since
> you've been looking at some related code just now...).

The conflict is pretty easy to resolve: just keep my new cleanup tests, but swap out the variable name. The combined diff is below for reference (this is more readable than a remerge diff, but I guess a remerge diff could actually be applied).

I don't mind rebasing on top if that's easier for Junio, but in that case it may make sense to float the test cleanup to the front of the series.

I can also just change mine to do the --batch-all-objects tests in a separate repository (which is what the existing ones do). That has the minor advantage that we know all objects in the repository, so rather than picking out the interesting object with perl, we could generate the full expected output.

-Peff

--- diff --cc t/t1006-cat-file.sh index a5e7401af8,4a753705ec..0000000000

--- a/t/t1006-cat-file.sh
+++ b/t/t1006-cat-file.sh
@@@ -475,9 -332,18 +475,13 @@@ test_expect_success "Size of broken obj
  	test_cmp expect actual
  '
  
+ test_expect_success 'clean up broken object' '
 -	rm .git/objects/$(test_oid_to_path $bogus_sha1)
++	rm .git/objects/$(test_oid_to_path $bogus_short_sha1)
+ '
+ 
 -bogus_type="abcdefghijklmnopqrstuvwxyz1234679"
 -bogus_content="bogus"
 -bogus_size=$(strlen "$bogus_content")
 -bogus_sha1=$(echo_without_newline "$bogus_content" | git hash-object -t $bogus_type --literally -w --stdin)
 -
  test_expect_success "Type of broken object is correct when type is large" '
 -	echo $bogus_type >expect &&
 -	git cat-file -t --allow-unknown-type $bogus_sha1 >actual &&
 +	echo $bogus_long_type >expect &&
 +	git cat-file -t --allow-unknown-type $bogus_long_sha1 >actual &&
  	test_cmp expect actual
  '
  
@@@ -487,56 -353,8 +491,8 @@@ test_expect_success "Size of large brok
  	test_cmp expect actual
  '
  
- test_expect_success 'cat-file -t and -s on corrupt loose object' '
- 	git init --bare corrupt-loose.git &&
- 	(
- 		cd corrupt-loose.git &&
- 
- 		# Setup and create the empty blob and its path
- 		empty_path=$(git rev-parse --git-path objects/$(test_oid_to_path "$EMPTY_BLOB")) &&
- 		git hash-object -w --stdin </dev/null &&
- 
- 		# Create another blob and its path
- 		echo other >other.blob &&
- 		other_blob=$(git hash-object -w --stdin <other.blob) &&
- 		other_path=$(git rev-parse --git-path objects/$(test_oid_to_path "$other_blob")) &&
- 
- 		# Before the swap the size is 0
- 		cat >out.expect <<-EOF &&
- 		0
- 		EOF
- 		git cat-file -s "$EMPTY_BLOB" >out.actual 2>err.actual &&
- 		test_must_be_empty err.actual &&
- 		test_cmp out.expect out.actual &&
- 
- 		# Swap the two to corrupt the repository
- 		mv -f "$other_path" "$empty_path" &&
- 		test_must_fail git fsck 2>err.fsck &&
- 		grep "hash mismatch" err.fsck &&
- 
- 		# confirm that cat-file is reading the new swapped-in
- 		# blob...
- 		cat >out.expect <<-EOF &&
- 		blob
- 		EOF
- 		git cat-file -t "$EMPTY_BLOB" >out.actual 2>err.actual &&
- 		test_must_be_empty err.actual &&
- 		test_cmp out.expect out.actual &&
- 
- 		# ... since it has a different size now.
- 		cat >out.expect <<-EOF &&
- 		6
- 		EOF
- 		git cat-file -s "$EMPTY_BLOB" >out.actual 2>err.actual &&
- 		test_must_be_empty err.actual &&
- 		test_cmp out.expect out.actual &&
- 
- 		# So far "cat-file" has been happy to spew the found
- 		# content out as-is. Try to make it zlib-invalid.
- 		mv -f other.blob "$empty_path" &&
- 		test_must_fail git fsck 2>err.fsck &&
- 		grep "^error: inflate: data stream error (" err.fsck
- 	)
+ test_expect_success 'clean up broken object' '
 -	rm .git/objects/$(test_oid_to_path $bogus_sha1)
++	rm .git/objects/$(test_oid_to_path $bogus_long_sha1)
  '
  
  # Tests for git cat-file --follow-symlinks
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 7 of 15 in “What's cooking in git.git (Oct 2021, #01; Mon, 4)”
  1. Junio C HamanoOct 4, 2021
  2. Taylor BlauOct 4, 2021
  3. ab/refs-errno-cleanupÆvar Arnfjörð Bjarmason, Oct 5, 2021
  4. hm/paint-hits-in-log-grepÆvar Arnfjörð Bjarmason, Oct 5, 2021
  5. ab/designated-initializers-moreÆvar Arnfjörð Bjarmason, Oct 5, 2021
  6. ab/fsck-unexpected-type (and "cat-file replace handling and optimization")Ævar Arnfjörð Bjarmason, Oct 5, 2021
  7. Jeff KingOct 5, 2021
  8. Ævar Arnfjörð BjarmasonOct 6, 2021
  9. Junio C HamanoOct 7, 2021
  10. Jeff KingOct 8, 2021
  11. Junio C HamanoOct 8, 2021
  12. ab/make-sparse-for-realÆvar Arnfjörð Bjarmason, Oct 6, 2021
  13. ab/parse-options-cleanup & ab/align-parse-options-help & ab/help-config-varsÆvar Arnfjörð Bjarmason, Oct 6, 2021
  14. Junio C HamanoOct 6, 2021
  15. ab/refs-errno-cleanup & "errno" removal in the refs backendÆvar Arnfjörð Bjarmason, Oct 6, 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.