pathspec: avoid the need of "--" when wildcard is used
When "--" is lacking from the command line and a command can take
both revs and paths, the idea is if an argument can be seen as both
an extended SHA-1 and a path, then "--" is required or git refuses
to continue. It's currently implemented as:
 (1) if an argument is rev, then it must not exist in worktree
 (2) else, it must exist in worktree
 (3) else, "--" is required.
These rules work for literal paths, but when non-literal pathspec is
involved, it almost always requires the user to add "--" because it
fails (2) and (1) is really rarely met (take "*.c" for example, (1)
is met if there is a ref named "*.c").
This patch modifies the rules a bit by considering any valid (*)
wildcard pathspec "exist in worktree". The rules become:
 (1) if an arg is a rev, then it must either exist in worktree or
     not be a valid wildcard pathspec.
 (2) else, it either exists in worktree or is a wildcard pathspec
 (3) else, "--" is required.
With the new rules, "--" is not needed most of the time when
wildcard pathspec is involved.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									3d4a3ffe64
								
							
						
					
					
						commit
						28fcc0b71a
					
				
							
								
								
									
										4
									
								
								setup.c
								
								
								
								
							
							
						
						
									
										4
									
								
								setup.c
								
								
								
								
							|  | @ -140,7 +140,9 @@ int check_filename(const char *prefix, const char *arg) | |||
| 		if (arg[2] == '\0') /* ":/" is root dir, always exists */ | ||||
| 			return 1; | ||||
| 		name = arg + 2; | ||||
| 	} else if (prefix) | ||||
| 	} else if (!no_wildcard(arg)) | ||||
| 		return 1; | ||||
| 	else if (prefix) | ||||
| 		name = prefix_filename(prefix, strlen(prefix), arg); | ||||
| 	else | ||||
| 		name = arg; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Duy Nguyen
						Duy Nguyen