git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Sam Vilain <samv@catalyst.net.nz>
To: Jakub Narebski <jnareb@gmail.com>
Cc: Sam Vilain <sam.vilain@catalyst.net.nz>,
	Frank Lichtenheld <frank@lichtenheld.de>,
	git@vger.kernel.org, Petr Baudis <pasky@suse.cz>
Subject: Re: [PATCH] perl: add new module Git::Config for cached 'git config' access
Date: Wed, 08 Apr 2009 22:44:18 +1200	[thread overview]
Message-ID: <49DC8002.6050503@catalyst.net.nz> (raw)
In-Reply-To: <200904081218.39984.jnareb@gmail.com>

Jakub Narebski wrote:
> By the way, did you take a look how cached 'git config' access and
> typecasting is done in gitweb?  See commit b201927 (gitweb: Read
> repo config using 'git config -z -l') and following similar commits.
>   

Right ... sure, looks fairly straightforward.  I guess gitweb could 
potentially use this tested module instead of including that code 
itself.  Also various parts of git-svn... anything really.

I actually wrote this code because I wanted something a bit nicer for 
writing the mirror-sync initial implementations.  And I wanted to have a 
bit of control over when values get committed, and save work for 
reading, so I wrote this.

>> Any more gremlins? 
>>     
> I have nor examined your patch in detail; I'll try to do it soon,
> but with git config file parsing there lies following traps.
>
> 1. In fully qualified variable name section name and variable name
>    have to be compared case insensitive (or normalized, i.e.
>    lowercased), while subsection part (if it exists) is case sensitive.
>   

I noticed that 'git config' hides this by normalising the case of what 
it outputs with 'git config --list'; do you think anything special is 
required in light of this?

> 2. When coercing type to bool, you need to remember (and test) that
>    there are values which are truish (no value, 'true', 'yes', non-zero
>    integer usually 1), values which are falsish (empry, 'false', 'no',
>    0); other values IIRC are truish too.
>   

Yep, see the Git::Config::boolean mini-package which has a list of 
those.  I think I used the documented legal values, which are 'true', 
'yes' and '1' for affirmative and 'false', 'no' and '0' for negative.  I 
guess I could make that include non-zero integers as well.

> 3. When coercing type to int, you need to remember about optional
>    value suffixes: 'k', 'm' or 'g'.
>   

Yep, covered on input and output :-).  See Git::Config::integer for the 
conversion functions.

> 4. I don't know if you remembered about 'colorbool' and 'color'; the
>    latter would probably require some extra CPAN module for ANSI color
>    escapes... or copying color codes from the C version.
>   

Yeah, I thought those could probably be done with a follow-up patch.  
It's just a matter of writing functions Git::Config::color::thaw and 
::freeze.

> Why not represent it simply as an 'undef'? You can always distinguish 
> between not defined and not existing by using 'exists'...
>   

I don't like 'undef' being a data value.  In this case I was already 
using setting a value to undef to tell the module to remove the key from 
the config file.  But in any case you should not need to care what form 
the values exist in the internal ->{read_state} hash, as you should 
always be retrieving them using the ->config method, which will marshall 
them into the type you want.  Note it's always the same object, just 
like Perl's &PL_undef via the C API.

>> Sneak a couple of vim footer changes in too.
>>     
>
> Hmmm...
>   

Guess someone noticed them.  Oh well, rebase time ...

Thanks for your input Jakub, I'll incorporate your suggestions.

Sam

  reply	other threads:[~2009-04-08 10:46 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-05 23:46 [PATCH] perl: add new module Git::Config for cached 'git config' access Sam Vilain
2009-04-05 23:46 ` [PATCH] perl: make Git.pm use new Git::Config module Sam Vilain
2009-04-06  9:29 ` [PATCH] perl: add new module Git::Config for cached 'git config' access Frank Lichtenheld
2009-04-06 22:50   ` Sam Vilain
2009-04-07 12:01     ` Jakub Narebski
2009-04-08  5:49       ` Sam Vilain
2009-04-08 10:18         ` Jakub Narebski
2009-04-08 10:44           ` Sam Vilain [this message]
2009-04-08 23:13             ` Jakub Narebski
2009-04-08  6:29       ` Junio C Hamano
2009-04-08  9:50         ` Sam Vilain
2009-04-08 18:51           ` Junio C Hamano
2009-04-08  8:12 ` Petr Baudis

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=49DC8002.6050503@catalyst.net.nz \
    --to=samv@catalyst.net.nz \
    --cc=frank@lichtenheld.de \
    --cc=git@vger.kernel.org \
    --cc=jnareb@gmail.com \
    --cc=pasky@suse.cz \
    --cc=sam.vilain@catalyst.net.nz \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).