git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv4 3/6] Git.pm: refactor command_close_bidi_pipe to use _cmd_close

From
MNMichal Nazarewicz <mpn@google.com>
Date
Feb 12, 2013, 14:02 UTC
Message-ID
<fc760829f74f31d23f94b61a9e087eda2a66956e.1360677646.git.mina86@mina86.com>
In-Reply-To
<cover.1360677646.git.mina86@mina86.com>
From: Michal Nazarewicz <mina86@mina86.com>

The body of the loop in command_close_bidi_pipe function is identical to what _cmd_close function does so instead of duplicating, refactor change _cmd_close so that it accepts list of file handlers to be closed, which makes it usable with command_close_bidi_pipe.

Signed-off-by: Michal Nazarewicz <mina86@mina86.com>
---
 perl/Git.pm | 30 +++++++++++-------------------
 1 file changed, 11 insertions(+), 19 deletions(-)
diff --git a/perl/Git.pm b/perl/Git.pm
index 11f310a..6bc9a3c 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -267,13 +267,13 @@ sub command {
 
 	if (not defined wantarray) {
 		# Nothing to pepper the possible exception with.
-		_cmd_close($fh, $ctx);
+		_cmd_close($ctx, $fh);
 
 	} elsif (not wantarray) {
 		local $/;
 		my $text = <$fh>;
 		try {
-			_cmd_close($fh, $ctx);
+			_cmd_close($ctx, $fh);
 		} catch Git::Error::Command with {
 			# Pepper with the output:
 			my $E = shift;
@@ -286,7 +286,7 @@ sub command {
 		my @lines = <$fh>;
 		defined and chomp for @lines;
 		try {
-			_cmd_close($fh, $ctx);
+			_cmd_close($ctx, $fh);
 		} catch Git::Error::Command with {
 			my $E = shift;
 			$E->{'-outputref'} = \@lines;
@@ -313,7 +313,7 @@ sub command_oneline {
 	my $line = <$fh>;
 	defined $line and chomp $line;
 	try {
-		_cmd_close($fh, $ctx);
+		_cmd_close($ctx, $fh);
 	} catch Git::Error::Command with {
 		# Pepper with the output:
 		my $E = shift;
@@ -381,7 +381,7 @@ have more complicated structure.
 sub command_close_pipe {
 	my ($self, $fh, $ctx) = _maybe_self(@_);
 	$ctx ||= '<unknown>';
-	_cmd_close($fh, $ctx);
+	_cmd_close($ctx, $fh);
 }
 
 =item command_bidi_pipe ( COMMAND [, ARGUMENTS... ] )
@@ -431,18 +431,8 @@ have more complicated structure.
 sub command_close_bidi_pipe {
 	local $?;
 	my ($self, $pid, $in, $out, $ctx) = _maybe_self(@_);
-	foreach my $fh ($in, $out) {
-		unless (close $fh) {
-			if ($!) {
-				carp "error closing pipe: $!";
-			} elsif ($? >> 8) {
-				throw Git::Error::Command($ctx, $? >>8);
-			}
-		}
-	}
-
+	_cmd_close($ctx, $in, $out);
 	waitpid $pid, 0;
-
 	if ($? >> 8) {
 		throw Git::Error::Command($ctx, $? >>8);
 	}
@@ -1355,9 +1345,11 @@ sub _execv_git_cmd { exec('git', @_); }
 
 # Close pipe to a subprocess.
 sub _cmd_close {
-	my ($fh, $ctx) = @_;
-	if (not close $fh) {
-		if ($!) {
+	my $ctx = shift @_;
+	foreach my $fh (@_) {
+		if (close $fh) {
+			# nop;
+		} elsif ($!) {
 			# It's just close, no point in fatalities
 			carp "error closing pipe: $!";
 		} elsif ($? >> 8) {
-- 
1.8.1.3.572.g32bae1f
Previous: Michal NazarewiczNext: Junio C Hamano
Message 4 of 22 in “[PATCHv4 0/6] git-credential support in git-send-email”
  1. Michal NazarewiczFeb 12, 2013
  2. 1/6 Git.pm: allow command_close_bidi_pipe to be called as methodMichal Nazarewicz, Feb 12, 2013
  3. 2/6 Git.pm: fix example in command_close_bidi_pipe documentationMichal Nazarewicz, Feb 12, 2013
  4. 3/6 Git.pm: refactor command_close_bidi_pipe to use _cmd_closeMichal Nazarewicz, Feb 12, 2013
  5. Junio C HamanoFeb 12, 2013
  6. Jeff KingFeb 12, 2013
  7. Michal NazarewiczFeb 12, 2013
  8. Junio C HamanoFeb 12, 2013
  9. 4/6 Git.pm: allow pipes to be closed prior to calling command_close_bidi_pipeMichal Nazarewicz, Feb 12, 2013
  10. Jeff KingFeb 12, 2013
  11. Michal NazarewiczFeb 12, 2013
  12. Junio C HamanoFeb 12, 2013
  13. Jeff KingFeb 12, 2013
  14. Michal NazarewiczFeb 12, 2013
  15. 5/6 Git.pm: add interface for git credential commandMichal Nazarewicz, Feb 12, 2013
  16. Matthieu MoyFeb 27, 2013
  17. 6/6 git-send-email: use git credential to obtain passwordMichal Nazarewicz, Feb 12, 2013
  18. Matthieu MoyFeb 27, 2013
  19. Junio C HamanoFeb 27, 2013
  20. Michal NazarewiczFeb 27, 2013
  21. Matthieu MoyFeb 27, 2013
  22. Junio C HamanoFeb 27, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.