SccOpenProject 函数
此函数将打开现有的源代码管理项目或创建新的源代码管理项目。
语法
SCCRTN SccOpenProject (
LPVOID pvContext,
HWND hWnd,
LPSTR lpUser,
LPCSTR lpProjName,
LPCSTR lpLocalProjPath,
LPSTR lpAuxProjPath,
LPCSTR lpComment,
LPTEXTOUTPROC lpTextOutProc,
LONG dwFlags
);
参数
pvContext
[in]源代码管理插件上下文结构。
hWnd
[in]源代码管理插件可以作为其提供的任何对话框的父级的 IDE 窗口的句柄。
lpUser
[in, out]用户的名称(不得超过SCC_USER_SIZE,包括 NULL 终止符)。
lpProjName
[in]标识项目名称的字符串。
lpLocalProjPath
[in]项目的工作文件夹的路径。
lpAuxProjPath
[in, out]用于标识项目的可选辅助字符串(不包括 NULL 终止符)SCC_AUXPATH_SIZE。
lpComment
[in]正在创建的新项目的注释。
lpTextOutProc
[in]用于显示源代码管理插件的文本输出的可选回调函数。
dwFlags
[in]指示如果项目对源代码管理插件未知,是否需要创建新项目。 值可以是和SCC_OP_CREATEIFNEW
SCC_OP_SILENTOPEN.
返回值
此函数的源代码管理插件实现应返回以下值之一:
值 | 说明 |
---|---|
SCC_OK | 成功打开项目。 |
SCC_E_INITIALIZEFAILED | 无法初始化 Project。 |
SCC_E_INVALIDUSER | 用户无法登录到源代码管理系统。 |
SCC_E_COULDNOTCREATEPROJECT | 在调用之前不存在该项目; SCC_OPT_CREATEIFNEW 已设置标志,但无法创建项目。 |
SCC_E_PROJSYNTAXERR | 项目语法无效。 |
SCC_E_UNKNOWNPROJECT | 该项目对源代码管理插件未知,并且 SCC_OPT_CREATEIFNEW 未设置标志。 |
SCC_E_INVALIDFILEPATH | 无效或不可用的文件路径。 |
SCC_E_NOTAUTHORIZED | 不允许用户执行此操作。 |
SCC_E_ACCESSFAILURE | 访问源代码管理系统时出现问题,可能是因为网络或争用问题。 建议重试。 |
SCC_E_NONSPECFICERROR | 非特定故障;未初始化源代码管理系统。 |
注解
IDE 可以传入用户名(lpUser
),也可以只传入指向空字符串的指针。 如果有用户名,源代码管理插件应将其用作默认值。 但是,如果未传递任何名称,或者登录名失败,插件应提示用户登录,并在收到有效登录.
时返回有效名称lpUser
,因为插件可能会更改用户名字符串,IDE 将始终分配大小缓冲区(SCC_USER_LEN
+1 或SCC_USER_SIZE, 包括 null 终止符的空间)。
注意
IDE 可能需要执行的第一个操作可能是对SccOpenProject
函数或 SccGetProjPath 的调用。 因此,两者都具有相同的 lpUser
参数。
lpAuxProjPath
并从 lpProjName
解决方案文件读取,或者从对函数的 SccGetProjPath
调用中返回它们。 这些参数包含源代码管理插件与项目关联的字符串,并且仅对插件有意义。 如果解决方案文件中没有此类字符串,并且没有提示用户浏览(这将通过SccGetProjPath
函数返回字符串),IDE 会同时lpAuxProjPath
lpProjName
传递空字符串,并且预期此函数返回时插件会更新这些值。
lpTextOutProc
是指向 IDE 提供给源代码管理插件的回调函数的指针,用于显示命令结果输出。 此回调函数在 LPTEXTOUTPROC 中进行了详细介绍。
注意
如果源代码管理插件打算利用此功能,则必须在 SccInitialize 中设置SCC_CAP_TEXTOUT
标志。 如果未设置该标志,或者 IDE 不支持此功能, lpTextOutProc
则为 NULL
。
参数 dwFlags
控制打开的项目当前不存在时的结果。 它由两个位标志组成, SCC_OP_CREATEIFNEW
以及 SCC_OP_SILENTOPEN
。 如果打开的项目已存在,则函数只需打开项目并返回 SCC_OK
。 如果项目不存在且 SCC_OP_CREATEIFNEW
标志处于打开状态,源代码管理插件可以在源代码管理系统中创建项目,打开该项目并返回 SCC_OK
。 如果项目不存在,并且 SCC_OP_CREATEIFNEW
标志已关闭,则插件应检查标志 SCC_OP_SILENTOPEN
。 如果该标志未打开,插件可能会提示用户输入项目名称。 如果该标志已打开,插件应仅返回 SCC_E_UNKNOWNPROJECT
。
呼叫顺序
在正常事件过程中, 首先调用 SccInitialize 以打开源代码管理会话。 会话可能包括调用SccOpenProject
,后跟其他源代码管理插件 API 函数调用,并将终止对 SccCloseProject 的调用。 调用 SccUninitialize 之前,可能会多次重复此类会话。
如果源代码管理插件设置 SCC_CAP_REENTRANT
位, SccInitialize
则上述会话序列可能会并行重复多次。 不同的 pvContext
结构跟踪不同的会话,其中每个 pvContext
会话一次与一个打开的项目相关联。 根据 pvContext
参数,插件可以确定在任何特定调用中引用的项目。 如果未设置功能位 SCC_CAP_REENTRANT
,则非实体源代码管理插件在处理多个项目的能力方面受到限制。
注意
该 SCC_CAP_REENTRANT
位是在源代码管理插件 API 版本 1.1 中引入的。 它未在版本 1.0 中设置或被忽略,并且所有版本 1.0 源代码管理插件都假定为非实体。