首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为使用p4api运行Perforce命令指定全局选项

为使用p4api运行Perforce命令指定全局选项
EN

Stack Overflow用户
提问于 2019-10-30 22:02:57
回答 1查看 247关注 0票数 1

我在使用Perforce,也就是。螺旋核心,C++ API以编程方式运行Perforce命令。如何为该命令指定全局选项?

例如,我想以编程方式使用几个全局选项运行clients命令。如果从命令shell运行,则如下所示。

代码语言:javascript
复制
p4 -z tag -F %client% clients -u mikef

据我所知,我想要的全局选项-z-F不是您可以通过环境变量指定的选项。但是,即使您可以,我也不能依靠用户来设置它们。

在云雀中,我将全局选项添加到提供给ClientApi对象的参数数组中。例如:

代码语言:javascript
复制
#include <p4/clientapi.h>
#include "CustomClientUser.h"  // A class I derived from ClientUser

// Connect to server.
StrBuf msg;
Error e;
ClientApi client;
client.SetProtocol( "tag", "" );
client.Init( &e );
if ( e.Test() )
{
  e.Fmt( &msg );
  fprintf( "%s\n", msg.Text() );
  return;
}

// Use my own client user.
CustomClientUser cu;

// Run the command.  Try adding global options at the beginning of the arg array.
char * argv[] = { "-z", "tag", "-u", "td27117" };
int argc = sizeof( argv ) / sizeof( char * );
client.SetArgv( argc, argv );
client.Run( "clients", &cu );

但是,这是行不通的。当您给它一个它不理解的命令选项时,错误输出就是您所期望的。

代码语言:javascript
复制
Usage: clients [ -t ] [ -u user ] [ -U ] [ [-e|-E] query -m max ] [ -a | -s serverID ] [ -S stream ]
Invalid option: -z.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-30 22:33:31

全局选项是客户端应用程序的参数,而不是服务器。Run()方法用于向服务器发送命令/参数;如果您向它发送客户端args,它将不知道如何处理它们。

要让客户端设置“标记”协议,请执行以下操作:

代码语言:javascript
复制
client.SetProtocol("tag", "");

注意,必须在调用之前调用Run(),因为它修改了Run()使用的协议。

如果您想了解各种全局选项是如何实现的,只需查看p4源代码即可。

这里是设置连接设置的地方:设置协议变量的https://swarm.workshop.perforce.com/files/guest/perforce_software/p4/2018-2/client/clientmain.cc#286

注意,大多数全局选项直接对应于ClientApi方法,您可以在标头(clientapi.h)或文档:https://www.perforce.com/manuals/v15.1/p4api/chapter.methods.html#clientapi中看到这些方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58634240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档