Skip to content

Commit c1e58a6

Browse files
committed
Rework checkout methods to checkout the target treeish instead of head
1 parent 3c17305 commit c1e58a6

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

ObjectiveGit/GTRepository.m

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)