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