* [git/perl] unusual syntax?
@ 2008-08-04 4:49 Ray Chuan
2008-08-04 5:02 ` [PATCH] Fix hash slice syntax error Abhijit Menon-Sen
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Ray Chuan @ 2008-08-04 4:49 UTC (permalink / raw)
To: git
Hi,
i noticed that this doesn't work for me (Perl 5.10):
sub _close_hash_and_insert_object {
my ($self) = @_;
return unless defined($self->{hash_object_pid});
my @vars = map { 'hash_object_' . $_ } qw(pid in out ctx);
command_close_bidi_pipe($self->{@vars});
delete $self->{@vars};
}
$self->{@vars} evaluates to undef. i can't find any mention of using
arrays to dereference objects in the manual and elsewhere; is this a
mistake?
--
Cheers,
Ray Chuan
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH] Fix hash slice syntax error
2008-08-04 4:49 [git/perl] unusual syntax? Ray Chuan
@ 2008-08-04 5:02 ` Abhijit Menon-Sen
2008-08-04 7:56 ` [PATCH] Git.pm: Fix internal git_command_bidi_pipe() users Petr Baudis
2008-08-04 15:01 ` [git/perl] unusual syntax? David Christensen
2 siblings, 0 replies; 9+ messages in thread
From: Abhijit Menon-Sen @ 2008-08-04 5:02 UTC (permalink / raw)
To: Ray Chuan; +Cc: git
Signed-off-by: Abhijit Menon-Sen <ams@toroid.org>
---
At 2008-08-04 12:49:27 +0800, rctay89@gmail.com wrote:
>
> $self->{@vars} evaluates to undef. i can't find any mention of using
> arrays to dereference objects in the manual and elsewhere; is this a
> mistake?
Yes, @vars would be interpreted in scalar context, which certainly isn't
the intended effect.
-- ams
perl/Git.pm | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/perl/Git.pm b/perl/Git.pm
index 087d3d0..2ef437f 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -839,8 +839,8 @@ sub _close_hash_and_insert_object {
my @vars = map { 'hash_object_' . $_ } qw(pid in out ctx);
- command_close_bidi_pipe($self->{@vars});
- delete $self->{@vars};
+ command_close_bidi_pipe(@$self{@vars});
+ delete @$self{@vars};
}
=item cat_blob ( SHA1, FILEHANDLE )
@@ -928,8 +928,8 @@ sub _close_cat_blob {
my @vars = map { 'cat_blob_' . $_ } qw(pid in out ctx);
- command_close_bidi_pipe($self->{@vars});
- delete $self->{@vars};
+ command_close_bidi_pipe(@$self{@vars});
+ delete @$self{@vars};
}
=back
--
1.6.0.rc0.43.g2aa74
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH] Git.pm: Fix internal git_command_bidi_pipe() users
2008-08-04 4:49 [git/perl] unusual syntax? Ray Chuan
2008-08-04 5:02 ` [PATCH] Fix hash slice syntax error Abhijit Menon-Sen
@ 2008-08-04 7:56 ` Petr Baudis
2008-08-04 8:05 ` Junio C Hamano
2008-08-04 15:01 ` [git/perl] unusual syntax? David Christensen
2 siblings, 1 reply; 9+ messages in thread
From: Petr Baudis @ 2008-08-04 7:56 UTC (permalink / raw)
To: gitster; +Cc: git
The hash_and_insert_object() and cat_blob() helpers were using
an incorrect slice-from-ref Perl syntax. This patch fixes that up
in the _close_*() helpers and make the _open_*() helpers use the
same syntax for consistnecy.
Signed-off-by: Petr Baudis <pasky@suse.cz>
---
Wow, the command_bidi_pipe API really is dirty. Of course, it is
my fault as anyone's since I didn't get around to review the patches
introducing it.
perl/Git.pm | 16 ++++++----------
1 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/perl/Git.pm b/perl/Git.pm
index 087d3d0..0624428 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -827,8 +827,7 @@ sub _open_hash_and_insert_object_if_needed {
return if defined($self->{hash_object_pid});
- ($self->{hash_object_pid}, $self->{hash_object_in},
- $self->{hash_object_out}, $self->{hash_object_ctx}) =
+ @$self{map { "hash_object_$_" } qw(pid in out ctx)} =
command_bidi_pipe(qw(hash-object -w --stdin-paths));
}
@@ -837,9 +836,8 @@ sub _close_hash_and_insert_object {
return unless defined($self->{hash_object_pid});
- my @vars = map { 'hash_object_' . $_ } qw(pid in out ctx);
-
- command_close_bidi_pipe($self->{@vars});
+ my @vars = map { "hash_object_$_" } qw(pid in out ctx);
+ command_close_bidi_pipe(@$self{@vars});
delete $self->{@vars};
}
@@ -916,8 +914,7 @@ sub _open_cat_blob_if_needed {
return if defined($self->{cat_blob_pid});
- ($self->{cat_blob_pid}, $self->{cat_blob_in},
- $self->{cat_blob_out}, $self->{cat_blob_ctx}) =
+ @$self{map { "cat_blob_$_" } qw(pid in out ctx)} =
command_bidi_pipe(qw(cat-file --batch));
}
@@ -926,9 +923,8 @@ sub _close_cat_blob {
return unless defined($self->{cat_blob_pid});
- my @vars = map { 'cat_blob_' . $_ } qw(pid in out ctx);
-
- command_close_bidi_pipe($self->{@vars});
+ my @vars = map { "cat_blob_$_" } qw(pid in out ctx);
+ command_close_bidi_pipe(@$self{@vars});
delete $self->{@vars};
}
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] Git.pm: Fix internal git_command_bidi_pipe() users
2008-08-04 7:56 ` [PATCH] Git.pm: Fix internal git_command_bidi_pipe() users Petr Baudis
@ 2008-08-04 8:05 ` Junio C Hamano
2008-08-04 8:21 ` Petr Baudis
0 siblings, 1 reply; 9+ messages in thread
From: Junio C Hamano @ 2008-08-04 8:05 UTC (permalink / raw)
To: Petr Baudis; +Cc: git
Petr Baudis <pasky@suse.cz> writes:
> The hash_and_insert_object() and cat_blob() helpers were using
> an incorrect slice-from-ref Perl syntax. This patch fixes that up
> in the _close_*() helpers and make the _open_*() helpers use the
> same syntax for consistnecy.
>
> Signed-off-by: Petr Baudis <pasky@suse.cz>
> ---
>
> Wow, the command_bidi_pipe API really is dirty. Of course, it is
> my fault as anyone's since I didn't get around to review the patches
> introducing it.
Sorry, delete is still broken with your patch, isn't it?
The earlier patch from Abhijit Menon-Sen does this properly for
close_hash_and_insert and close_cat_blob, which I've queued already.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Git.pm: Fix internal git_command_bidi_pipe() users
2008-08-04 8:05 ` Junio C Hamano
@ 2008-08-04 8:21 ` Petr Baudis
2008-08-04 8:37 ` Junio C Hamano
0 siblings, 1 reply; 9+ messages in thread
From: Petr Baudis @ 2008-08-04 8:21 UTC (permalink / raw)
To: Junio C Hamano, ams; +Cc: git
On Mon, Aug 04, 2008 at 01:05:56AM -0700, Junio C Hamano wrote:
> Petr Baudis <pasky@suse.cz> writes:
>
> > The hash_and_insert_object() and cat_blob() helpers were using
> > an incorrect slice-from-ref Perl syntax. This patch fixes that up
> > in the _close_*() helpers and make the _open_*() helpers use the
> > same syntax for consistnecy.
> >
> > Signed-off-by: Petr Baudis <pasky@suse.cz>
> > ---
> >
> > Wow, the command_bidi_pipe API really is dirty. Of course, it is
> > my fault as anyone's since I didn't get around to review the patches
> > introducing it.
>
> Sorry, delete is still broken with your patch, isn't it?
Oh, right - I forgot that one and it didn't occur to me to test this
part.
> The earlier patch from Abhijit Menon-Sen does this properly for
> close_hash_and_insert and close_cat_blob, which I've queued already.
Abhijit, can you please tag your Git.pm patches so that I actually have
a chance to see and review it?
Thanks,
Petr "Pasky" Baudis
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Git.pm: Fix internal git_command_bidi_pipe() users
2008-08-04 8:21 ` Petr Baudis
@ 2008-08-04 8:37 ` Junio C Hamano
2008-08-04 11:38 ` [PATCH] Git.pm: localise $? in command_close_bidi_pipe() Abhijit Menon-Sen
0 siblings, 1 reply; 9+ messages in thread
From: Junio C Hamano @ 2008-08-04 8:37 UTC (permalink / raw)
To: Petr Baudis; +Cc: ams, git
Petr Baudis <pasky@suse.cz> writes:
> On Mon, Aug 04, 2008 at 01:05:56AM -0700, Junio C Hamano wrote:
>> Petr Baudis <pasky@suse.cz> writes:
>>
>> > The hash_and_insert_object() and cat_blob() helpers were using
>> > an incorrect slice-from-ref Perl syntax. This patch fixes that up
>> > in the _close_*() helpers and make the _open_*() helpers use the
>> > same syntax for consistnecy.
>> >
>> > Signed-off-by: Petr Baudis <pasky@suse.cz>
>> > ---
>> >
>> > Wow, the command_bidi_pipe API really is dirty. Of course, it is
>> > my fault as anyone's since I didn't get around to review the patches
>> > introducing it.
>>
>> Sorry, delete is still broken with your patch, isn't it?
>
> Oh, right - I forgot that one and it didn't occur to me to test this
> part.
>
>> The earlier patch from Abhijit Menon-Sen does this properly for
>> close_hash_and_insert and close_cat_blob, which I've queued already.
>
> Abhijit, can you please tag your Git.pm patches so that I actually have
> a chance to see and review it?
It is $gmane/91316, Message-ID: <20080804050247.GA13539@toroid.org>
After queueing it, I actually had to revert it, because it seems to break
git-svn (t9106-git-svn-commit-diff-clobber.sh, test #8), and I am about to
go to bed. If you did not see the same breakage with your patch that does
not "fix" delete, it could be that the git-svn uses some of the resources
that are released by the delete actually doing what it is asked to do.
---
At 2008-08-04 12:49:27 +0800, rctay89@gmail.com wrote:
>
> $self->{@vars} evaluates to undef. i can't find any mention of using
> arrays to dereference objects in the manual and elsewhere; is this a
> mistake?
Yes, @vars would be interpreted in scalar context, which certainly isn't
the intended effect.
-- ams
perl/Git.pm | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/perl/Git.pm b/perl/Git.pm
index 087d3d0..2ef437f 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -839,8 +839,8 @@ sub _close_hash_and_insert_object {
my @vars = map { 'hash_object_' . $_ } qw(pid in out ctx);
- command_close_bidi_pipe($self->{@vars});
- delete $self->{@vars};
+ command_close_bidi_pipe(@$self{@vars});
+ delete @$self{@vars};
}
=item cat_blob ( SHA1, FILEHANDLE )
@@ -928,8 +928,8 @@ sub _close_cat_blob {
my @vars = map { 'cat_blob_' . $_ } qw(pid in out ctx);
- command_close_bidi_pipe($self->{@vars});
- delete $self->{@vars};
+ command_close_bidi_pipe(@$self{@vars});
+ delete @$self{@vars};
}
=back
--
1.6.0.rc0.43.g2aa74
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH] Git.pm: localise $? in command_close_bidi_pipe()
2008-08-04 8:37 ` Junio C Hamano
@ 2008-08-04 11:38 ` Abhijit Menon-Sen
2008-08-05 6:12 ` Junio C Hamano
0 siblings, 1 reply; 9+ messages in thread
From: Abhijit Menon-Sen @ 2008-08-04 11:38 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Petr Baudis, git
Git::DESTROY calls _close_cat_blob and _close_hash_and_insert_object,
which in turn call command_close_bidi_pipe, which calls waitpid, which
alters $?. If this happens during global destruction, it may alter the
program's exit status unexpectedly. Making $? local to the function
solves the problem.
(The problem was discovered due to a failure of test #8 in
t9106-git-svn-commit-diff-clobber.sh.)
Signed-off-by: Abhijit Menon-Sen <ams@toroid.org>
---
At 2008-08-04 01:37:06 -0700, gitster@pobox.com wrote:
>
> After queueing it, I actually had to revert it, because it seems to
> break git-svn (t9106-git-svn-commit-diff-clobber.sh, test #8), and I
> am about to go to bed.
This patch in addition to my earlier one should solve the problem.
For test #8 to fail, the "git svn dcommit" must succeed, but in both
cases (i.e. without my patch applied, or with), the rebase fails:
rebase refs/remotes/git-svn: command returned error: 1
This results in a call to "fatal $@" on git-svn.perl:254, which calls
"exit 1", and test_must_fail is happy.
With my patch, however, Git::DESTROY calls the two _close functions
during global destruction, which in turn call command_close_bidi_pipe,
which calls waitpid with sensible arguments this time, which alters $?,
thus altering the exit status of the dcommit itself to 0. Oops.
All of "make test" passes for me after this change.
-- ams
perl/Git.pm | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/perl/Git.pm b/perl/Git.pm
index 2ef437f..3b6707b 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -417,6 +417,7 @@ have more complicated structure.
=cut
sub command_close_bidi_pipe {
+ local $?;
my ($pid, $in, $out, $ctx) = @_;
foreach my $fh ($in, $out) {
unless (close $fh) {
--
1.6.0.rc0.43.g2aa74
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [git/perl] unusual syntax?
2008-08-04 4:49 [git/perl] unusual syntax? Ray Chuan
2008-08-04 5:02 ` [PATCH] Fix hash slice syntax error Abhijit Menon-Sen
2008-08-04 7:56 ` [PATCH] Git.pm: Fix internal git_command_bidi_pipe() users Petr Baudis
@ 2008-08-04 15:01 ` David Christensen
2 siblings, 0 replies; 9+ messages in thread
From: David Christensen @ 2008-08-04 15:01 UTC (permalink / raw)
To: Ray Chuan; +Cc: git
> sub _close_hash_and_insert_object {
> my ($self) = @_;
>
> return unless defined($self->{hash_object_pid});
>
> my @vars = map { 'hash_object_' . $_ } qw(pid in out ctx);
>
> command_close_bidi_pipe($self->{@vars});
> delete $self->{@vars};
> }
> $self->{@vars} evaluates to undef. i can't find any mention of using
> arrays to dereference objects in the manual and elsewhere; is this a
> mistake?
This is a hash slice notation, returning an array of hash values
matching the corresponding keys. 5.10 removed some syntax warts in
the case of hash slices; this is more portably expressed as @{$self}
{@vars}; this should work in 5.10 and earlier versions, and so is the
preferred syntax.
Regards,
David
--
David Christensen
End Point Corporation
david@endpoint.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Git.pm: localise $? in command_close_bidi_pipe()
2008-08-04 11:38 ` [PATCH] Git.pm: localise $? in command_close_bidi_pipe() Abhijit Menon-Sen
@ 2008-08-05 6:12 ` Junio C Hamano
0 siblings, 0 replies; 9+ messages in thread
From: Junio C Hamano @ 2008-08-05 6:12 UTC (permalink / raw)
To: Abhijit Menon-Sen; +Cc: Petr Baudis, git
Abhijit Menon-Sen <ams@toroid.org> writes:
> With my patch, however, Git::DESTROY calls the two _close functions
> during global destruction, which in turn call command_close_bidi_pipe,
> which calls waitpid with sensible arguments this time, which alters $?,
> thus altering the exit status of the dcommit itself to 0. Oops.
Thanks.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-08-05 6:13 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-04 4:49 [git/perl] unusual syntax? Ray Chuan
2008-08-04 5:02 ` [PATCH] Fix hash slice syntax error Abhijit Menon-Sen
2008-08-04 7:56 ` [PATCH] Git.pm: Fix internal git_command_bidi_pipe() users Petr Baudis
2008-08-04 8:05 ` Junio C Hamano
2008-08-04 8:21 ` Petr Baudis
2008-08-04 8:37 ` Junio C Hamano
2008-08-04 11:38 ` [PATCH] Git.pm: localise $? in command_close_bidi_pipe() Abhijit Menon-Sen
2008-08-05 6:12 ` Junio C Hamano
2008-08-04 15:01 ` [git/perl] unusual syntax? David Christensen
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).