gpt4 book ai didi

c++ - 为使用 p4api 运行的 Perforce 命令指定全局选项

转载 作者:行者123 更新时间:2023-11-30 03:13:31 29 4
gpt4 key购买 nike

我正在使用 Perforce,又名 Helix Core,C++ API 以编程方式运行 Perforce 命令。如何为命令指定全局选项?

例如,我想以编程方式运行带有多个全局选项的 clients 命令。如果从命令 shell 运行,它将如下所示。

p4 -z tag -F %client% clients -u mikef

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

为了好玩,我将全局选项添加到提供给 ClientApi 对象的参数数组中。例如:

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

但是,那没有用。当你给它一个它不理解的命令选项时,错误输出就是你所期望的。

Usage: clients [ -t ] [ -u user ] [ -U ] [ [-e|-E] query -m max ] [ -a | -s serverID ] [ -S stream ]
Invalid option: -z.

最佳答案

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

要告诉客户端设置“标签”协议(protocol),请执行以下操作:

client.SetProtocol("tag", "");

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

如果你想了解各种全局选项是如何实现的,你可以直接查看p4源代码。

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

关于c++ - 为使用 p4api 运行的 Perforce 命令指定全局选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58634240/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com