From c25c4fdb6fd19b5c1004117d29eba75a579de065 Mon Sep 17 00:00:00 2001 From: Clay Bridges Date: Mon, 29 Jul 2013 19:37:01 +0100 Subject: [PATCH 1/2] Fix handling of branches with @ character Fixes https://github.com/rowanj/gitx/issues/233. --- Classes/git/PBGitRevSpecifier.m | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Classes/git/PBGitRevSpecifier.m b/Classes/git/PBGitRevSpecifier.m index c3cd6190d..bde871414 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; } From 6fd280d5740695d05b80355cfde645f06655135c Mon Sep 17 00:00:00 2001 From: Clay Bridges Date: Tue, 30 Jul 2013 11:23:25 +0100 Subject: [PATCH 2/2] Fix detached HEAD not showing in tree Fixes: https://github.com/rowanj/gitx/issues/189 --- Classes/git/PBGitRevSpecifier.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classes/git/PBGitRevSpecifier.m b/Classes/git/PBGitRevSpecifier.m index bde871414..f53c6c410 100644 --- a/Classes/git/PBGitRevSpecifier.m +++ b/Classes/git/PBGitRevSpecifier.m @@ -59,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