Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Rework checkout methods to checkout the target treeish instead of head
  • Loading branch information
dleehr committed Aug 19, 2015
commit c1e58a64c6206608c6d5c27ebeb88f8f75a41af0
13 changes: 9 additions & 4 deletions ObjectiveGit/GTRepository.m
Original file line number Diff line number Diff line change
Expand Up @@ -809,7 +809,7 @@ - (BOOL)moveHEADToCommit:(GTCommit *)commit error:(NSError **)error {
return gitError == GIT_OK;
}

- (BOOL)performCheckoutWithStrategy:(GTCheckoutStrategyType)strategy notifyFlags:(GTCheckoutNotifyFlags)notifyFlags error:(NSError **)error progressBlock:(GTCheckoutProgressBlock)progressBlock notifyBlock:(GTCheckoutNotifyBlock)notifyBlock {
- (BOOL)performCheckout:(GTObject *)target withStrategy:(GTCheckoutStrategyType)strategy notifyFlags:(GTCheckoutNotifyFlags)notifyFlags error:(NSError **)error progressBlock:(GTCheckoutProgressBlock)progressBlock notifyBlock:(GTCheckoutNotifyBlock)notifyBlock {

git_checkout_options checkoutOptions = GIT_CHECKOUT_OPTIONS_INIT;

Expand All @@ -821,7 +821,7 @@ - (BOOL)performCheckoutWithStrategy:(GTCheckoutStrategyType)strategy notifyFlags
checkoutOptions.notify_flags = notifyFlags;
checkoutOptions.notify_payload = (__bridge void *)notifyBlock;

int gitError = git_checkout_head(self.git_repository, &checkoutOptions);
int gitError = git_checkout_tree(self.git_repository, target.git_object, &checkoutOptions);
if (gitError < GIT_OK) {
if (error != NULL) *error = [NSError git_errorFor:gitError description:@"Failed to checkout tree."];
}
Expand All @@ -830,13 +830,18 @@ - (BOOL)performCheckoutWithStrategy:(GTCheckoutStrategyType)strategy notifyFlags
}

- (BOOL)checkoutCommit:(GTCommit *)targetCommit strategy:(GTCheckoutStrategyType)strategy notifyFlags:(GTCheckoutNotifyFlags)notifyFlags error:(NSError **)error progressBlock:(GTCheckoutProgressBlock)progressBlock notifyBlock:(GTCheckoutNotifyBlock)notifyBlock {
BOOL success = [self performCheckoutWithStrategy:strategy notifyFlags:notifyFlags error:error progressBlock:progressBlock notifyBlock:notifyBlock];
BOOL success = [self performCheckout:targetCommit withStrategy:strategy notifyFlags:notifyFlags error:error progressBlock:progressBlock notifyBlock:notifyBlock];
if (success == NO) return NO;
return [self moveHEADToCommit:targetCommit error:error];
}

- (BOOL)checkoutReference:(GTReference *)targetReference strategy:(GTCheckoutStrategyType)strategy notifyFlags:(GTCheckoutNotifyFlags)notifyFlags error:(NSError **)error progressBlock:(GTCheckoutProgressBlock)progressBlock notifyBlock:(GTCheckoutNotifyBlock)notifyBlock {
BOOL success = [self performCheckoutWithStrategy:strategy notifyFlags:notifyFlags error:error progressBlock:progressBlock notifyBlock:notifyBlock];
GTOID *targetOID = [targetReference targetOID];
GTObject *target = [self lookUpObjectByOID:targetOID error:error];
if (target == nil) {
return NO;
}
BOOL success = [self performCheckout:target withStrategy:strategy notifyFlags:notifyFlags error:error progressBlock:progressBlock notifyBlock:notifyBlock];
if (success == NO) return NO;
return [self moveHEADToReference:targetReference error:error];
}
Expand Down