2

だから私は現在、次のコードを使用してSVNディレクトリをチェックアウトしています:

NSTask *task = [[NSTask alloc] init];
NSPipe *checkoutPipe = [[NSPipe alloc] init];
[task setLaunchPath:@"/usr/bin/svn"];
[task setArguments:[NSArray arrayWithObjects:@"checkout",SVN_URL_OF_PRJECT_DIR,DEST_DIR,@"--username",SVN_USER,@"--password",SVN_PASSWORD,nil]];
[task setStandardOutput:checkoutPipe];
[task launch];

NSFileHandle *file = [checkoutPipe fileHandleForReading];
NSData *data = [file readDataToEndOfFile];
NSString *checkoutResult = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"Result: %@",checkoutResult);

このコードは正常に動作しますが、チェックアウトが本当に成功したかどうかをプログラムで確認したいですか? Checked out revision XY.チェックアウトが成功した場合、NSLog は " " を出力しますが、指定されたディレクトリにファイルを実際に置くことができなかった場合でも (出力先のパスが何らかの理由で間違っている場合)、それが出力されることを確認しました。チェックアウトされたリビジョン XY メッセージと、宛先ディレクトリが不適切であるというメッセージが出力されます。

だから私の質問は次のとおりです:チェックアウトが完全にOKであったかどうかをテストする確実な方法と、チェックアウトプロセスが完了した後にチェックが行われたことを確認する方法は何ですか(よくわかりませんが、非同期ではありませんか?それとも非同期にするために bg スレッドにいる必要がありますか?)。

4

1 に答える 1

3

まず、タスクが完了するまで待ちます。これは同期的に行うことができます:

[task waitUntilExit];

または、登録して待機することにより、非同期にNSTaskDidTerminateNotification.

次に、プロセスの終了ステータスを取得します。

int status = [task terminationStatus];

ほとんどのコマンドでは、終了ステータスは0エラーがないことを意味し、終了ステータス> 0は何らかのエラーを示します。これがコマンドに当てはまることは確かですsvnが、svnのドキュメントで確認できます。

于 2012-09-18T09:47:20.083 に答える