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

[PATCH v2 01/12] send-email: drop FakeTerm hack

From
Junio C Hamano <gitster@pobox.com>
Date
May 24, 2024, 19:47 UTC
Message-ID
<20240524194715.695916-2-gitster@pobox.com>
In-Reply-To
<20240524194715.695916-1-gitster@pobox.com>
From: Jeff King <peff@peff.net>

Back in 280242d1cc (send-email: do not barf when Term::ReadLine does not like your terminal, 2006-07-02), we added a fallback for when Term::ReadLine's constructor failed: we'd have a FakeTerm object instead, which would then die if anybody actually tried to call readline() on it. Since we instantiated the $term variable at program startup, we needed this workaround to let the program run in modes when we did not prompt the user.

But later, in f4dc9432fd (send-email: lazily load modules for a big speedup, 2021-05-28), we started loading Term::ReadLine lazily only when ask() is called. So at that point we know we're trying to prompt the user, and we can just die if ReadLine instantiation fails, rather than making this fake object to lazily delay showing the error.

This should be OK even if there is no tty (e.g., we're in a cron job), because Term::ReadLine will return a stub object in that case whose "IN" and "OUT" functions return undef. And since 5906f54e47 (send-email: don't attempt to prompt if tty is closed, 2009-03-31), we check for that case and skip prompting.

And we can be sure that FakeTerm was not kicking in for such a situation, because it has actually been broken since that commit! It does not define "IN" or "OUT" methods, so perl would barf with an error. If FakeTerm was in use, we were neither honoring what 5906f54e47 tried to do, nor producing the readable message that 280242d1cc intended.

So we're better off just dropping FakeTerm entirely, and letting the error reported by constructing Term::ReadLine through.

[jc: cherry-picked from v2.42.0-rc2~6^2~1]
Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 git-send-email.perl | 22 ++--------------------
 1 file changed, 2 insertions(+), 20 deletions(-)
diff --git a/git-send-email.perl b/git-send-email.perl
index 5861e99a6e..72d876f0a0 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -26,18 +26,6 @@
 
 Getopt::Long::Configure qw/ pass_through /;
 
-package FakeTerm;
-sub new {
-	my ($class, $reason) = @_;
-	return bless \$reason, shift;
-}
-sub readline {
-	my $self = shift;
-	die "Cannot use readline on FakeTerm: $$self";
-}
-package main;
-
-
 sub usage {
 	print <<EOT;
 git send-email' [<options>] <file|directory>
@@ -930,16 +918,10 @@ sub get_patch_subject {
 }
 
 sub term {
-	my $term = eval {
-		require Term::ReadLine;
-		$ENV{"GIT_SEND_EMAIL_NOTTY"}
+	require Term::ReadLine;
+	return $ENV{"GIT_SEND_EMAIL_NOTTY"}
 			? Term::ReadLine->new('git-send-email', \*STDIN, \*STDOUT)
 			: Term::ReadLine->new('git-send-email');
-	};
-	if ($@) {
-		$term = FakeTerm->new("$@: going non-interactive");
-	}
-	return $term;
 }
 
 sub ask {
-- 
2.45.1-246-gb9cfe4845c
Previous: Junio C HamanoNext: Junio C Hamano
Message 2 of 13 in “Fix various overly aggressive protections in 2.45.1 and friends”
  1. 00/12 Fix various overly aggressive protections in 2.45.1 and friendsJunio C Hamano, May 24, 2024
  2. 01/12 send-email: drop FakeTerm hackJunio C Hamano, May 24, 2024
  3. 02/12 send-email: avoid creating more than one Term::ReadLine objectJunio C Hamano, May 24, 2024
  4. 03/12 ci: drop mention of BREW_INSTALL_PACKAGES variableJunio C Hamano, May 24, 2024
  5. 04/12 ci: avoid bare "gcc" for osx-gcc jobJunio C Hamano, May 24, 2024
  6. 05/12 ci: stop installing "gcc-13" for osx-gccJunio C Hamano, May 24, 2024
  7. 06/12 hook: plug a new memory leakJunio C Hamano, May 24, 2024
  8. 07/12 init: use the correct path of the templates directory againJunio C Hamano, May 24, 2024
  9. 08/12 Revert "core.hooksPath: add some protection while cloning"Junio C Hamano, May 24, 2024
  10. 09/12 tests: verify that `clone -c core.hooksPath=/dev/null` works againJunio C Hamano, May 24, 2024
  11. 10/12 clone: drop the protections where hooks aren't runJunio C Hamano, May 24, 2024
  12. 11/12 Revert "Add a helper function to compare file contents"Junio C Hamano, May 24, 2024
  13. 12/12 Revert "fsck: warn about symlink pointing inside a gitdir"Junio C Hamano, May 24, 2024

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.