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

Re: [PATCH] git-mv is not able to handle big directories

From
Junio C Hamano <junkio@cox.net>
Date
Nov 23, 2005, 06:14 UTC
Message-ID
<7voe4b7uw7.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<200511231141.57683.lan@ac-sw.com>
Alexander Litvinov <lan@ac-sw.com> writes:
Show 10 quoted lines
> When moving directory with large number of files git-mv says:
>> git-mv jsp* .
> Can't exec "git-update-index": Argument list too long at /usr/local/bin/git-mv 
> line 193.
> git-update-index failed to add new names with code -1
>
> This patch fixes this by building list of files with limited len (currently 
> 5000) and executing git-update-index few times until all files will be 
> processed. I don't know how to determinate limit of command line but 5000 
> seems safe enougth to me.
Two comments.
(1) the argument limit is enforced by the operating system in
    bytes (including environment size unfortunately) so we might
    want to count bytes not number of paths.  I heard GNU xargs
    uses 131072 as the default limit.
(2) I wonder if we can detect this particular failure case and
    then fall back on splitting the arguments dynamically, maybe
    something like this:
	sub xargs_system {
        	my ($cmd, @args) = @_;
                my $rc = system(@$cmd, @args);
                if ($rc == 'argument list too long error') {
                	my (@args0) = splice(@args, 0, @args/2);
			$rc = xargs_system($cmd, @args0);
                        return $c if ($rc);
                        return xargs_system($cmd, @args);
		}
		return $rc;
	}
    and:
	$rc = xargs_system([qw(git-update-index --)], @changedfiles);
	$rc = xargs_system([qw(git-update-index --add --)], @addedfiles);
	...
Previous: Alexander LitvinovNext: Junio C Hamano
Message 2 of 23 in “git-mv is not able to handle big directories”
  1. git-mv is not able to handle big directoriesAlexander Litvinov, Nov 23, 2005
  2. Junio C HamanoNov 23, 2005
  3. Junio C HamanoNov 23, 2005
  4. Randal L. SchwartzNov 23, 2005
  5. Junio C HamanoNov 23, 2005
  6. Ryan AndersonNov 23, 2005
  7. Perl version support (was Re: [PATCH] git-mv is not able to handle big directories)Randal L. Schwartz, Nov 23, 2005
  8. Junio C HamanoNov 23, 2005
  9. Randal L. SchwartzNov 23, 2005
  10. H. Peter AnvinNov 23, 2005
  11. Randal L. SchwartzNov 23, 2005
  12. Morten WelinderNov 23, 2005
  13. Ryan AndersonNov 28, 2005
  14. Andreas EricssonNov 28, 2005
  15. Junio C HamanoNov 23, 2005
  16. Ryan AndersonNov 23, 2005
  17. Alexander LitvinovNov 23, 2005
  18. Andreas EricssonNov 23, 2005
  19. Alexander LitvinovNov 23, 2005
  20. Alexander LitvinovNov 23, 2005
  21. Josef WeidendorferNov 23, 2005
  22. Josef WeidendorferNov 23, 2005
  23. Randal L. SchwartzNov 23, 2005

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.