Skip to content

Commit 9a2c37c

Browse files
committed
Merge pull request #439 from alehed/master
Add ability to cancel the remote part of the clone operation
2 parents 658b8e9 + f534b97 commit 9a2c37c

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

ObjectiveGit/GTRepository.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ extern NSString * const GTRepositoryInitOptionsOriginURLString;
210210
/// (if `GTRepositoryCloneOptionsCheckout` is YES).
211211
///
212212
/// returns nil (and fills the error parameter) if an error occurred, or a GTRepository object if successful.
213-
+ (id)cloneFromURL:(NSURL *)originURL toWorkingDirectory:(NSURL *)workdirURL options:(NSDictionary *)options error:(NSError **)error transferProgressBlock:(void (^)(const git_transfer_progress *))transferProgressBlock checkoutProgressBlock:(void (^)(NSString *path, NSUInteger completedSteps, NSUInteger totalSteps))checkoutProgressBlock;
213+
+ (id)cloneFromURL:(NSURL *)originURL toWorkingDirectory:(NSURL *)workdirURL options:(NSDictionary *)options error:(NSError **)error transferProgressBlock:(void (^)(const git_transfer_progress *, BOOL *stop))transferProgressBlock checkoutProgressBlock:(void (^)(NSString *path, NSUInteger completedSteps, NSUInteger totalSteps))checkoutProgressBlock;
214214

215215
/// Lookup objects in the repo by oid or sha1
216216
- (id)lookUpObjectByOID:(GTOID *)oid objectType:(GTObjectType)type error:(NSError **)error;

ObjectiveGit/GTRepository.m

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ - (id)initWithURL:(NSURL *)localFileURL error:(NSError **)error {
184184
}
185185

186186

187-
typedef void(^GTTransferProgressBlock)(const git_transfer_progress *progress);
187+
typedef void(^GTTransferProgressBlock)(const git_transfer_progress *progress, BOOL *stop);
188188

189189
static void checkoutProgressCallback(const char *path, size_t completedSteps, size_t totalSteps, void *payload) {
190190
if (payload == NULL) return;
@@ -197,8 +197,10 @@ static int transferProgressCallback(const git_transfer_progress *progress, void
197197
if (payload == NULL) return 0;
198198
struct GTClonePayload *pld = payload;
199199
if (pld->transferProgressBlock == NULL) return 0;
200-
pld->transferProgressBlock(progress);
201-
return 0;
200+
201+
BOOL stop = NO;
202+
pld->transferProgressBlock(progress, &stop);
203+
return (stop ? GIT_EUSER : 0);
202204
}
203205

204206
struct GTClonePayload {
@@ -222,7 +224,7 @@ static int remoteCreate(git_remote **remote, git_repository *repo, const char *n
222224
git_remote_callbacks remoteCallbacks;
223225
};
224226

225-
+ (id)cloneFromURL:(NSURL *)originURL toWorkingDirectory:(NSURL *)workdirURL options:(NSDictionary *)options error:(NSError **)error transferProgressBlock:(void (^)(const git_transfer_progress *))transferProgressBlock checkoutProgressBlock:(void (^)(NSString *path, NSUInteger completedSteps, NSUInteger totalSteps))checkoutProgressBlock {
227+
+ (id)cloneFromURL:(NSURL *)originURL toWorkingDirectory:(NSURL *)workdirURL options:(NSDictionary *)options error:(NSError **)error transferProgressBlock:(void (^)(const git_transfer_progress *, BOOL *stop))transferProgressBlock checkoutProgressBlock:(void (^)(NSString *path, NSUInteger completedSteps, NSUInteger totalSteps))checkoutProgressBlock {
226228

227229
git_clone_options cloneOptions = GIT_CLONE_OPTIONS_INIT;
228230

0 commit comments

Comments
 (0)