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: Sat, 12 Jul 2008 14:35:48 +0200 [thread overview]
Message-ID: <200807121435.49151.jnareb@gmail.com> (raw)
In-Reply-To: <20080712014708.GB10151@machine.or.cz>
On Sat, Jul 12, 2008, Petr Baudis wrote:
> On Thu, Jul 10, 2008 at 01:33:36AM +0200, Jakub Narebski wrote:
>> On Wed, Jul 09, 2008, Petr "Pasky" Baudis wrote:
>>> On Thu, Jul 03, 2008 at 06:24:53PM +0200, Jakub Narebski wrote:
>>>> * 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.
>
> But what is the practical benefit? Does anyone use a config file long
> enough that this makes any difference?
Probably not.
> Or if you mean foreach use, it's trivial to
>
> foreach (grep { /^gitweb\./ } keys %$config)
>
> or provide a method of Git::Config that will return this list, but it
> does not seem appropriate to have specific Git::Config instances for
> this. (Besides, if the script also needs to access a single variable
> from a different section, it will need to re-parse the config again.)
>
> So I think your approach would be good only if there are multiple
> methods of Git::Config that would operate on the whole config and needed
> a way to be restricted; is that the case?
On the other hand if one uses (assuming now Git::Config object API)
$conf = $repo->get_config('section');
one could access configuration variable values _without_ prefixing
them with subsection name, i.e.
$conf->get('variable');
and not
$conf->get('section.variable');
I'm not sure if it is much of an improvement.
>> BTW. what should non-typecasting should be named? $c->get(<VAR>),
>> $c->value(<VAR>), $c->param(<VAR>), or something yet different?
>
> I would prefer 'get' since it's the shortest and most clear, but 'value'
> would be fine too, I suppose (and more in line with bool etc.).
Well, that would have to be decided before other programs could use
this API.
We can have $c->value(<VAR>), $c->bool(<VAR>), $c->int(<VAR>) and
(in the future) $c->color(<VAR>) and $c->colorbool(<VAR>)... or we can
have $c->get(<VAR>), $c->get_bool(<VAR>) etc.
The former plays better with
$r->get_config()->bool('gitweb.blame');
but this is nevertheless not recommended workflow; you can use
$r->config_bool('gitweb.blame');
and it would be faster (unless some Perl/OO trickery with singletons
and the like). Recommended workflow (code) is
$c = $r->get_config();
...
$c->get_bool('gitweb.blame');
or something like that.
>>> 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?
>
> Sorry, s/type really/variable really/. According to your original code,
>
> config_val_bool(undef)
>
> would return true, while the undef could be from both non-existent and
> unassigned variable. (This 'unassigned variables' case is really
> annoying to handle.)
That is why you should check exists($config{<VAR>}) first.
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2008-07-12 12:37 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
2008-07-12 1:47 ` Petr Baudis
2008-07-12 12:35 ` Jakub Narebski [this message]
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=200807121435.49151.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).