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

Re: ls-remote bug

From
Bagas Sanjaya <bagasdotme@gmail.com>
Date
Oct 27, 2023, 01:08 UTC
Message-ID
<ZTsNfgJV1JN2y-Aw@debian.me>
In-Reply-To
<BL0PR18MB2130A3CA5DEF0DD7199F2979BADFA@BL0PR18MB2130.namprd18.prod.outlook.com>
On Tue, Oct 24, 2023 at 10:55:24AM +0000, Lior Zeltzer wrote:
Show 17 quoted lines
> 
> >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
What repo did you find this regression? Did you mean linux.git (Linux kernel)?
Show 49 quoted lines
> 
> 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;
> 
I tried reproducing this regression by:

``` $ cd /path/to/git.git $ git ls-remote 2>&1 > /tmp/root.list $ cd builtin/ $ git ls-remote 2>&1 > /tmp/builtin.list $ cd ../ $ git diff --no-index /tmp/root.list /tmp/builtin.list ```

And indeed, the diff was empty (which meant that both listings are same).
Confused...
-- 
An old man doll... just what I always wanted! - Clara
Previous: Lior ZeltzerNext: Lior Zeltzer
Message 2 of 6 in “ls-remote bug”
  1. Lior ZeltzerOct 24, 2023
  2. Bagas SanjayaOct 27, 2023
  3. Lior ZeltzerOct 27, 2023
  4. René ScharfeOct 29, 2023
  5. Lior ZeltzerOct 30, 2023
  6. René ScharfeOct 31, 2023

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.