@@ -809,7 +809,7 @@ - (BOOL)moveHEADToCommit:(GTCommit *)commit error:(NSError **)error {
809809 return gitError == GIT_OK;
810810}
811811
812- - (BOOL )performCheckoutWithStrategy : (GTCheckoutStrategyType)strategy notifyFlags : (GTCheckoutNotifyFlags)notifyFlags error : (NSError **)error progressBlock : (GTCheckoutProgressBlock)progressBlock notifyBlock : (GTCheckoutNotifyBlock)notifyBlock {
812+ - (BOOL )performCheckout : (GTObject *) target withStrategy : (GTCheckoutStrategyType)strategy notifyFlags : (GTCheckoutNotifyFlags)notifyFlags error : (NSError **)error progressBlock : (GTCheckoutProgressBlock)progressBlock notifyBlock : (GTCheckoutNotifyBlock)notifyBlock {
813813
814814 git_checkout_options checkoutOptions = GIT_CHECKOUT_OPTIONS_INIT;
815815
@@ -821,7 +821,7 @@ - (BOOL)performCheckoutWithStrategy:(GTCheckoutStrategyType)strategy notifyFlags
821821 checkoutOptions.notify_flags = notifyFlags;
822822 checkoutOptions.notify_payload = (__bridge void *)notifyBlock;
823823
824- int gitError = git_checkout_head (self.git_repository , &checkoutOptions);
824+ int gitError = git_checkout_tree (self.git_repository , target. git_object , &checkoutOptions);
825825 if (gitError < GIT_OK) {
826826 if (error != NULL ) *error = [NSError git_errorFor: gitError description: @" Failed to checkout tree." ];
827827 }
@@ -830,13 +830,18 @@ - (BOOL)performCheckoutWithStrategy:(GTCheckoutStrategyType)strategy notifyFlags
830830}
831831
832832- (BOOL )checkoutCommit : (GTCommit *)targetCommit strategy : (GTCheckoutStrategyType)strategy notifyFlags : (GTCheckoutNotifyFlags)notifyFlags error : (NSError **)error progressBlock : (GTCheckoutProgressBlock)progressBlock notifyBlock : (GTCheckoutNotifyBlock)notifyBlock {
833- BOOL success = [self performCheckoutWithStrategy : strategy notifyFlags: notifyFlags error: error progressBlock: progressBlock notifyBlock: notifyBlock];
833+ BOOL success = [self performCheckout: targetCommit withStrategy : strategy notifyFlags: notifyFlags error: error progressBlock: progressBlock notifyBlock: notifyBlock];
834834 if (success == NO ) return NO ;
835835 return [self moveHEADToCommit: targetCommit error: error];
836836}
837837
838838- (BOOL )checkoutReference : (GTReference *)targetReference strategy : (GTCheckoutStrategyType)strategy notifyFlags : (GTCheckoutNotifyFlags)notifyFlags error : (NSError **)error progressBlock : (GTCheckoutProgressBlock)progressBlock notifyBlock : (GTCheckoutNotifyBlock)notifyBlock {
839- BOOL success = [self performCheckoutWithStrategy: strategy notifyFlags: notifyFlags error: error progressBlock: progressBlock notifyBlock: notifyBlock];
839+ GTOID *targetOID = [targetReference targetOID ];
840+ GTObject *target = [self lookUpObjectByOID: targetOID error: error];
841+ if (target == nil ) {
842+ return NO ;
843+ }
844+ BOOL success = [self performCheckout: target withStrategy: strategy notifyFlags: notifyFlags error: error progressBlock: progressBlock notifyBlock: notifyBlock];
840845 if (success == NO ) return NO ;
841846 return [self moveHEADToReference: targetReference error: error];
842847}
0 commit comments