diff --git a/ObjectiveGit/GTRepository+Status.h b/ObjectiveGit/GTRepository+Status.h index b0e1e7f65..be12965da 100644 --- a/ObjectiveGit/GTRepository+Status.h +++ b/ObjectiveGit/GTRepository+Status.h @@ -133,6 +133,16 @@ extern NSString *const GTRepositoryStatusOptionsPathSpecArrayKey; /// Returns YES if the file should be ignored; NO otherwise. - (BOOL)shouldFileBeIgnored:(NSURL *)fileURL success:(nullable BOOL *)success error:(NSError **)error; +/// An enum for use with shouldIgnoreFileURL:error: below +typedef NS_ENUM(NSInteger, GTFileIgnoreState) { + GTFileIgnoreStateIgnoreCheckFailed = -1, + GTFileIgnoreStateShouldNotIgnore = 0, + GTFileIgnoreStateShouldIgnore = 1 +}; + +/// Convenience wrapper for shouldFileBeIgnored:success:error: +- (GTFileIgnoreState)shouldIgnoreFileURL:(NSURL *)fileURL error:(NSError **)error; + @end NS_ASSUME_NONNULL_END diff --git a/ObjectiveGit/GTRepository+Status.m b/ObjectiveGit/GTRepository+Status.m index a7821b44a..f486668c0 100644 --- a/ObjectiveGit/GTRepository+Status.m +++ b/ObjectiveGit/GTRepository+Status.m @@ -125,4 +125,13 @@ - (BOOL)shouldFileBeIgnored:(NSURL *)fileURL success:(BOOL *)success error:(NSEr return (ignoreState == 1 ? YES : NO); } +- (GTFileIgnoreState)shouldIgnoreFileURL:(NSURL *)fileURL error:(NSError **)error { + BOOL success = NO; + BOOL ignore = [self shouldFileBeIgnored:fileURL success:&success error:error]; + if (success) { + return (ignore ? GTFileIgnoreStateShouldIgnore : GTFileIgnoreStateShouldNotIgnore); + } + return GTFileIgnoreStateIgnoreCheckFailed; +} + @end diff --git a/ObjectiveGitTests/GTRepository+StatusSpec.m b/ObjectiveGitTests/GTRepository+StatusSpec.m index de7a95312..111f14a8d 100644 --- a/ObjectiveGitTests/GTRepository+StatusSpec.m +++ b/ObjectiveGitTests/GTRepository+StatusSpec.m @@ -105,6 +105,24 @@ expect(@(enumerationSuccessful)).to(beTruthy()); expect(err).to(beNil()); }); + + it(@"should report file should be ignored", ^{ + __block NSError *err = nil; + NSURL *fileURL = [repository.fileURL URLByAppendingPathComponent:@".DS_Store"]; + BOOL success = NO; + BOOL shouldIgnore = [repository shouldFileBeIgnored:fileURL success:&success error:&err]; + expect(@(success)).to(beTrue()); + expect(@(shouldIgnore)).to(beTrue()); + expect(err).to(beNil()); + }); + + it(@"should report file should be ignored (convenience wrapper)", ^{ + __block NSError *err = nil; + NSURL *fileURL = [repository.fileURL URLByAppendingPathComponent:@".DS_Store"]; + GTFileIgnoreState ignore = [repository shouldIgnoreFileURL:fileURL error:&err]; + expect(@(ignore)).to(equal(@(GTFileIgnoreStateShouldIgnore))); + expect(err).to(beNil()); + }); }); afterEach(^{