From: Lior Zeltzer Date: Tue, 24 Oct 2023 10:55:24 GMT Subject: ls-remote bug Message-ID: In-Reply-To: >uname -a Linux dc3lp-veld0045 3.10.0-1160.21.1.el7.x86_64 #1 SMP Tue Mar 16 18:28:22 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux Gerrit version : 3.8.0 Bug description : When running ls-remote : sometime data gets cut in the middle Reproducing : You need a few files with a few repo names (I used 4 files with 10 repos each) Call then l1..l4 And the code below just cd into each of them does ls-remote twice and compares the data Doing it in parallel on all lists. Data received in both ls-remotes should be the same , if not, it prints *** Repos should contain a lot of tags and refs Note : 1.  without stderr redirection (2>&1) all works well 2. On local repos (not through gerrit) all works well I compared various git vers and found the bug to be between 2.31.8 and 2.32.0 Comparing ls-remote.c file between those vers gave me : Lines : if (transport_disconnect(transport)) return 1; moved to end of sub copying ls-remote.c from 2.31.8 to 2.32.0 - fixed the bug Code reproducing bug : #!/proj/mislcad/areas/DAtools/tools/perl/5.10.1/bin/perl -w use strict; use Cwd qw(cwd); my $count = 4; for my $f (1..$count) {   my $child = fork();   if (!$child) {     my $curr = cwd();         my @repos = `cat l$f`;     foreach my $repo (@repos) {       chomp $repo;       print "$repo\n";       chdir($repo);       my $remote_tags_str = `git ls-remote  2>&1`;       my $remote_tags_str2 = `git ls-remote  2>&1 `;       chdir($curr);       if ( $remote_tags_str ne $remote_tags_str2) {          print "***\n";       }     }       exit(0);   } } while (wait != -1) {} 1;