From 406125eee233a49e59c066e04371698df151ea10 Mon Sep 17 00:00:00 2001 From: Pieter de Bie Date: Tue, 14 Oct 2008 01:38:06 +0200 Subject: [PATCH] GitRepository: Cache HEAD ref Since 63523d00e8265a097cb23f7535b6f4bb83ca08e6 (History view: Make lozenge of currently checked out branch (HEAD) bold, same as gitk.), -[PBGitRepository headRef] was called every time a cell needed redrawing. This made GitX slow overall, but especially when resizing the window. So, it's better to cache the value. We'll still reload it with an explicit refresh though. --- PBGitRepository.h | 2 ++ PBGitRepository.m | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/PBGitRepository.h b/PBGitRepository.h index 9d743d9..ccbc1cd 100644 --- a/PBGitRepository.h +++ b/PBGitRepository.h @@ -19,6 +19,8 @@ extern NSString* PBGitRepositoryErrorDomain; NSMutableArray* branches; NSIndexSet* currentBranch; NSMutableDictionary* refs; + + PBGitRevSpecifier *_headRef; // Caching } - (NSFileHandle*) handleForCommand:(NSString*) cmd; diff --git a/PBGitRepository.m b/PBGitRepository.m index 5ccb5e4..4611008 100644 --- a/PBGitRepository.m +++ b/PBGitRepository.m @@ -188,6 +188,7 @@ NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain"; // returns YES when a ref was changed - (BOOL) reloadRefs { + _headRef = nil; BOOL ret = NO; refs = [NSMutableDictionary dictionary]; @@ -233,13 +234,18 @@ NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain"; hasChanged = NO; } -- (PBGitRevSpecifier*) headRef +- (PBGitRevSpecifier *)headRef { + if (_headRef) + return _headRef; + NSString* branch = [self parseSymbolicReference: @"HEAD"]; if (branch && [branch hasPrefix:@"refs/heads/"]) - return [[PBGitRevSpecifier alloc] initWithRef:[PBGitRef refFromString:branch]]; + _headRef = [[PBGitRevSpecifier alloc] initWithRef:[PBGitRef refFromString:branch]]; + else + _headRef = [[PBGitRevSpecifier alloc] initWithRef:[PBGitRef refFromString:@"HEAD"]]; - return [[PBGitRevSpecifier alloc] initWithRef:[PBGitRef refFromString:@"HEAD"]]; + return _headRef; } // Returns either this object, or an existing, equal object