From: Michal Nazarewicz <mina86@mina86.com>
To: Jeff King <peff@peff.net>
Cc: Junio C Hamano <gitster@pobox.com>,
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>,
git@vger.kernel.org
Subject: Re: [PATCHv3 4/5] Git.pm: add interface for git credential command
Date: Mon, 11 Feb 2013 18:14:24 +0100 [thread overview]
Message-ID: <xa1tr4kmg4cv.fsf@mina86.com> (raw)
In-Reply-To: <20130211165331.GD16402@sigill.intra.peff.net>
[-- Attachment #1: Type: text/plain, Size: 2347 bytes --]
On Mon, Feb 11 2013, Jeff King wrote:
> On Mon, Feb 11, 2013 at 05:23:38PM +0100, Michal Nazarewicz wrote:
>
>> +=item credential_read( FILE_HANDLE )
>> +
>> +Reads credential key-value pairs from C<FILE_HANDLE>. Reading stops at EOF or
>> +when an empty line is encountered. Each line must be of the form C<key=value>
>> +with a non-empty key. Function returns a hash with all read values. Any
>> +white space (other then new-line character) is preserved.
>> +
>> +=cut
>> +
>> +sub credential_read {
>> + my ($self, $reader) = _maybe_self(@_);
>> + my %credential;
>> + while (<$reader>) {
>> + chomp;
>> + if ($_ eq '') {
>> + last;
>> + } elsif (!/^([^=]+)=(.*)$/) {
>> + throw Error::Simple("unable to parse git credential data:\n$_");
>> + }
>> + $credential{$1} = $2;
>> + }
>> + return %credential;
>> +}
>
> Should this return a hash reference? It seems like that is how we end up
> using and passing it elsewhere (since we have to anyway when passing it
> as a parameter).
Admittedly I mostly just copied what git-remote-mediawiki did here and
don't really have any preference either way, even though with this
function returning a reference the call site would have to become:
%$credential = %{ credential_read $reader };
Another alternative would be for it to take a reference as an argument,
possibly an optional one:
+sub credential_read {
+ my ($self, $reader, $ret) = (_maybe_self(@_), {});
+ my %credential;
+ while (<$reader>) {
+ # ...
+ }
+ %$ret = %credential;
+ $ret;
+}
I'd avoid modifying the hash while reading though since I think it's
best if it's left intact in case of an error.
And of course, if we want to get even more crazy, credential_write could
accept either reference or a hash, like so:
+sub credential_write {
+ my ($self, $writer, @rest) = _maybe_self(@_);
+ my $credential = @rest == 1 ? $rest[0] : { @rest };
+ my ($key, $value);
+ # ...
+}
Bottom line is, anything can be coded, but a question is whether it
makes sense to do so. ;)
--
Best regards, _ _
.o. | Liege of Serenely Enlightened Majesty of o' \,=./ `o
..o | Computer Science, Michał “mina86” Nazarewicz (o o)
ooo +----<email/xmpp: mpn@google.com>--------------ooO--(_)--Ooo--
[-- Attachment #2.1: Type: text/plain, Size: 0 bytes --]
[-- Attachment #2.2: Type: application/pgp-signature, Size: 835 bytes --]
next prev parent reply other threads:[~2013-02-11 17:15 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-11 16:23 [PATCHv3 0/5] Add git-credential support to git-send-email Michal Nazarewicz
2013-02-11 16:23 ` [PATCHv3 1/5] Git.pm: allow command_close_bidi_pipe to be called as method Michal Nazarewicz
2013-02-11 16:23 ` [PATCHv3 2/5] Git.pm: fix example in command_close_bidi_pipe documentation Michal Nazarewicz
2013-02-11 16:23 ` [PATCHv3 3/5] Git.pm: allow pipes to be closed prior to calling command_close_bidi_pipe Michal Nazarewicz
2013-02-11 16:23 ` [PATCHv3 4/5] Git.pm: add interface for git credential command Michal Nazarewicz
2013-02-11 16:53 ` Jeff King
2013-02-11 17:14 ` Michal Nazarewicz [this message]
2013-02-11 17:36 ` Jeff King
2013-02-11 16:23 ` [PATCHv3 5/5] git-send-email: use git credential to obtain password Michal Nazarewicz
2013-02-11 17:01 ` Jeff King
2013-02-11 17:17 ` Michal Nazarewicz
2013-02-11 17:31 ` Jeff King
2013-02-11 16:51 ` [PATCHv3 0/5] Add git-credential support to git-send-email Jeff King
2013-02-11 17:18 ` Michal Nazarewicz
2013-02-11 17:48 ` Jeff King
2013-02-11 18:40 ` Michal Nazarewicz
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=xa1tr4kmg4cv.fsf@mina86.com \
--to=mina86@mina86.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.