From: Jakub Narebski <jnareb@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Cord Seele <cowose@googlemail.com>,
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>,
git@vger.kernel.org, Eric Wong <normalperson@yhbt.net>,
Cord Seele <cowose@gmail.com>
Subject: Re: [PATCH 2/2] use new Git::config_path() for aliasesfile
Date: Sat, 1 Oct 2011 00:00:11 +0200 [thread overview]
Message-ID: <201110010000.13328.jnareb@gmail.com> (raw)
In-Reply-To: <7vsjndoldq.fsf@alter.siamese.dyndns.org>
On Fri, 30 Sep 2011, Junio C Hamano wrote:
> I think the addition of "config --path" support is a good idea, but the
> resulting code suffers from too many cut&paste cruft across the config*
> family of methods.
>
> How about doing a bit of refactoring, perhaps something like this, on top
> as a separate patch?
This is a good idea, in my opinion.
> I tried to be careful to still forcing the "one value only" for config_bool
> and config_int, but extra sets of eyeballs would be needed.
We do have tests for that, have we?
[...]
> +Common subroutine to implement bulk of what the config* family of methods
> +do. This wraps command('config') so it is not so fast.
BTW. I wonder if it wouldn't be a good idea to restart work on Git::Config
with lazy/eager loading of the whole config, like git_get_project_config()
and git_parse_project_config() subroutines from gitweb do it - running
"git config -z -l". Though then --int/--bool/--path conversion would have
to be implemented in Perl...
> =cut
>
> -sub config {
> - my ($self, $var) = _maybe_self(@_);
> -
> +sub _config_common {
> + my ($self, $var, $opts) = _maybe_self(@_);
> +
> try {
> - my @cmd = ('config');
> + my @cmd = ('config', $opts->{'kind'} ? @{$opts->{'kind'}} : ());
How it is supposed to work?
First, you probably want to check for "exists $opts->{'kind'}", or even
"defined $opts->{'kind'}".
Second, "@{$opts->{'kind'}}" assumes that $opts->{'kind'} is an array
reference (something we didn't check)... and it isn't.
BTW. why do you use hashref? Do you plan for the future to pass more
options that 'kind'?
> unshift @cmd, $self if $self;
> if (wantarray) {
> return command(@cmd, '--get-all', $var);
> @@ -594,6 +590,21 @@ sub config {
> throw $E;
> }
> };
> +
> +}
> +
> +=item config ( VARIABLE )
> +
> +Retrieve the configuration C<VARIABLE> in the same manner as C<config>
> +does. In scalar context requires the variable to be set only one time
> +(exception is thrown otherwise), in array context returns allows the
> +variable to be set multiple times and returns all the values.
> +
> +=cut
> +
> +sub config {
> + my ($self, $var) = _maybe_self(@_);
> + return _config_common($self, $var, +{});
No need to pass an empty hash. Perl has a feature called autovivification:
when an undefined variable is dereferenced, it gets silently upgraded to
an array or hash reference (depending of the type of the dereferencing).
It is un-Perlish to do so.
> sub config_bool {
> my ($self, $var) = _maybe_self(@_);
[...]
> + my $val = scalar _config_common($self, $var, {'kind' => '--bool'});
> + return (defined $val && $val eq 'true');
> }
[...]
> sub config_path {
> my ($self, $var) = _maybe_self(@_);
[...]
> + return _config_common($self, $var, +{'kind' => '--path'});
> }
Why the difference between {'kind' => '--bool'} and +{'kind' => '--path'}?
> -This currently wraps command('config') so it is not so fast.
> -
Shouldn't this be mentioned somewhat, even indirectly?
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2011-09-30 22:00 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-28 13:13 [PATCH] git-send-email.perl: expand filename of aliasesfile Cord Seele
2011-09-28 13:42 ` Matthieu Moy
2011-09-28 14:40 ` Cord Seele
2011-09-28 14:47 ` Matthieu Moy
2011-09-30 10:52 ` [PATCH v2] git-send-email: allow filename expansion Cord Seele
2011-09-30 10:52 ` [PATCH 1/2] Add Git::config_path() Cord Seele
2011-10-07 20:32 ` Jakub Narebski
2011-10-07 21:35 ` Junio C Hamano
2011-10-07 21:44 ` Jakub Narebski
2011-10-07 22:26 ` Junio C Hamano
2011-09-30 10:52 ` [PATCH 2/2] use new Git::config_path() for aliasesfile Cord Seele
2011-09-30 19:55 ` Junio C Hamano
2011-09-30 21:16 ` Cord Seele
2011-09-30 22:00 ` Jakub Narebski [this message]
2011-09-30 22:18 ` Junio C Hamano
2011-10-07 21:17 ` [PATCH/RFC 3/2] Refactor Git::config_* Jakub Narebski
2011-10-17 20:50 ` Junio C Hamano
2011-10-17 21:47 ` Jakub Narebski
2011-10-17 23:25 ` Junio C Hamano
2011-10-18 9:47 ` [PATCH/RFC 3/2 (fixed)] " Jakub Narebski
2011-10-18 19:52 ` Junio C Hamano
2011-10-18 22:09 ` [PATCH/RFC 3/2 v3] " Jakub Narebski
2011-10-18 23:25 ` Junio C Hamano
2011-10-19 0:19 ` 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=201110010000.13328.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=cowose@gmail.com \
--cc=cowose@googlemail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=normalperson@yhbt.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 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).