From: "Gustavo L. de M. Chaves" <gnustavo@cpan.org>
To: git@vger.kernel.org
Cc: "Gustavo L. de M. Chaves" <gnustavo@cpan.org>
Subject: [PATCH 5/7] perl/Git.pm: simplify Git::activestate_pipe
Date: Wed, 30 Jan 2013 15:23:01 -0200 [thread overview]
Message-ID: <1359566583-19654-6-git-send-email-gnustavo@cpan.org> (raw)
In-Reply-To: <1359566583-19654-1-git-send-email-gnustavo@cpan.org>
From: "Gustavo L. de M. Chaves" <gnustavo@cpan.org>
Git::activestate_pipe::TIEHANDLE creates an object to keep the
external command's output as an array of lines. The object also kept
an index into the array to know up to which line had already been read
via Git::activestate_pipe::READLINE.
We don't really need that index because lines already read don't need
to be kept. So, we simply unshift lines as they're being read and use
the array's size to know when we have read all lines.
This implementation uses more idiomatic Perl, which makes it more
readable and probably a little bit faster.
Signed-off-by: Gustavo L. de M. Chaves <gnustavo@cpan.org>
---
perl/Git.pm | 17 ++++++-----------
1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/perl/Git.pm b/perl/Git.pm
index 42c3971..2d88b89 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -1402,33 +1402,28 @@ sub TIEHANDLE {
# should take care of the most common cases.
my @escaped_params = map { "\"$_\"" } map { s/"/""/g; $_ } @params;
my @data = qx{git @escaped_params};
- bless { i => 0, data => \@data, exit => $? }, $class;
+ bless { data => \@data, exit => $? }, $class;
}
sub READLINE {
my $self = shift;
- if ($self->{i} >= scalar @{$self->{data}}) {
- return undef;
- }
- my $i = $self->{i};
+ return unless @{$self->{data}};
if (wantarray) {
- $self->{i} = $#{$self->{'data'}} + 1;
- return splice(@{$self->{'data'}}, $i);
+ return splice @{$self->{data}};
+ } else {
+ return shift @{$self->{data}};
}
- $self->{i} = $i + 1;
- return $self->{'data'}->[ $i ];
}
sub CLOSE {
my $self = shift;
delete $self->{data};
- delete $self->{i};
return $self->{exit} == 0;
}
sub EOF {
my $self = shift;
- return ($self->{i} >= scalar @{$self->{data}});
+ return @{$self->{data}} == 0;
}
--
1.7.12.464.g83379df.dirty
next prev parent reply other threads:[~2013-01-30 17:23 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-30 17:22 [PATCH 0/7] perl/Git.pm: a bunch of fixes for Windows Gustavo L. de M. Chaves
2013-01-30 17:22 ` [PATCH 1/7] perl/Git.pm: test portably if a path is absolute Gustavo L. de M. Chaves
2013-01-30 17:22 ` [PATCH 2/7] perl/Git.pm: set up command environment on Windows Gustavo L. de M. Chaves
2013-01-30 17:22 ` [PATCH 3/7] perl/Git.pm: fix _cmd_close " Gustavo L. de M. Chaves
2013-01-30 17:23 ` [PATCH 4/7] perl/Git.pm: escape external command's arguments " Gustavo L. de M. Chaves
2013-01-30 17:23 ` Gustavo L. de M. Chaves [this message]
2013-01-30 17:23 ` [PATCH 6/7] perl/Git.pm: make command pipe work in slurp-mode " Gustavo L. de M. Chaves
2013-01-30 17:23 ` [PATCH 7/7] perl/Git.pm: rename 'ActiveState' to 'Windows' Gustavo L. de M. Chaves
2013-02-25 6:54 ` [PATCH 0/7] perl/Git.pm: a bunch of fixes for Windows Junio C Hamano
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=1359566583-19654-6-git-send-email-gnustavo@cpan.org \
--to=gnustavo@cpan.org \
--cc=git@vger.kernel.org \
/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).