diff --git a/PBGitRepository.m b/PBGitRepository.m index 89691f9..72e1495 100644 --- a/PBGitRepository.m +++ b/PBGitRepository.m @@ -72,7 +72,11 @@ NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain"; return repositoryURL; } -- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError **)outError +// NSFileWrapper is broken and doesn't work when called on a directory containing a large number of directories and files. +//because of this it is safer to implement readFromURL than readFromFileWrapper. +//Because NSFileManager does not attempt to recursively open all directories and file when fileExistsAtPath is called +//this works much better. +- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError { BOOL success = NO; @@ -85,11 +89,12 @@ NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain"; } return NO; } - - if (![fileWrapper isDirectory]) { + BOOL lIsDirectory = FALSE; + [[NSFileManager defaultManager] fileExistsAtPath:[absoluteURL path] isDirectory:&lIsDirectory]; + if (!lIsDirectory) { if (outError) { - NSDictionary* userInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Reading files is not supported.", [fileWrapper filename]] - forKey:NSLocalizedRecoverySuggestionErrorKey]; + NSDictionary* userInfo = [NSDictionary dictionaryWithObject:@"Reading files is not supported." + forKey:NSLocalizedRecoverySuggestionErrorKey]; *outError = [NSError errorWithDomain:PBGitRepositoryErrorDomain code:0 userInfo:userInfo]; } } else { @@ -98,8 +103,8 @@ NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain"; [self setFileURL:gitDirURL]; success = YES; } else if (outError) { - NSDictionary* userInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"%@ does not appear to be a git repository.", [fileWrapper filename]] - forKey:NSLocalizedRecoverySuggestionErrorKey]; + NSDictionary* userInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"%@ does not appear to be a git repository.", [self fileName]] + forKey:NSLocalizedRecoverySuggestionErrorKey]; *outError = [NSError errorWithDomain:PBGitRepositoryErrorDomain code:0 userInfo:userInfo]; }