* [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: [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
* 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
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).