【问题标题】:Through C# code how to get names of all views and VOBs in a given host通过 C# 代码如何获取给定主机中所有视图和 VOB 的名称
【发布时间】:2011-10-03 08:13:48
【问题描述】:

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

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

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

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

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

问题:

所以现在从我的工具设计来看是

  1. 我有 2 个组合框,一个用于视图,另一个用于 VOB
  2. 用户选择适当的视图和 VOB。
  3. 通过代码使用注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mvfs\Parameters\basedrive
  4. 获取清除案例网络驱动器
  5. 我将路径形成为“basedrive:\viewcomboboxselection\vobcomboboxselectedvalue

所以现在我想知道是否有任何方法可以获取给定系统中的 VIEWS 和 VOBS 列表。

到目前为止我的发现:

  1. 注册表项“HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Atria\ClearCase\CurrentVersion\RecentlyUsedViews”将只给我选定的视图,而不是系统中的所有视图。
  2. 注册表项“HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Atria\ClearCase\CurrentVersion\PersistentVOBs”不会提供给定系统中的所有 VOB。

是否有任何注册表项或任何方法可以获取系统中所有视图和 vobs 的列表。

【问题讨论】:

    标签: c# clearcase


    【解决方案1】:

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

    cleartool lsview -s -host anHostname -quick
    

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


    要获取所有 vobs(在当前区域),请参阅 cleartool lsvob

     cleartool lsvob
    

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

    【讨论】:

      【解决方案2】:

      按照 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

      【讨论】:

        【解决方案3】:

        1.从clearcase中获取所有的vob

        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      
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-03-30
          • 2022-01-19
          • 1970-01-01
          • 2014-10-29
          • 1970-01-01
          • 2019-11-15
          • 2018-06-24
          相关资源
          最近更新 更多