diff --git a/PBGitRepository.h b/PBGitRepository.h index 605ea82..8623b6a 100644 --- a/PBGitRepository.h +++ b/PBGitRepository.h @@ -34,6 +34,7 @@ extern NSString* PBGitRepositoryErrorDomain; - (NSString*) outputForArguments:(NSArray*) args; - (NSString*) outputForArguments:(NSArray*) args retValue:(int *)ret; - (NSString *)outputInWorkdirForArguments:(NSArray*) arguments; +- (NSString *)outputInWorkdirForArguments:(NSArray*) arguments retValue:(int *)ret; - (NSString *)workingDirectory; diff --git a/PBGitRepository.m b/PBGitRepository.m index 6301628..a017b16 100644 --- a/PBGitRepository.m +++ b/PBGitRepository.m @@ -353,8 +353,12 @@ NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain"; return [PBEasyPipe outputForCommand:[PBGitBinary path] withArgs:arguments inDir: [self workingDirectory]]; } +- (NSString*) outputInWorkdirForArguments:(NSArray *)arguments retValue:(int *)ret +{ + return [PBEasyPipe outputForCommand:[PBGitBinary path] withArgs:arguments inDir:[self workingDirectory] retValue: ret]; +} -- (NSString*) outputForArguments:(NSArray *)arguments retValue:(int *)ret; +- (NSString*) outputForArguments:(NSArray *)arguments retValue:(int *)ret { return [PBEasyPipe outputForCommand:[PBGitBinary path] withArgs:arguments inDir: self.fileURL.path retValue: ret]; } diff --git a/PBRefController.m b/PBRefController.m index 4bf1ce4..d075dfb 100644 --- a/PBRefController.m +++ b/PBRefController.m @@ -30,6 +30,21 @@ [commitController rearrangeObjects]; } +- (void) checkoutRef:(PBRefMenuItem *)sender +{ + int ret = 1; + [historyController.repository outputInWorkdirForArguments:[NSArray arrayWithObjects:@"checkout", [[sender ref] shortName], nil] retValue: &ret]; + if (ret) { + [[NSAlert alertWithMessageText:@"Checking out branch failed" + defaultButton:@"OK" + alternateButton:nil + otherButton:nil + informativeTextWithFormat:@"There was an error checking out the branch. Perhaps your working directory is not clean?"] runModal]; + return; + } + [historyController.repository reloadRefs]; +} + - (NSArray *) menuItemsForRef:(PBGitRef *)ref commit:(PBGitCommit *)commit { return [PBRefMenuItem defaultMenuItemsForRef:ref commit:commit target:self]; diff --git a/PBRefMenuItem.m b/PBRefMenuItem.m index bc70d16..ab378c8 100644 --- a/PBRefMenuItem.m +++ b/PBRefMenuItem.m @@ -24,10 +24,10 @@ [array addObject:[[PBRefMenuItem alloc] initWithTitle:[@"Delete " stringByAppendingString:type] action:@selector(removeRef:) keyEquivalent: @""]]; - - [array addObject:[[PBRefMenuItem alloc] initWithTitle:[@"Checkout " stringByAppendingString:type] - action:@selector(checkoutRef:) - keyEquivalent: @""]]; + if ([type isEqualToString:@"branch"]) + [array addObject:[[PBRefMenuItem alloc] initWithTitle:@"Checkout branch" + action:@selector(checkoutRef:) + keyEquivalent: @""]]; for (PBRefMenuItem *item in array) {