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

Re: [PATCH v8] read-cache: call verify_hdr() in a background thread

From
JHJeff Hostetler <git@jeffhostetler.com>
Date
Apr 26, 2017, 13:06 UTC
Message-ID
<5a97967d-5cf2-dc62-7f84-524556a9ca4c@jeffhostetler.com>
In-Reply-To
<xmqq8tmnss66.fsf@gitster.mtv.corp.google.com>
On 4/26/2017 12:34 AM, Junio C Hamano wrote:
Show 25 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
>
>> git@jeffhostetler.com writes:
>>
>>> From: Jeff Hostetler <jeffhost@microsoft.com>
>>>
>>> Version 8 of this patch converts the unit test to use
>>> perl to corrupt the index checksum (rather than altering
>>> a filename) and also verifies the fsck error message as
>>> suggested in response to v7 on the mailing list.
>>>
>>> If there are no other suggestions, I think this version
>>> should be considered final.
>> Oops.  The earlier one has already been in 'master' for a few days.
>> Let's make this an incremental update.
>>
>> Is the description in the following something you are OK with (so
>> that I can add your sign-off)?
>>
>> Thanks.
> By the way, I said I am fine with the two-liner version in Dscho's
> message, but I am also OK with this version that does not use a
> separate dd and instead does everything in a single invocation of
> Perl.  As long as you've tested this version, there is no point
> replacing it with yet another one.

Either version is fine. I'd say use my perl version as I have tested it and it is simple enough and already in the tree. I don't think it's worth the bother to switch it to the dd version.

Thanks Jeff

Show 68 quoted lines
> Thanks.
>
>> -- >8 --
>> From: Jeff Hostetler <jeffhost@microsoft.com>
>> Date: Tue, 25 Apr 2017 18:41:09 +0000
>> Subject: t1450: avoid use of "sed" on the index, which is a binary file
>>
>> The previous step added a path zzzzzzzz to the index, and then used
>> "sed" to replace this string to yyyyyyyy to create a test case where
>> the checksum at the end of the file does not match the contents.
>>
>> Unfortunately, use of "sed" on a non-text file is not portable.
>> Instead, use a Perl script that seeks to the end and modifies the
>> last byte of the file (where we _know_ stores the trailing
>> checksum).
>>
>>
>> ---
>>   t/t1450-fsck.sh | 33 ++++++++++++++++++++++++++-------
>>   1 file changed, 26 insertions(+), 7 deletions(-)
>>
>> diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh
>> index 677e15a7a4..eff1cd68e9 100755
>> --- a/t/t1450-fsck.sh
>> +++ b/t/t1450-fsck.sh
>> @@ -689,16 +689,35 @@ test_expect_success 'bogus head does not fallback to all heads' '
>>   	! grep $blob out
>>   '
>>   
>> +# Corrupt the checksum on the index.
>> +# Add 1 to the last byte in the SHA.
>> +corrupt_index_checksum () {
>> +    perl -w -e '
>> +	use Fcntl ":seek";
>> +	open my $fh, "+<", ".git/index" or die "open: $!";
>> +	binmode $fh;
>> +	seek $fh, -1, SEEK_END or die "seek: $!";
>> +	read $fh, my $in_byte, 1 or die "read: $!";
>> +
>> +	$in_value = unpack("C", $in_byte);
>> +	$out_value = ($in_value + 1) & 255;
>> +
>> +	$out_byte = pack("C", $out_value);
>> +
>> +	seek $fh, -1, SEEK_END or die "seek: $!";
>> +	print $fh $out_byte;
>> +	close $fh or die "close: $!";
>> +    '
>> +}
>> +
>> +# Corrupt the checksum on the index and then
>> +# verify that only fsck notices.
>>   test_expect_success 'detect corrupt index file in fsck' '
>>   	cp .git/index .git/index.backup &&
>>   	test_when_finished "mv .git/index.backup .git/index" &&
>> -	echo zzzzzzzz >zzzzzzzz &&
>> -	git add zzzzzzzz &&
>> -	sed -e "s/zzzzzzzz/yyyyyyyy/" .git/index >.git/index.yyy &&
>> -	mv .git/index.yyy .git/index &&
>> -	# Confirm that fsck detects invalid checksum
>> -	test_must_fail git fsck --cache &&
>> -	# Confirm that status no longer complains about invalid checksum
>> +	corrupt_index_checksum &&
>> +	test_must_fail git fsck --cache 2>expect &&
>> +	grep "bad index file" expect &&
>>   	git status
>>   '
>>   
Previous: Junio C HamanoNext: Junio C Hamano
Message 5 of 7 in “read-cache: call verify_hdr() in a background thread”
  1. read-cache: call verify_hdr() in a background threadgit@jeffhostetler.com, Apr 25, 2017
  2. read-cache: force_verify_index_checksumgit@jeffhostetler.com, Apr 25, 2017
  3. Junio C HamanoApr 26, 2017
  4. Junio C HamanoApr 26, 2017
  5. Jeff HostetlerApr 26, 2017
  6. Junio C HamanoApr 27, 2017
  7. Jeff HostetlerApr 26, 2017

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.