All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: Johan Herland <johan@herland.net>, git@vger.kernel.org
Subject: Re: [PATCH] Silence error messages unless 'thorough_verify' is set
Date: Sun, 10 Jun 2007 01:15:52 -0700	[thread overview]
Message-ID: <7vwsyc8bt3.fsf@assigned-by-dhcp.cox.net> (raw)
In-Reply-To: <Pine.LNX.4.64.0706100741310.4059@racer.site> (Johannes Schindelin's message of "Sun, 10 Jun 2007 07:48:35 +0100 (BST)")

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> On Sat, 9 Jun 2007, Johan Herland wrote:
> ...
>> @@ -80,26 +82,26 @@ int parse_and_verify_tag_buffer(struct tag *item,
>>  	}
>>  
>>  	if (size < 65)
>> -		return error("Tag object failed preliminary size check");
>> +		return FAIL("Tag object failed preliminary size check");
>
> This is ugly.

... quite a bit.  A less uglier alternative we seem to use in
other places is not much better (return NULL on failure or an
error message string on error).

> ...  Guess how surprised 
> _I_ was, when I hit the error message which made me go mad.

To be fair, that ugly "char%d" was taken from mktag and not
Johan's invention.

> To drive that point home: strict checking when creating tags is good. 
> Strict checking when reading tags is bad.
>
> I strongly encourage keeping both validations separate.

While I tend ot think that keeping two separate versions is
probably better for this particular case, the above statement
has a leap in its logic.  With your "error code" scheme, you
could implement a single, verifier/parser that defines the
concrete and complete rule of how the data should look like.
That unified verifier/parser itself should be silent.  Then, you
can have each of the callers decide how lenient it wants to be,
depending on the seriousness of the error.  You can make
producer very strict and chatty while leaving consumer liberal
and more silent.

There are pros-and-cons, however.

 - Such a scheme to return error codes and have two callers that
   have different behaviours is cumbersome to set up and use.

   A good example of this is the switch/case mess in each of the
   callers of run_command_v_opt() in builtin-push.c,
   builtin-revert.c, receive-pack.c etc.  For run_command, the
   mess is justifiable because the function has enough number of
   different callers, but in the current thread, we are only
   talking about two callers (parsing vs verifying of tag
   objects).

 - It has a risk to introduce inconsitent definition of the data
   format to have completely separate producer and consumer
   implementations; this is especially true when the data in
   question is complex.

   However, a tag is sufficiently simple that my personal
   feeling is that, combined with the cumbersomeness argument
   against the unified verifier, separate producer and consumer
   implementations would be easier to manage for this particular
   case.

  reply	other threads:[~2007-06-10  8:16 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-07 22:50 error: char103: premature end of data Johannes Schindelin
2007-06-07 23:05 ` Johan Herland
2007-06-07 23:28   ` Johannes Schindelin
2007-06-07 23:47     ` Johan Herland
2007-06-07 23:55       ` Johannes Schindelin
2007-06-08  0:08       ` [PATCH] Fix failed tag parsing when tag object has no body/message (and thus ends with a single '\n') Johan Herland
2007-06-08  6:05         ` Junio C Hamano
2007-06-08  8:18           ` Johan Herland
2007-06-08 16:06             ` Junio C Hamano
2007-06-09  0:10               ` [PATCH 0/21] Refactor the tag object (take 2) Johan Herland
2007-06-09  0:12                 ` [PATCH 01/21] Remove unnecessary code and comments on non-existing 8kB tag object restriction Johan Herland
2007-06-09  0:13                 ` [PATCH 02/21] Return error messages when parsing fails Johan Herland
2007-06-09 18:01                   ` Junio C Hamano
2007-06-09 18:28                     ` Johan Herland
2007-06-09 19:42                       ` [PATCH] Silence error messages unless 'thorough_verify' is set Johan Herland
2007-06-10  6:48                         ` Johannes Schindelin
2007-06-10  8:15                           ` Junio C Hamano [this message]
2007-06-10 10:08                             ` Johannes Schindelin
2007-06-10 12:10                               ` Johan Herland
2007-06-10 18:51                                 ` Johannes Schindelin
2007-06-10 19:16                                   ` Johan Herland
2007-06-10 11:47                             ` [PATCH 0/4] Restructure the tag object Johan Herland
2007-06-10 11:49                               ` [PATCH 1/4] Make tag names (i.e. the tag object's "tag" line) optional Johan Herland
2007-06-10 22:46                                 ` Junio C Hamano
2007-06-10 23:01                                   ` Johan Herland
2007-06-11  1:11                                     ` Junio C Hamano
2007-06-10 11:50                               ` [PATCH 2/4] Introduce optional "keywords" on tag objects Johan Herland
2007-06-10 18:42                                 ` Johannes Schindelin
2007-06-10 19:04                                   ` Johan Herland
2007-06-10 21:43                                     ` Junio C Hamano
2007-06-10 23:16                                       ` Johan Herland
2007-06-11  1:01                                         ` Junio C Hamano
2007-06-10 11:50                               ` [PATCH 3/4] Documentation/git-mktag: Document the changes in tag object structure Johan Herland
2007-06-10 11:50                               ` [PATCH 4/4] git-mktag tests: Expand on mktag selftests according to the new " Johan Herland
2007-06-10 18:35                               ` [PATCH 0/4] Restructure the tag object Johannes Schindelin
2007-06-09  0:13                 ` [PATCH 03/21] Refactoring to make verify_tag() and parse_tag_buffer() more similar Johan Herland
2007-06-09  2:54                   ` Johannes Schindelin
2007-06-09 10:49                     ` Johan Herland
2007-06-09  0:14                 ` [PATCH 04/21] Refactor verification of "tagger" line to be more similar to verification of "type" and "tagger" lines Johan Herland
2007-06-09 18:01                   ` Junio C Hamano
2007-06-10  7:49                     ` Johannes Schindelin
2007-06-09  0:14                 ` [PATCH 05/21] Make parse_tag_buffer_internal() handle item == NULL Johan Herland
2007-06-09 18:01                   ` Junio C Hamano
2007-06-10  0:45                     ` [PATCH] Move check for already parsed tag object to parse_tag_buffer() wrapper function Johan Herland
2007-06-10  8:06                   ` [PATCH 05/21] Make parse_tag_buffer_internal() handle item == NULL Johannes Schindelin
2007-06-09  0:15                 ` [PATCH 06/21] Refactor tag name verification loop to use index 'i' instead of incrementing pointer 'tag_line' Johan Herland
2007-06-09 21:26                   ` Alex Riesen
2007-06-09 21:34                     ` Johan Herland
2007-06-10  8:14                       ` Johannes Schindelin
2007-06-10  9:01                   ` Johannes Schindelin
2007-06-09  0:15                 ` [PATCH 07/21] Copy the remaining differences from verify_tag() to parse_tag_buffer_internal() Johan Herland
2007-06-09 21:31                   ` Alex Riesen
2007-06-09 21:39                     ` Johan Herland
2007-06-10  8:22                       ` Johannes Schindelin
2007-06-09  0:15                 ` [PATCH 08/21] Switch from verify_tag() to parse_and_verify_tag_buffer() for verifying tag objects in git-mktag Johan Herland
2007-06-09  0:16                 ` [PATCH 09/21] Remove unneeded code from mktag.c Johan Herland
2007-06-09 21:39                   ` Alex Riesen
2007-06-09 21:42                     ` Johan Herland
2007-06-09  0:16                 ` [PATCH 10/21] Free mktag's buffer before dying Johan Herland
2007-06-09 21:37                   ` Alex Riesen
2007-06-09 21:46                     ` Johan Herland
2007-06-09 22:00                       ` Alex Riesen
2007-06-09 22:05                         ` Johan Herland
2007-06-10  8:38                   ` Johannes Schindelin
2007-06-09  0:17                 ` [PATCH 11/21] Rewrite error messages; fix up line lengths Johan Herland
2007-06-10  8:38                   ` Johannes Schindelin
2007-06-09  0:17                 ` [PATCH 12/21] Use prefixcmp() instead of memcmp() for cleaner code with less magic numbers Johan Herland
2007-06-09 21:42                   ` Alex Riesen
2007-06-09 21:47                     ` Johan Herland
2007-06-10  8:41                   ` Johannes Schindelin
2007-06-09  0:18                 ` [PATCH 13/21] Collect skipping of header field names and calculation of line lengths in one place Johan Herland
2007-06-10  8:45                   ` Johannes Schindelin
2007-06-09  0:18                 ` [PATCH 14/21] Add proper parsing of "tagger" line, but only when thorough_verify is set Johan Herland
2007-06-10  8:52                   ` Johannes Schindelin
2007-06-10  8:58                   ` Johannes Schindelin
2007-06-09  0:19                 ` [PATCH 15/21] Make tag names (i.e. the tag object's "tag" line) optional Johan Herland
2007-06-10  9:07                   ` Johannes Schindelin
2007-06-09  0:19                 ` [PATCH 16/21] Introduce optional "keywords" on tag objects Johan Herland
2007-06-09 21:52                   ` Alex Riesen
2007-06-09 22:00                     ` Johan Herland
2007-06-09 22:36                     ` [PATCH] Use xstrndup() instead of xmalloc() and memcpy(); fix buglet with generating default item->keywords Johan Herland
2007-06-10  0:05                     ` [PATCH 16/21] Introduce optional "keywords" on tag objects Junio C Hamano
2007-06-10  0:35                       ` [PATCH] Fail if tag name and keywords is not within "printable ASCII" Johan Herland
2007-06-10  1:33                         ` Junio C Hamano
2007-06-09  0:20                 ` [PATCH 17/21] Update comments on tag objects in mktag.c Johan Herland
2007-06-09  0:20                 ` [PATCH 18/21] git-fsck: Do thorough verification of tag objects Johan Herland
2007-06-09  0:20                 ` [PATCH 19/21] Documentation/git-mktag: Document the changes in tag object structure Johan Herland
2007-06-09  0:21                 ` [PATCH 20/21] git-mktag tests: Expand on mktag selftests according to the new " Johan Herland
2007-06-09  0:21                 ` [PATCH 21/21] Add fsck_verify_ref_to_tag_object() to verify that refname matches name stored in tag object Johan Herland
2007-06-07 23:11 ` error: char103: premature end of data Johannes Schindelin

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=7vwsyc8bt3.fsf@assigned-by-dhcp.cox.net \
    --to=gitster@pobox.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=johan@herland.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.