git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lea Wiemann <lewiemann@gmail.com>
To: Jakub Narebski <jnareb@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: Re: [PATCH] gitweb: return correct HTTP status codes
Date: Wed, 18 Jun 2008 01:47:43 +0200	[thread overview]
Message-ID: <48584D1F.5070000@gmail.com> (raw)
In-Reply-To: <200806180054.33490.jnareb@gmail.com>

Jakub Narebski wrote:
> But what are arguments for "check params; run command" vs "run command;
> check params if error" proposed by Junio?  Why do you want to check
> parameters upfront?

It's actually not checking, it's resolving.  Instead of ...

get_commit($symbol)

... (with $symbol = 'HEAD' for instance), you do (pseudocode):

$hash = get_hash($symbol, 'commit'); # 'commit' to resolve tags
check that $hash is defined
get_commit($hash)

(And get_commit won't even accept anything but 40-byte hashes.)  This is 
for two reasons:

1. Caching: Resolving symbols first gives you some (very few) cache 
entries that need to be expired (namely, get_hash results for symbols 
that are not SHA1 hashes already), but most cache entries (like the 
get_commit) are infinitely valid.

2. Besides being a little more straightforward to implement, it ensures 
that you have well-defined failure points.  IOW, first you resolve the 
symbols you're getting from the user and check them for existence (and 
correct type).  From then on, any hashes you pass around are guaranteed 
to be valid, so failures indicate that something serious went wrong. 
Apart from making things easier for the developer by reminding them of 
the points where they *need* to check for errors, it means that you can 
very easily check the error-handling code for completeness (by only 
reading the first few lines that resolve symbols).

> By the way, would you be sending your current WIP for review?

Will do in the next 2 days after some cleanup.

> [is] adding object oriented interface (wrapper) to git repositories
> really  needed for implementing gitweb caching?

It makes things better to read for sure, and it means that you can have 
a plain API without caching, and implement the caching layer as a 
subclass (which overrides the methods with cacheable results).

-- Lea

  reply	other threads:[~2008-06-17 23:48 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-15 21:15 [PATCH] gitweb: return correct HTTP status codes Lea Wiemann
2008-06-15 22:48 ` Jakub Narebski
2008-06-16 15:57   ` Lea Wiemann
2008-06-16 16:43     ` Jakub Narebski
2008-06-16 21:49       ` Lea Wiemann
2008-06-16 22:34         ` Jakub Narebski
2008-06-17 13:53           ` Lea Wiemann
2008-06-16 22:38     ` Junio C Hamano
2008-06-17 14:04       ` Lea Wiemann
2008-06-17 14:33         ` Jakub Narebski
2008-06-17 22:28           ` Lea Wiemann
2008-06-17 22:54             ` Jakub Narebski
2008-06-17 23:47               ` Lea Wiemann [this message]
2008-06-18  0:12                 ` Jakub Narebski
2008-06-18  1:25                   ` Lea Wiemann
2008-06-18  7:35                     ` Jakub Narebski
2008-06-16 23:37     ` Jakub Narebski
2008-06-18  0:15 ` [PATCH] gitweb: standarize " Lea Wiemann
2008-06-19  0:51   ` [PATCH v2] " Jakub Narebski
2008-06-19 19:08     ` Lea Wiemann
2008-06-19 20:03       ` [PATCH v3] " Lea Wiemann
2008-06-19 20:25         ` Lea Wiemann
2008-06-19 22:37           ` Jakub Narebski
2008-06-20  0:48         ` Junio C Hamano
2008-06-19 22:22       ` [PATCH v2] " Jakub Narebski

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=48584D1F.5070000@gmail.com \
    --to=lewiemann@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jnareb@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).