ClearCase: enumera el contenido de un directorio (ls) usando CAL
-
06-07-2019 - |
Pregunta
En ClearCase, puede enumerar el contenido de un directorio usando " cleartool ls " ;.
Mi pregunta es cómo puedo hacer lo mismo usando CAL (ClearCase Automation Layer). La razón por la que prefiero la API COM es porque no tendré que analizar la salida de "ls".
Hasta ahora, puedo obtener el VOB y la Vista con éxito, pero no encontré ningún método para enumerar el contenido.
Mi código hasta ahora:
IClearCase cc = new ApplicationClass();
CCVOB vob = cc.get_VOB("\\VOB-name");
CCView view = cc.get_View("ViewTag");
Gracias por su ayuda.
Escribí la respuesta de VonC en C # para los interesados.
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*/}
}
Solución
Puede ser un buen comienzo:
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
La idea es utilizar los métodos ICCVersion
para intentar acceder a la versión de un archivo. Si no devuelve un error, de hecho es un archivo versionado.
Ahora sé que el archivo está versionado, ¿cómo puedo eliminarlo (rmname)?
No utilice RemoveVersion () :
Elimina irremediablemente la versión (equivalente a cleartool rmver
)
¡ADVERTENCIA! Esta es una operación potencialmente destructiva. Debido a que CAL no solicita al usuario la entrada bajo ninguna circunstancia, no hay un paso de confirmación cuando se invoca RemoveVersion
. Invocar RemoveVersion
es equivalente a ejecutar cleartool rmver
con la opción -force
.
En su lugar, use el RemoveName
de la interfaz ICCElement
.