diff --git a/Classes/git/PBGitRevSpecifier.m b/Classes/git/PBGitRevSpecifier.m index c3cd6190d..f53c6c410 100644 --- a/Classes/git/PBGitRevSpecifier.m +++ b/Classes/git/PBGitRevSpecifier.m @@ -8,12 +8,21 @@ #import "PBGitRevSpecifier.h" - @implementation PBGitRevSpecifier @synthesize parameters, description, workingDirectory; @synthesize isSimpleRef; +// I believe this relates loosely to parts of git-check-ref-format. +// cf. https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html +// +BOOL ContainsComplexRefCharSequence(NSString *refString) +{ + return [refString hasPrefix:@"-"] || + [refString rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@" ~^:"]].location != NSNotFound || + [refString rangeOfString:@".."].location != NSNotFound || + [refString rangeOfString:@"@{"].location != NSNotFound; +} // internal designated init - (id) initWithParameters:(NSArray *)params description:(NSString *)descrip @@ -21,18 +30,7 @@ - (id) initWithParameters:(NSArray *)params description:(NSString *)descrip self = [super init]; parameters = params; description = descrip; - - if (([parameters count] > 1) || ([parameters count] == 0)) - isSimpleRef = NO; - else { - NSString *param = [parameters objectAtIndex:0]; - if ([param hasPrefix:@"-"] || - [param rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"^@{}~:"]].location != NSNotFound || - [param rangeOfString:@".."].location != NSNotFound) - isSimpleRef = NO; - else - isSimpleRef = YES; - } + isSimpleRef = (parameters.count == 1) && !ContainsComplexRefCharSequence(parameters[0]); return self; } @@ -61,7 +59,7 @@ - (id) initWithCoder:(NSCoder *)coder + (PBGitRevSpecifier *)allBranchesRevSpec { // Using --all here would include refs like refs/notes/commits, which probably isn't what we want. - return [[PBGitRevSpecifier alloc] initWithParameters:[NSArray arrayWithObjects:@"--branches", @"--remotes", @"--tags", @"--glob=refs/stash*", nil] description:@"All branches"]; + return [[PBGitRevSpecifier alloc] initWithParameters:@[@"HEAD", @"--branches", @"--remotes", @"--tags", @"--glob=refs/stash*"] description:@"All branches"]; } + (PBGitRevSpecifier *)localBranchesRevSpec