iOS:检查使用NSTask的SVN结帐是否成功

时间:2012-09-18 09:00:51

标签: ios objective-c svn svn-checkout

所以我目前正在使用以下代码来检查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线程中才能保持异步?)。

1 个答案:

答案 0 :(得分:3)

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

[task waitUntilExit];
通过注册和等待NSTaskDidTerminateNotification

或异步。

然后获取流程退出状态:

int status = [task terminationStatus];

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