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

[PATCH] git-send-email.perl: implement suggestions made by perlcritic

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
Mar 21, 2013, 12:39 UTC
Message-ID
<1363869587-10462-1-git-send-email-artagnon@gmail.com>

Running perlcritic with gentle severity reports six problems. The following lists the line numbers on which the problems occur, along with a description of the problem. This patch fixes them all.

516: Contrary to common belief, subroutine prototypes do not enable compile-time checks for proper arguments. They serve the singular purpose of defining functions that behave like built-in functions, but check_file_rev_conflict was never intended to behave like one.

714, 836, 855, 1487: Returning `undef' upon failure from a subroutine is pretty common. But if the subroutine is called in list context, an explicit `return undef;' statement will return a one-element list containing `(undef)'. Now if that list is subsequently put in a boolean context to test for failure, then it evaluates to true. But you probably wanted it to be false. The solution is to just use a bare `return' statement whenever you want to return failure. In list context, Perl will then give you an empty list (which is false), and `undef' in scalar context (which is also false).

1441: The three-argument form of `open' (introduced in Perl 5.6) prevents subtle bugs that occur when the filename starts with funny characters like '>' or '<'. It's also more explicitly clear to define the input mode of the file. This policy will not complain if the file explicitly states that it is compatible with a version of Perl prior to 5.6 via an include statement (see 'use 5.008' near the top of the file).

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
 I was looking at git-send-email.perl after I posted that bug report
 about SSL_verify.  What better way to get started than Perl Best
 Practices?  Here's a nice patch to fix some obvious style issues.  I
 didn't run perlcritic on a higher severity, because I don't know
 enough Perl to have a well-formed opinion of my own; I'm just fixing
 the glaringly obvious problems.
 git-send-email.perl | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/git-send-email.perl b/git-send-email.perl
index be809e5..e974b11 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -513,7 +513,7 @@ if (@alias_files and $aliasfiletype and defined $parse_alias{$aliasfiletype}) {
 ($sender) = expand_aliases($sender) if defined $sender;
 
 # returns 1 if the conflict must be solved using it as a format-patch argument
-sub check_file_rev_conflict($) {
+sub check_file_rev_conflict {
 	return unless $repo;
 	my $f = shift;
 	try {
@@ -711,7 +711,7 @@ sub ask {
 			}
 		}
 	}
-	return undef;
+	return;
 }
 
 my %broken_encoding;
@@ -833,7 +833,7 @@ sub extract_valid_address {
 	# less robust/correct than the monster regexp in Email::Valid,
 	# but still does a 99% job, and one less dependency
 	return $1 if $address =~ /($local_part_regexp\@$domain_regexp)/;
-	return undef;
+	return;
 }
 
 sub extract_valid_address_or_die {
@@ -852,7 +852,7 @@ sub validate_address {
 			valid_re => qr/^(?:quit|q|drop|d|edit|e)/i,
 			default => 'q');
 		if (/^d/i) {
-			return undef;
+			return;
 		} elsif (/^q/i) {
 			cleanup_compose_files();
 			exit(0);
@@ -1438,7 +1438,7 @@ sub recipients_cmd {
 
 	my $sanitized_sender = sanitize_address($sender);
 	my @addresses = ();
-	open my $fh, "$cmd \Q$file\E |"
+	open my $fh, q{-|}, "$cmd \Q$file\E"
 	    or die "($prefix) Could not execute '$cmd'";
 	while (my $address = <$fh>) {
 		$address =~ s/^\s*//g;
@@ -1484,7 +1484,7 @@ sub validate_patch {
 			return "$.: patch contains a line longer than 998 characters";
 		}
 	}
-	return undef;
+	return;
 }
 
 sub file_has_nonascii {
-- 
1.8.2.62.ga35d936.dirty
Next: Junio C Hamano
Message 1 of 21 in “git-send-email.perl: implement suggestions made by perlcritic”
  1. git-send-email.perl: implement suggestions made by perlcriticRamkumar Ramachandra, Mar 21, 2013
  2. Junio C HamanoMar 21, 2013
  3. Ramkumar RamachandraMar 21, 2013
  4. Ramkumar RamachandraMar 27, 2013
  5. Junio C HamanoMar 27, 2013
  6. git-send-email.perl: implement suggestions made by perlcriticRamkumar Ramachandra, Mar 28, 2013
  7. Jonathan NiederMar 28, 2013
  8. Junio C HamanoMar 28, 2013
  9. Ramkumar RamachandraMar 31, 2013
  10. Junio C HamanoApr 1, 2013
  11. 1/3 send-email: use "return;" not "return undef;" on error codepathsJunio C Hamano, Apr 1, 2013
  12. 2/3 send-email: drop misleading function prototypeJunio C Hamano, Apr 1, 2013
  13. Jonathan NiederApr 1, 2013
  14. Eric SunshineApr 1, 2013
  15. 3/3 send-email: use the three-arg form of open in recipients_cmdJunio C Hamano, Apr 1, 2013
  16. Jonathan NiederApr 1, 2013
  17. Ramkumar RamachandraApr 2, 2013
  18. Eric SunshineApr 1, 2013
  19. Ramkumar RamachandraApr 2, 2013
  20. Junio C HamanoApr 2, 2013
  21. Ramkumar RamachandraApr 2, 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.