From 577d21bf132daa15e8465fb3f31bfbf02b615830 Mon Sep 17 00:00:00 2001 From: Bob Sun Date: Sat, 4 Feb 2017 14:59:55 +0800 Subject: [PATCH] make cloneRepository robust --- pass/PasswordStore.swift | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/pass/PasswordStore.swift b/pass/PasswordStore.swift index 352fc78..65be9f4 100644 --- a/pass/PasswordStore.swift +++ b/pass/PasswordStore.swift @@ -42,6 +42,7 @@ class PasswordStore { static let shared = PasswordStore() let storeURL = URL(fileURLWithPath: "\(Globals.shared.documentPath)/password-store") + let tempStoreURL = URL(fileURLWithPath: "\(Globals.shared.documentPath)/password-store-temp") var storeRepository: GTRepository? var gitCredential: GitCredential? @@ -91,23 +92,24 @@ class PasswordStore { credential: GitCredential, transferProgressBlock: @escaping (UnsafePointer, UnsafeMutablePointer) -> Void, checkoutProgressBlock: @escaping (String?, UInt, UInt) -> Void) throws { - print("start cloning remote repo: \(remoteRepoURL)") - let fm = FileManager.default - if (storeRepository != nil) { - print("remove item") - do { - try fm.removeItem(at: storeURL) - } catch let error as NSError { - print(error.debugDescription) - } - } print("start cloning...") let credentialProvider = try credential.credentialProvider() let options: [String: Any] = [ GTRepositoryCloneOptionsCredentialProvider: credentialProvider, ] - storeRepository = try GTRepository.clone(from: remoteRepoURL, toWorkingDirectory: storeURL, options: options, transferProgressBlock:transferProgressBlock, checkoutProgressBlock: checkoutProgressBlock) + storeRepository = try GTRepository.clone(from: remoteRepoURL, toWorkingDirectory: tempStoreURL, options: options, transferProgressBlock:transferProgressBlock, checkoutProgressBlock: checkoutProgressBlock) print("clone finish") + let fm = FileManager.default + do { + if fm.fileExists(atPath: storeURL.path) { + try fm.removeItem(at: storeURL) + } + try fm.copyItem(at: tempStoreURL, to: storeURL) + try fm.removeItem(at: tempStoreURL) + } catch { + print(error) + } + storeRepository = try GTRepository(url: storeURL) updatePasswordEntityCoreData() gitCredential = credential }