From: Jakub Narebski <jnareb@gmail.com>
To: Petr Baudis <pasky@suse.cz>
Cc: git@vger.kernel.org, Lea Wiemann <lewiemann@gmail.com>
Subject: Re: [RFC/PATCH (WIP)] Git.pm: Add get_config() method and related subroutines
Date: Thu, 10 Jul 2008 01:33:36 +0200 [thread overview]
Message-ID: <200807100133.38163.jnareb@gmail.com> (raw)
In-Reply-To: <20080709160303.GL10151@machine.or.cz>
On Wed, Jul 09, 2008, Petr "Pasky" Baudis wrote:
> On Thu, Jul 03, 2008 at 06:24:53PM +0200, Jakub Narebski wrote:
> >
> > There are also a few things which I'd like some comments about:
> >
> > * Do config_val_to_bool and config_val_to_int should be exported
> > by default?
>
> Yes with the current API, not with object API (see below). But if
> exported by default, there should be definitely a git_ prefix.
Object API for config is definitely good idea; some more reasons are
given below.
> > * Should config_val_to_bool and config_val_to_int throw error or
> > just return 'undef' on invalid values? One can check if variable
> > is defined using "exists($config_hash{'varname'})".
>
> I think that it's more reasonable to throw an error here (as long as
> you don't throw an error on undef argument). This particular case is
> clearly a misconfiguration by the user and you rarely need to handle
> this more gracefully, I believe.
If we follow git-config convention (and I guess we should), it would be
value of appropriate type if variable value is of appropriate type,
'undef' (no output in the case of git-config) when variable does not
exists, and throwing error (status and "fatal: ..." message on STDERR
in the case of git-config) if variable is not of given type.
> > * How config_val_to_bool etc. should be named? Perhaps just
> > config_to_bool, like in gitweb?
>
> What about Git::Config::bool()? ;-) (See below.)
>
> > * Is "return wantarray ? %config : \%config;" DWIM-mery good style?
> > I am _not_ a Perl hacker...
>
> I maybe wouldn't be as liberal myself, but I can't tell if it's a bad
> style either.
This won't matter, I think, in the case of object API (returning
Git::Config instead of hash or hashref).
> > * Should ->get_config() use ->command_output_pipe, or simpler
> > ->command() method, reading whole config into array?
>
> You have the code written already, I'd stick with it.
This is simple rewrite of code which is in gitweb, changing open '-|'
into ->command_output_pipe, but we could just read the whole config
into array using ->command(), which would be a bit simpler.
> > * What should ->get_config() have as an optional parameter:
> > PREFIX (/^$prefix/o), or simply SECTION (/^(?:$section)\./o)?
>
> Do we even _need_ a parameter like that? I don't understand what is
> this interface trying to address.
For example if one wants to access _all_ variables in gitweb.* section
(or in gitcvs.* section), and _only_ config variables in given section.
> > * Should we perltie hash?
>
> I agree with Lea that we should actually bless it. :-) Returning a
> Git::Config object provides a more flexible interface, and you can
> also do $repo->get_config()->bool('key') which is quite more elegant
> way than the val_ functions, I think.
Yes it is.
Also it does allow to use any capitalization of the section name and
variable name (which are case insensitive), so you can write either
$repo->get_config()->get('gitcvs.dbtablenameprefix');
but also
$repo->get_config()->get('gitcvs.dbTableNamePrefix');
or even better, as below:
$config = $repo->get_config();
$config->get('gitcvs.dbTableNamePrefix');
BTW. what should non-typecasting should be named? $c->get(<VAR>),
$c->value(<VAR>), $c->param(<VAR>), or something yet different?
> Also, having accessors for special types lets you return undef when
> the type really isn't defined, instead of e.g. true with current
> config_val_bool, which is clearly bogus and requires complicated code
> on the user side.
I don't follow you. Didn't we agree on casting an error when variable
is not of given type?
By the way, bool values are processed a bit strangely. Value is true
if it there is no value[*1*], if it is 'true' or 'yes' case insensitive,
or of it is integer != 0. Value is false if it has empty value[*2*],
if it is 'false' or 'no' case insensitive, and if it is integer of
value '0'. All other values are invalid (and should cause throwing an
error).
Both current config_val_to_bool() and config_val_to_int() implementation
are too forbidding.
> > As this is an RFC I have not checked if manpage (generated from
> > embedded POD documentation) renders correctly.
>
> By the way, unless you know already, you can do that trivially by
> issuing:
>
> perldoc perl/Git.pm
Thanks, I didn't knew this.
> --
> Petr "Pasky" Baudis
> The last good thing written in C++ was the Pachelbel Canon.
> -- J. Olson
Eh? Isn't it written C# rather?
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2008-07-09 23:30 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-03 16:24 [RFC/PATCH (WIP)] Git.pm: Add get_config() method and related subroutines Jakub Narebski
2008-07-03 20:30 ` Lea Wiemann
2008-07-03 23:45 ` Jakub Narebski
2008-07-07 19:24 ` Lea Wiemann
2008-07-09 15:23 ` Petr Baudis
2008-07-09 16:03 ` Petr Baudis
2008-07-09 23:33 ` Jakub Narebski [this message]
2008-07-12 1:47 ` Petr Baudis
2008-07-12 12:35 ` Jakub Narebski
2008-07-12 13:45 ` Petr Baudis
2008-07-12 14:31 ` Jakub Narebski
2008-07-12 18:05 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200807100133.38163.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=git@vger.kernel.org \
--cc=lewiemann@gmail.com \
--cc=pasky@suse.cz \
/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).