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 | dotgit-case-backslash .git\\\\foobar | ||||||
| EOF | 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 | 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 |  * Pick the next char from the stream, ignoring codepoints an HFS+ would. | ||||||
|  * would. Note that this is _not_ complete by any means. It's just enough |  * 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. |  * to make is_hfs_dotgit() work, and should not be used otherwise. | ||||||
|  */ |  */ | ||||||
| static ucs_char_t next_hfs_char(const char **in) | 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; | 			continue; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		/* | 		return out; | ||||||
| 		 * 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); |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -680,10 +675,23 @@ int is_hfs_dotgit(const char *path) | ||||||
| { | { | ||||||
| 	ucs_char_t c; | 	ucs_char_t c; | ||||||
|  |  | ||||||
| 	if (next_hfs_char(&path) != '.' || | 	c = next_hfs_char(&path); | ||||||
| 	    next_hfs_char(&path) != 'g' || | 	if (c != '.') | ||||||
| 	    next_hfs_char(&path) != 'i' || | 		return 0; | ||||||
| 	    next_hfs_char(&path) != 't') | 	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; | 		return 0; | ||||||
| 	c = next_hfs_char(&path); | 	c = next_hfs_char(&path); | ||||||
| 	if (c && !is_dir_sep(c)) | 	if (c && !is_dir_sep(c)) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano