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);

此代码工作正常,但我想以编程方式检查结帐是否真的成功?如果签出成功, NSLog 会打印“ Checked out revision XY.”,但我观察到即使文件实际上无法放入指定的目录(如果目标路径有点糟糕),它也会打印。它将打印 Checked out revision XY 消息以及目标目录不好的消息。

所以我的问题是:什么是测试结帐是否完全正常的可靠方法以及如何确保在结帐过程完成后完成检查(我不确定,但它不是异步的吗?或者会必须在 bg 线程中才能异步?)。

4

1 回答 1

3

首先等到任务完成。这可以同步完成:

[task waitUntilExit];

或通过注册并等待NSTaskDidTerminateNotification.

然后获取进程退出状态:

int status = [task terminationStatus];

对于大多数命令,退出状态0表示没有错误,退出状态> 0表示有错误。我很确定这适用于svn命令,但您可以使用 svn 文档进行检查。

于 2012-09-18T09:47:20.083 回答