GIT_ONE_FILESYSTEM: flip the default to stop at filesystem boundaries
Regarding the new environment variable, Linus Torvalds
<torvalds@linux-foundation.org> writes on Tue, 30 Mar 2010 in
<alpine.LFD.2.00.1003301537150.3707@i5.linux-foundation.org>:
    I suspect that it is _very_ unusual to have a source repo that crosses
    multiple filesystems, and the original reason for this patch-series
    seems to me to be likely to be more common than that multi-fs case. So
    having the logic go the other way would seem to match the common case,
    no?
The "crossing filesystem boundary" condition is checked by comparing
st_dev field in the result from stat(2).  This is slightly worrysome if
non-POSIX ports return different values in the field even for directories
in the same work tree extracted to the same "filesystem".  Erik Faye-Lund
confirms that in the msysgit port st_dev is 0, so this should be safe, as
"even Windows is safe" ;-)
This will affect those who use /.git to cram /etc and /home/me in the same
repostiory, /home is mounted from non-root filesystem, and a git operation
is done from inside /home/me/src.  But that is such a corner case we don't
want to give preference over helping people who will benefit from having
this default so that they do not have to suffer from slow automounters.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									8030e44215
								
							
						
					
					
						commit
						e640551773
					
				|  | @ -531,10 +531,14 @@ git so take care if using Cogito etc. | |||
| 	(Useful for excluding slow-loading network directories.) | ||||
|  | ||||
| 'GIT_ONE_FILESYSTEM':: | ||||
| 	If set to a true value ("true" or a non-zero integer), stop at | ||||
| 	filesystem boundaries when looking for a repository directory. | ||||
| 	Like 'GIT_CEILING_DIRECTORIES', it will not affect an explicit | ||||
| 	respository directory set via 'GIT_DIR' or on the command line. | ||||
| 	When run in a directory that does not have ".git" repository | ||||
| 	directory, git tries to find such a directory in the parent | ||||
| 	directories to find the top of the working tree, but by default it | ||||
| 	does not cross filesystem boundaries.  This environment variable | ||||
| 	can be set to false value ("false" or zero) to tell git not to | ||||
| 	stop at filesystem boundaries.  Like 'GIT_CEILING_DIRECTORIES', | ||||
| 	this will not affect an explicit respository directory set via | ||||
| 	'GIT_DIR' or on the command line. | ||||
|  | ||||
| git Commits | ||||
| ~~~~~~~~~~~ | ||||
|  |  | |||
							
								
								
									
										4
									
								
								setup.c
								
								
								
								
							
							
						
						
									
										4
									
								
								setup.c
								
								
								
								
							|  | @ -323,7 +323,7 @@ const char *setup_git_directory_gently(int *nongit_ok) | |||
| 	const char *gitdirenv; | ||||
| 	const char *gitfile_dir; | ||||
| 	int len, offset, ceil_offset, root_len; | ||||
| 	int current_device = 0, one_filesystem = 0; | ||||
| 	int current_device = 0, one_filesystem = 1; | ||||
| 	struct stat buf; | ||||
|  | ||||
| 	/* | ||||
|  | @ -444,7 +444,7 @@ const char *setup_git_directory_gently(int *nongit_ok) | |||
| 				} | ||||
| 				cwd[offset] = '\0'; | ||||
| 				die("Not a git repository (or any parent up to mount parent %s)\n" | ||||
| 					"Stopping at filesystem boundary since GIT_ONE_FILESYSTEM is set.", cwd); | ||||
| 				"Stopping at filesystem boundary since GIT_ONE_FILESYSTEM is true.", cwd); | ||||
| 			} | ||||
| 		} | ||||
| 		if (chdir("..")) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano