From: "René Scharfe" <l.s.r@web.de>
To: Jeff King <peff@peff.net>
Cc: Git Mailing List <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>,
Christian Couder <chriscool@tuxfamily.org>
Subject: Re: [PATCH 2/2] sha1-lookup: fix handling of duplicates in sha1_pos()
Date: Wed, 01 Oct 2014 13:10:12 +0200 [thread overview]
Message-ID: <542BE114.9070300@web.de> (raw)
In-Reply-To: <20141001105006.GB10332@peff.net>
Am 01.10.2014 um 12:50 schrieb Jeff King:
> On Wed, Oct 01, 2014 at 11:43:21AM +0200, René Scharfe wrote:
>
>> If the first 18 bytes of the SHA1's of all entries are the same then
>> sha1_pos() dies and reports that the lower and upper limits of the
>> binary search were the same that this wasn't supposed to happen. This
>> is wrong because the remaining two bytes could still differ.
>>
>> Furthermore: It wouldn't be a problem if they actually were the same,
>> i.e. if all entries have the same SHA1. The code already handles
>> duplicates just fine otherwise. Simply remove the erroneous check.
>
> Yeah, I agree that assertion is just wrong.
>
> Regarding duplicates: in sha1_entry_pos, we had to handle the "not
> found" case specially, because we may have found the left-hand or
> right-hand side of a run of duplicates, and we want to return the
> correct slot where the new item would go (see the comment added by
> 171bdac). I think we don't have to deal with that here, because we are
> just dealing with the initial "mi" selection. The actual binary search
> is plain-vanilla, which handles that case just fine.
>
> I wonder if it is worth adding a test (you test only that "not found"
> produces a negative index, but not which index). Like:
api-sha1-array.txt says about sha1_array_lookup: "If not found, returns
a negative integer", and that's what the test checks.
I actually like that the value is not specified for that case because no
existing caller actually uses it and it leaves room to implement the
function e.g. using bsearch(3).
I agree that adding a "lookup non-existing entry with duplicates" test
would make t0064 more complete, though.
> diff --git a/t/t0064-sha1-array.sh b/t/t0064-sha1-array.sh
> index 3fcb8d8..7781129 100755
> --- a/t/t0064-sha1-array.sh
> +++ b/t/t0064-sha1-array.sh
> @@ -42,12 +42,12 @@ test_expect_success 'lookup' '
> '
>
> test_expect_success 'lookup non-existing entry' '
> + echo -1 >expect &&
> {
> echo20 "append " 88 44 aa 55 &&
> echo20 "lookup " 33
> } | test-sha1-array >actual &&
> - n=$(cat actual) &&
> - test "$n" -lt 0
> + test_cmp expect actual
> '
>
> test_expect_success 'lookup with duplicates' '
> @@ -61,6 +61,17 @@ test_expect_success 'lookup with duplicates' '
> test "$n" -le 3
> '
>
> +test_expect_success 'lookup non-existing entry with duplicates' '
> + echo -5 >expect &&
> + {
> + echo20 "append " 88 44 aa 55 &&
> + echo20 "append " 88 44 aa 55 &&
> + echo20 "lookup " 66
> + } | test-sha1-array >actual &&
> + test_cmp expect actual
> +'
> +
> +
> test_expect_success 'lookup with almost duplicate values' '
> {
> echo "append 5555555555555555555555555555555555555555" &&
>
next prev parent reply other threads:[~2014-10-01 11:11 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-01 9:40 [PATCH 1/2] sha1-array: add test-sha1-array and basic tests René Scharfe
2014-10-01 9:43 ` [PATCH 2/2] sha1-lookup: fix handling of duplicates in sha1_pos() René Scharfe
2014-10-01 10:50 ` Jeff King
2014-10-01 11:10 ` René Scharfe [this message]
2014-10-01 12:33 ` Jeff King
2014-10-01 14:12 ` Eric Sunshine
2014-10-01 14:11 ` [PATCH 1/2] sha1-array: add test-sha1-array and basic tests Eric Sunshine
2014-10-01 14:21 ` René Scharfe
2014-10-01 14:23 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=542BE114.9070300@web.de \
--to=l.s.r@web.de \
--cc=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.