On Thu, Aug 10, 2023 at 10:30:17PM -0700, Junio C Hamano wrote: > And embarrassingly, the above is not sufficient, as the way $term is > used in git-send-email and git-svn are subtly different. > > I think we further need something like this on top, but my Perl is > rusty. > > diff --git a/git-svn.perl b/git-svn.perl > index e919c3f172..6033b97a0c 100755 > --- a/git-svn.perl > +++ b/git-svn.perl > @@ -427,7 +427,7 @@ sub ask { > my $default = $arg{default}; > my $resp; > my $i = 0; > - term_init() unless $term; > + my $term = term_init(); > > if ( !( defined($term->IN) > && defined( fileno($term->IN) ) Hmm. Isn't that an indication that git-svn is OK as-is? Looking at the version of git-svn.perl on the tip of master, I see we declare a global $term along with the initializer: my $term; sub term_init { $term = eval { ...etc... } And then later in ask we call term_init() only if it's uninitialized: sub ask { ... term_init() unless $term; So those are looking at the same $term, and the result should only be initialized once. It could still benefit from cleaning up FakeTerm, since we lazily init the object since 30d45f798d (git-svn: delay term initialization, 2014-09-14). But I don't think there's a visible bug here with the new version of Term::ReadLine::Gnu. -Peff