views:

504

answers:

3

Hello,

I creating a small addin to help with my source control.

Does anybody know how I could retrieve the Branch Name and Version Number of a source file in Rational ClearCase. I want to do this using C#. Where is all the information actually stored?

+1  A: 

Your best bet is probably to use the cleartool.exe command line and parse the result. Ideally this is usually done from a perl or python script but it'll work from C# as well. I doubt you'll find any more direct way of interrogating clearcase which is as simple.

shoosh
+1  A: 

You need, from C#, to execute a cleartool command

More specifically, a descr with a format option only displaying exactly what you are after.

cleartool descr -fmt "%Sn" youFileFullPath

That will return a string like /main/34, meaning /branch/version

System.Diagnostics.ProcessStartInfo psi =
new System.Diagnostics.ProcessStartInfo(@"cleartool");
psi.RedirectStandardOutput = true;
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
psi.Arguments = "descr -fmt \"%Sn\" \"" + yourFilePath + "\"";
psi.UseShellExecute = false;
System.Diagnostics.Process monProcess;
monProcess= System.Diagnostics.Process.Start(psi);
System.IO.StreamReader myOutput = monProcess.StandardOutput;
monProcess.WaitForExit();
if (monProcess.HasExited)
{
    //la sortie du process est recuperee dans un string
    string output = myOutput.ReadToEnd();
    MessageBox.Show(output);
}

Note: it is recommended to always use double quotes around your file full path, in case that path or that file name includes spaces


As I have explained in this other ClearCase SO question, you could also use the CAL interface (COM object), but I have always found cleartool (the basic CLI -- Command Line Interface --) more reliable especially when things go wrong: the error message is much more precise.

VonC
Super cool. I actually found out how to use "describe" easily. But, the -fmt option is of great help as it reduces the overhead of parsing the entire description.
Elroy
A: 

You'll have to add Clearcase Automation reference from COM, then this is the code that will get you the version and branch name of your source file.

ClearCase.Application cc = new ClearCase.Application();
ClearCase.CCView view = cc.get_View("YOUR VIEW");
ClearCase.CCActivity activity = view.CurrentActivity;
ClearCase.CCVersions versions = activity.get_ChangeSet(view);

int nVersion = -1;
String name = String.Empty;

foreach (ClearCase.CCVersion version in versions)
{
      if (version.Path.Contains("YOUR FILENAME"))
      {
           nVersion = version.VersionNumber;
           ClearCase.CCBranch branch = version.Branch;
           ClearCase.CCBranchType type = branch.Type;
           name = type.Name;
           break;
      }
}
Ars