ClearCase: liste le contenu d'un répertoire (ls) en utilisant CAL
-
06-07-2019 - |
Question
Dans ClearCase, vous pouvez répertorier le contenu d'un répertoire à l'aide de "cleartool ls".
Ma question est de savoir comment puis-je faire la même chose avec CAL (ClearCase Automation Layer). Si je préfère l'API COM, c'est parce que je n'ai pas à analyser la sortie de "ls".
Jusqu'à présent, je suis parvenu à obtenir le VOB et la vue, mais je n'ai trouvé aucune méthode pour répertorier le contenu.
Mon code jusqu'à présent:
IClearCase cc = new ApplicationClass();
CCVOB vob = cc.get_VOB("\\VOB-name");
CCView view = cc.get_View("ViewTag");
Merci pour votre aide.
J'ai écrit la réponse de VonC en C # pour les personnes intéressées.
string[] files = Directory.GetFiles("View path here", "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
try
{
CCVersion ver = cc.get_Version(file);
Console.WriteLine(ver.Path);
}
catch(Exception) {/*the file is not versioned*/}
}
La solution
Peut-être que c'est un bon début:
Set CC = Wscript.CreateObject("ClearCase.Application")
Set DirVer = CC.Version(".")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(DirVer.Path)
Wscript.Echo "Files under source control: "
For Each File in Folder.Files
On Error Resume Next
Set Ver = CC.Version(File.Name)
If Err.Number = 0 Then
Wscript.Echo Ver.ExtendedPath
End If
Next
L'idée étant d'utiliser les méthodes ICCVersion
pour essayer d'accéder à la version d'un fichier. S'il ne renvoie pas d'erreur, il s'agit bien d'un fichier versionné.
Je sais maintenant que le fichier est versionné, comment puis-je le supprimer (rmname).
N'utilisez pas RemoveVersion () :
Supprime irrémédiablement la version (équivalente à cleartool rmver
)
ATTENTION! C'est une opération potentiellement destructive. Etant donné que CAL n’invite l’utilisateur à entrer dans aucune circonstance, il n’existe aucune étape de confirmation lorsque RemoveVersion
est appelé. Invoquer RemoveVersion
équivaut à exécuter cleartool rmver
avec l'option -force
.
Utilisez plutôt RemoveName
à partir de l'interface ICCElement
.