Merge branch 'maint-1.8.5' into maint-1.9
* maint-1.8.5:
  is_hfs_dotgit: loosen over-eager match of \u{..47}
			
			
				maint
			
			
		
						commit
						64a03e970a
					
				|  | @ -287,4 +287,19 @@ dot-backslash-case .\\\\.GIT\\\\foobar | |||
| dotgit-case-backslash .git\\\\foobar | ||||
| EOF | ||||
|  | ||||
| test_expect_success 'fsck allows .Ňit' ' | ||||
| 	( | ||||
| 		git init not-dotgit && | ||||
| 		cd not-dotgit && | ||||
| 		echo content >file && | ||||
| 		git add file && | ||||
| 		git commit -m base && | ||||
| 		blob=$(git rev-parse :file) && | ||||
| 		printf "100644 blob $blob\t.\\305\\207it" >tree && | ||||
| 		tree=$(git mktree <tree) && | ||||
| 		git fsck 2>err && | ||||
| 		test_line_count = 0 err | ||||
| 	) | ||||
| ' | ||||
|  | ||||
| test_done | ||||
|  |  | |||
							
								
								
									
										32
									
								
								utf8.c
								
								
								
								
							
							
						
						
									
										32
									
								
								utf8.c
								
								
								
								
							|  | @ -629,8 +629,8 @@ int mbs_chrlen(const char **text, size_t *remainder_p, const char *encoding) | |||
| } | ||||
|  | ||||
| /* | ||||
|  * Pick the next char from the stream, folding as an HFS+ filename comparison | ||||
|  * would. Note that this is _not_ complete by any means. It's just enough | ||||
|  * Pick the next char from the stream, ignoring codepoints an HFS+ would. | ||||
|  * Note that this is _not_ complete by any means. It's just enough | ||||
|  * to make is_hfs_dotgit() work, and should not be used otherwise. | ||||
|  */ | ||||
| static ucs_char_t next_hfs_char(const char **in) | ||||
|  | @ -667,12 +667,7 @@ static ucs_char_t next_hfs_char(const char **in) | |||
| 			continue; | ||||
| 		} | ||||
|  | ||||
| 		/* | ||||
| 		 * there's a great deal of other case-folding that occurs, | ||||
| 		 * but this is enough to catch anything that will convert | ||||
| 		 * to ".git" | ||||
| 		 */ | ||||
| 		return tolower(out); | ||||
| 		return out; | ||||
| 	} | ||||
| } | ||||
|  | ||||
|  | @ -680,10 +675,23 @@ int is_hfs_dotgit(const char *path) | |||
| { | ||||
| 	ucs_char_t c; | ||||
|  | ||||
| 	if (next_hfs_char(&path) != '.' || | ||||
| 	    next_hfs_char(&path) != 'g' || | ||||
| 	    next_hfs_char(&path) != 'i' || | ||||
| 	    next_hfs_char(&path) != 't') | ||||
| 	c = next_hfs_char(&path); | ||||
| 	if (c != '.') | ||||
| 		return 0; | ||||
| 	c = next_hfs_char(&path); | ||||
|  | ||||
| 	/* | ||||
| 	 * there's a great deal of other case-folding that occurs | ||||
| 	 * in HFS+, but this is enough to catch anything that will | ||||
| 	 * convert to ".git" | ||||
| 	 */ | ||||
| 	if (c != 'g' && c != 'G') | ||||
| 		return 0; | ||||
| 	c = next_hfs_char(&path); | ||||
| 	if (c != 'i' && c != 'I') | ||||
| 		return 0; | ||||
| 	c = next_hfs_char(&path); | ||||
| 	if (c != 't' && c != 'T') | ||||
| 		return 0; | ||||
| 	c = next_hfs_char(&path); | ||||
| 	if (c && !is_dir_sep(c)) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano