iOS:使用 NSTask 检查 SVN checkout 是否成功

标签 ios objective-c svn svn-checkout

所以我目前正在使用以下代码来 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);

这段代码工作正常,但我想以编程方式检查结帐是否真正成功?如果 checkout 成功,NSLog 会打印“Checked out revision XY.”,但我观察到它会打印即使文件实际上无法放入指定的目录中(如果目标路径有某种问题) )。它将打印“已 checkout 修订 XY”消息以及目标目录不好的消息。

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

最佳答案

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

[task waitUntilExit];

或者通过注册并等待NSTaskDidTerminateNotification来异步进行。

然后获取进程退出状态:

int status = [task terminationStatus];

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

关于iOS:使用 NSTask 检查 SVN checkout 是否成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12473651/

相关文章:

ios - 在 AVAudioSession 中使用 != buk。 swift 2 中的当前路线

SVN、Samba 和符号链接(symbolic link)。怎么让大家一起玩?

svn - 有没有办法从 SVN 更新中排除大文件或某些文件类型?

ios - Grand Central Dispatch 和单元测试

objective-c - iPad 框架上的 UIActionSheet 太小

svn - 我应该如何构建 SVN 的工作副本?

objective-c - 无法识别的选择器发送到构造函数上的实例

iOS swift : NSBlockOperation behaves differently on iPhone simulator 6s and 5s

ios - UiCollectionView 单元格问题

iOS 本地通知 userInfo 始终为 null