The following error was emitted if one issued the command git send-email --compose 0001-my.patch Can't locate object method "IN" via package "FakeTerm" at /home/wesleys/libexec/git-core/git-send-email line 997. After added a warn in the relevant function that created the term it was obvious what happened: Only one Term::ReadLine::Gnu instance is allowed. at /home/wesleys/libexec/git-core/git-send-email line 981. When you supply no --to send-email asks you to whom you want to send the email to. This starts a term, the first Term::ReadLine::Gnu instance. The second time it wants to ask the user 'Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll):' and this causes FakeTerm to be loaded, but it doesn't have IN/OUT methods and thus fails. The fix is to make $term global. If git chooses to drop perl 5.8 support and allows Perl 5.10, we could also use the state feature. Which would solve the problem without making $term global. More or less the same logic happens in git-svn.perl so I fixed it there as well. Signed-off-by: Wesley Schwengle <wesleys@xxxxxxxxxxxxxxx> --- git-send-email.perl | 4 +++- git-svn.perl | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/git-send-email.perl b/git-send-email.perl index affbb88509..7fdcf9084a 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -971,8 +971,10 @@ sub get_patch_subject { do_edit(@files); } +my $term; sub term { - my $term = eval { + return $term if $term; + $term = eval { require Term::ReadLine; $ENV{"GIT_SEND_EMAIL_NOTTY"} ? Term::ReadLine->new('git-send-email', \*STDIN, \*STDOUT) diff --git a/git-svn.perl b/git-svn.perl index be987e316f..2813551e06 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -306,10 +306,12 @@ sub readline { my $self = shift; die "Cannot use readline on FakeTerm: $$self"; } + package main; my $term; sub term_init { + return $term if $term; $term = eval { require Term::ReadLine; $ENV{"GIT_SVN_NOTTY"} -- 2.42.0.rc0.26.ga73c38ecaa