Junio C Hamano venit, vidit, dixit 15.06.2016 20:39:
> Michael J Gruber <g...@drmicha.warpmail.net> writes:
> 
>> diff --git a/tag.c b/tag.c
>> index d1dcd18..d5f090b 100644
>> --- a/tag.c
>> +++ b/tag.c
>> @@ -39,7 +39,7 @@ int gpg_verify_tag(const unsigned char *sha1, const char 
>> *name_to_report,
>>      int ret;
>>  
>>      type = sha1_object_info(sha1, NULL);
>> -    if (type != OBJ_TAG)
>> +    if ((type != OBJ_TAG) && ((type != OBJ_BLOB) || !(flags & 
>> GPG_VERIFY_BLOB)))
>>              return error("%s: cannot verify a non-tag object of type %s.",
>>                              name_to_report ?
>>                              name_to_report :
> 
> The double negation is very hard to read.  I wonder
> 
>       if ((type != OBJ_TAG) &&
>             !((type == OBJ_BLOB) && (flags & GPG_VERIFY_BLOB)))
> 
> is easier to follow?  "It is not a tag object, and it's not like we
> were asked to verify blob and the user gave us a blob, either, so
> let's complain" is easier to follow, at least for me.

As a further exercise in boolean algebra, you can pull out the negation
completely:

if (!( (type == OBJ_TAG) || ((type == OBJ_BLOB) && (flags &
GPG_VERIFY_BLOB)) ))

> Or even
> 
>       if ((flags & GPG_VERIFY_BLOB) && (type != OBJ_BLOB))
>                       "you told me to check blob but didn't give me one";
>       } else if (type != OBJ_TAG)
>               "you didn't give me a tag";
> 

I just tried to stay as close to the original as possible, but I don't
care either way. Your latter version is more strict and would require a
slight documentation change, but would be fine, too.

Michael
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to