通过C#代码如何获取给定主机中所有视图和VOB的名称

时间:2011-07-12 05:31:18

标签: c# clearcase

我们正在使用 c#开发一个工具,用于代码审查。我们使用clearcase作为源代码控制。

我正在使用“ cleartool ”对象来执行与明确案例交互的任何操作 {来自ClearCase操作:获取标签列表,附带给定标签的文件等...}

使用cleartool之前的要求是我必须将我的工作目录更改为适当的VOB目录。

比如说我在网络驱动器“exampleView”上有“exampleVOB”和“U”。所以在我的代码中

  • 步骤1.将我的工作目录更改为VOB目录“ cd U:\exampleView\exampleVOB
  • 第2步。使用cleartool命令与清除案例进行交互。

问题:

所以现在我的工具设计是

  1. 我有 2个组合框用于视图,其他用于VOB
  2. 用户选择适当的View和VOB。
  3. 通过代码使用注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mvfs\Parameters\basedrive
  4. 获取明确案例网络驱动器
  5. 我将路径设为“basedrive:\viewcomboboxselection\vobcomboboxselectedvalue
  6. 所以现在我想知道有没有办法获得给定系统中的VIEWS和VOBS列表。

    到目前为止我的发现:

    1. 注册表项“HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Atria\ClearCase\CurrentVersion\RecentlyUsedViews”将仅为我提供选定的视图,但不会为系统中的所有视图提供。
    2. 注册表项“HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Atria\ClearCase\CurrentVersion\PersistentVOBs”不会向我提供给定系统中的所有VOB。
    3. 是否有任何注册表项或任何方式获取系统中所有视图和vob的列表。

3 个答案:

答案 0 :(得分:0)

要获取给定主机名的所有视图,请参阅 cleartool lsview

cleartool lsview -s -host anHostname -quick

(注意仅适用于CC7.0.1 +的-quick,通过列出当前存储在注册表中的视图,可以更快地查找-host选项)


要获取所有信息栏(在当前区域内),请参阅 cleartool lsvob

 cleartool lsvob

您可以使用CAL API调用和解析C#程序中的VB脚本,或者从同一个C#程序调用VB脚本,如this question所示。

答案 1 :(得分:0)

正如VonC建议的那样,请尝试使用CAL API。

尝试在C#中调用和解析cleartool输出,这将为您节省大量麻烦。如果你在ClearCase文件夹中查看“cc_cal.chm”(我相信'bin'),你会看到CAL API有一个相当详细记录的类层次结构,尽管这些例子主要针对VB用户(和因此需要一些适应和类型铸造)。你会看到相当大的速度提升,因为在Windows中启动新的子进程需要付出巨大的代价。

Visual Studio的调试器将是您最好的朋友 - 向项目添加ClearCase.Application(以及可能的ClearCase.Cleartool)引用,实例化ClearCase.Application对象的实例,然后通过监视窗口进行检查。

有关使用ClearCase.Application枚举视图的一些说明,请访问: http://www.codeproject.com/Articles/41720/Using-the-ClearCase-Automation-Library-with-C

答案 2 :(得分:0)

1.从clearcase获取所有vobs

ccApp = new ClearCase.Application();
ClearCase.CCVOBs ccVobs =  ccApp.get_ProjectVOBs(false, "windows");
foreach (ClearCase.CCVob vob in ccVobs)
{
   //Process it
}

2.获取特定流的所有视图

ClearCase.CCProjectVOB ccVob = ccApp.get_ProjectVOB(projectVob);
ClearCase.CCViews ccViews = ccVob.get_Stream(selectedStream).Views;
foreach (ClearCase.CCView ccView in ccViews)
{
  //Process it      
}