mirror of
https://github.com/kennethreitz-archive/gitx.git
synced 2026-06-05 23:40:18 +00:00
Speed up commit's isOnSameBranch
Use the cached commit list to avoid asking git for the info. This is used to update GUI buttons and when opening the contextual menu so making it fast is important. It wasn't possible before because we weren't storing all the commits.
This commit is contained in:
+1
-11
@@ -89,17 +89,7 @@ NSString * const kGitXCommitType = @"commit";
|
||||
if ([otherSHA isEqualToString:mySHA])
|
||||
return YES;
|
||||
|
||||
NSString *commitRange = [NSString stringWithFormat:@"%@..%@", mySHA, otherSHA];
|
||||
NSString *parentsOutput = [repository outputForArguments:[NSArray arrayWithObjects:@"rev-list", @"--parents", @"-1", commitRange, nil]];
|
||||
if ([parentsOutput isEqualToString:@""]) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
NSString *mergeSHA = [repository outputForArguments:[NSArray arrayWithObjects:@"merge-base", mySHA, otherSHA, nil]];
|
||||
if ([mergeSHA isEqualToString:mySHA] || [mergeSHA isEqualToString:otherSHA])
|
||||
return YES;
|
||||
|
||||
return NO;
|
||||
return [repository isOnSameBranch:otherSHA asSHA:mySHA];
|
||||
}
|
||||
|
||||
- (BOOL) isOnHeadBranch
|
||||
|
||||
@@ -80,6 +80,7 @@ enum branchFilterTypes {
|
||||
- (NSString *) shaForRef:(PBGitRef *)ref;
|
||||
- (PBGitCommit *) commitForRef:(PBGitRef *)ref;
|
||||
- (PBGitCommit *) commitForSHA:(NSString *)sha;
|
||||
- (BOOL) isOnSameBranch:(NSString *)baseSHA asSHA:(NSString *)testSHA;
|
||||
- (BOOL) isSHAOnHeadBranch:(NSString *)testSHA;
|
||||
- (BOOL) isRefOnHeadBranch:(PBGitRef *)testRef;
|
||||
- (BOOL) checkRefFormat:(NSString *)refName;
|
||||
|
||||
+28
-11
@@ -340,6 +340,33 @@ NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain";
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (BOOL) isOnSameBranch:(NSString *)branchSHA asSHA:(NSString *)testSHA
|
||||
{
|
||||
if (!branchSHA || !testSHA)
|
||||
return NO;
|
||||
|
||||
if ([testSHA isEqualToString:branchSHA])
|
||||
return YES;
|
||||
|
||||
NSArray *revList = revisionList.projectCommits;
|
||||
|
||||
NSMutableSet *searchSHAs = [NSMutableSet setWithObject:branchSHA];
|
||||
|
||||
for (PBGitCommit *commit in revList) {
|
||||
NSString *commitSHA = [commit realSha];
|
||||
if ([searchSHAs containsObject:commitSHA]) {
|
||||
if ([testSHA isEqualToString:commitSHA])
|
||||
return YES;
|
||||
[searchSHAs removeObject:commitSHA];
|
||||
[searchSHAs addObjectsFromArray:commit.parents];
|
||||
}
|
||||
else if ([testSHA isEqualToString:commitSHA])
|
||||
return NO;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL) isSHAOnHeadBranch:(NSString *)testSHA
|
||||
{
|
||||
if (!testSHA)
|
||||
@@ -350,17 +377,7 @@ NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain";
|
||||
if ([testSHA isEqualToString:headSHA])
|
||||
return YES;
|
||||
|
||||
NSString *commitRange = [NSString stringWithFormat:@"%@..%@", testSHA, headSHA];
|
||||
NSString *parentsOutput = [self outputForArguments:[NSArray arrayWithObjects:@"rev-list", @"--parents", @"-1", commitRange, nil]];
|
||||
if ([parentsOutput isEqualToString:@""]) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
NSString *mergeSHA = [self outputForArguments:[NSArray arrayWithObjects:@"merge-base", testSHA, headSHA, nil]];
|
||||
if ([mergeSHA isEqualToString:testSHA] || [mergeSHA isEqualToString:headSHA])
|
||||
return YES;
|
||||
|
||||
return NO;
|
||||
return [self isOnSameBranch:headSHA asSHA:testSHA];
|
||||
}
|
||||
|
||||
- (BOOL) isRefOnHeadBranch:(PBGitRef *)testRef
|
||||
|
||||
Reference in New Issue
Block a user