2017-12-20 6 views
0

プログレスバーを使用してクローンの進捗状況を表示します。私は自分のコードを使って何も得ることができません。 gitのクローンアクションのプログレスバーの使い方ココアでNSTaskで `git clone`の進捗状況を表示します

@discardableResult 
private func process(launchPath: String? = nil, arguments: [String]) throws -> String? { 
    let process = Process() 
    if let launchPath = launchPath { 
     process.currentDirectoryPath = launchPath 
    } 
    process.launchPath = "/usr/bin/env" 
    process.arguments = arguments 

    var errorData = Data() 

    let outputPipe = Pipe() 
    process.standardOutput = outputPipe 

    let errorPipe = Pipe() 
    process.standardError = errorPipe 

    errorPipe.fileHandleForReading.readabilityHandler = { handler in 
     let data = handler.availableData 
     errorData.append(data) 
    } 

    process.launch() 

    let outdata = outputPipe.fileHandleForReading.readDataToEndOfFile() 

    process.waitUntilExit() 

    if process.terminationStatus != 0 { 
     throw Error.processFailed(status: process.terminationStatus, message: errorData.shellString) 
    } 

    return String(data: outdata, encoding: .utf8) 
} 

、私はこの機能を使用します:私はすべてのタスクのために、この機能を使用し、誰かが私に

let pro = Process() 
pro.launchPath = "/bin/bash" 
pro.arguments = ["-c", "cd /Users/admin/Documents; git clone https://gitee.com/gjesse/laravel.git"] 

pro.terminationHandler = { pro in 
    print("clone finish") 
} 

let pip = Pipe() 
pro.standardOutput = pip 

let file = pip.fileHandleForReading 
file.readInBackgroundAndNotify() 

NotificationCenter.default.addObserver(forName: NSNotification.Name.NSFileHandleDataAvailable, object: file, queue: nil) { notification in 
    let output = file.readDataToEndOfFile() 
    print("log\(String(describing: String(data: output, encoding: String.Encoding.utf8)))log") 
} 
pro.launch() 
pro.waitUntilExit() 
+0

コードに問題がありますか?どのエラーがありますか? –

+0

ログを取得できません。 –

答えて

0

を助けることを願ってます例えば

func clone(fromPath path: String, toLocalPath localPath: String, branch: String? = nil) throws { 
    var arguments = ["git", "clone", path, localPath, "--quiet"] 
    if let branch = branch { 
     arguments.append(contentsOf: ["-b", branch]) 
    } 
    try process(arguments: arguments) 
} 

を、単にコール:

clone(fromPath: "https://gitee.com/gjesse/laravel.git", toLocalPath: "/Users/admin/Documents") 
+0

申し訳ありませんが、進捗バーにはクローンの進捗状況が表示されます。私のコードを複製するだけではありません。 –

+0

質問を更新してください。 BTWでは、[ユーティリティ](https://www.hackingwithswift.com/articles/44/apple-s-new-utility-library-will-power-up-command-line-apps)の 'TerminalController'をプログレスバーの表示 –

+0

申し訳ありませんが、私の説明が十分ではありません。私は質問を更新しました。 –

関連する問題