diff --git a/PBGitRevisionCell.m b/PBGitRevisionCell.m index 98f978b..bb3f7d7 100644 --- a/PBGitRevisionCell.m +++ b/PBGitRevisionCell.m @@ -291,8 +291,9 @@ if (!ref) return [self menu]; - NSArray *items = [contextMenuDelegate menuItemsForRef:ref commit:[self objectValue]]; NSMenu *menu = [[NSMenu alloc] init]; + [menu setAutoenablesItems:NO]; + NSArray *items = [contextMenuDelegate menuItemsForRef:ref commit:[self objectValue]]; for (NSMenuItem *item in items) [menu addItem:item]; return menu; diff --git a/PBRefMenuItem.m b/PBRefMenuItem.m index a711370..c62c9d8 100644 --- a/PBRefMenuItem.m +++ b/PBRefMenuItem.m @@ -21,19 +21,25 @@ else if ([type isEqualToString:@"head"]) type = @"branch"; - [array addObject:[[PBRefMenuItem alloc] initWithTitle:[@"Delete " stringByAppendingString:type] - action:@selector(removeRef:) - keyEquivalent: @""]]; + NSString *remote = [[[commit repository] config] valueForKeyPath:[NSString stringWithFormat:@"branch.%@.remote", [ref shortName]]]; + bool has_remote = remote != NULL; + + if ([type isEqualToString:@"branch"]) { + PBRefMenuItem *push = [[PBRefMenuItem alloc] initWithTitle:@"Push branch" + action:@selector(pushRef:) + keyEquivalent: @""]; + if(!has_remote) [push setEnabled:NO]; + [array addObject:push]; + } + if ([type isEqualToString:@"branch"]) [array addObject:[[PBRefMenuItem alloc] initWithTitle:@"Checkout branch" action:@selector(checkoutRef:) keyEquivalent: @""]]; - - if ([type isEqualToString:@"branch"]) - [array addObject:[[PBRefMenuItem alloc] initWithTitle:@"Push branch" - action:@selector(pushRef:) - keyEquivalent: @""]]; - + + [array addObject:[[PBRefMenuItem alloc] initWithTitle:[@"Delete " stringByAppendingString:type] + action:@selector(removeRef:) + keyEquivalent: @""]]; if ([type isEqualToString:@"tag"]) [array addObject:[[PBRefMenuItem alloc] initWithTitle:@"View tag info" action:@selector(tagInfo:)