Scripting en el Cliente multiplataforma de línea de comandos de Team Foundation Server

¿Le gustaría automatizar tareas, como proteger y desproteger el código fuente? Puede utilizar la automatización externa o interna para realizar el trabajo. Primero, revisemos estos dos modos de automatización. O bien, puede omitir directamente a ventajas y desventajas.

Automatización externa

La automatización externa configura otro proceso para invocar la herramienta de línea de comandos tf repetidamente con argumentos totalmente contextuales cada vez. No necesita ninguna sintaxis especial para habilitar este modo. Puede utilizar uno de los procesos externos siguientes para implementar este método:

  • Shell de UNIX, como sh, ksh, bash o csh

  • Perl u otro lenguaje de programación que se usa para el Script

  • Apache Ant u otra herramienta orientada a la compilación

  • Cualquier otra herramienta que pueda iniciar el programa tf y suministrara argumentos

Automatización interna

La automatización interna configura la herramienta de línea de comandos tf para controlar el proceso de automatización e interpretar un archivo de comandos que se pasa como argumento. Puede invocar la automatización interna proporcionando el símbolo @ seguido inmediatamente por una ruta de acceso local a un archivo de comandos. Cualquier argumento adicional que se especifique en esta línea de comandos estará disponible para los comandos en el archivo de comandos como argumentos posicionales.

Nota

Para procesar la entrada estándar como el archivo de comandos, proporcione el símbolo @ sin el nombre de archivo detrás (tf@).El flujo de entrada se interpreta como texto según la codificación y el juego de caracteres predeterminados de la plataforma.

El archivo de comandos siguiente obtiene la versión especificada de un archivo e imprime información histórica detallada sobre esa versión.

# This line is ignored because it is a comment.
get "-version:%2" -force "%1"
history -format:detailed "-version:%2" "%1"

El archivo de comandos, que se denomina /home/john/get-and-history.tfc, espera dos argumentos posicionales para poderlo ejecutar como muestra el ejemplo siguiente:

tf @/home/john/get-and-history.tfc README.doc C5087

El primer argumento, README.doc, sustituirá a %1 al interpretar cada línea. C5087 se sustituye con %2.

Nota

En el archivo de comandos, ambos argumentos posicionales están entre comillas dobles porque sus valores sustituidos pueden contener espacios (por ejemplo, un nombre de archivo o una especificación de la versión de fecha).

El formato del archivo de comandos puede describirse mediante la notación Extended Backus-Naur Form (EBNF):

command file ::= { line } ;
line ::= comment line | blank line | action line , EOL ;
comment-line ::= "#" | "rem" , { ? any non-EOL character ? } ;
blank line ::= { ? any whitespace character ? };
action line ::= tf command , [ { white space , tf option } ] , [ { white space , tf free argument } ] ;
tf command ::= ? any tf command ?
tf option ::= ? any tf option ? | positional argument ;
tf free argument::= ? any tf free argument ? | positional argument ;
positional argument::= "%" , non-zero digit , [ { digit } ] ;
EOL ::= ? your platform's EOL character or sequence ?
white space ::= { ? any non-EOL whitespace character ? }
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
non-zero digit ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
  • tf command puede ser cualquier comando válido de tf, como get, workfold y workspace.

  • tf option puede ser cualquier opción válida de tf, como -login, -profile y -format.

  • tf free argument puede ser cualquier cadena pensada como argumento libre para tf, como una ruta de acceso del servidor y una ruta de acceso local.

  • positional argument es un marcador de posición de texto que se sustituye desde los argumentos de la línea de comandos de tf externos. El número es un entero positivo que corresponde al índice del argumento de la línea de comandos que desea sustituir, por ejemplo “%1 " y “%2". %1 hace referencia al primer argumento. Puede utilizar argumentos posicionales como opciones o los argumentos libres en cualquier orden después del comando.

Nota

Utilice comillas dobles para encerrar las opciones y los argumentos que contienen espacios.Por ejemplo, use “-version:LRelease 2.1” para un especificador de etiquetas, “$/Inventory/Client Project/main.c” para un argumento libre y “%1 " para un argumento posicional que pueda contener espacios.Solo las comillas dobles indican límites de opción en los archivos de comandos.Las comillas sencillas se interpretan literalmente.Para especificar un símbolo de comillas doble literal en la línea de acción, debe utilizar dos comillas dobles juntas ("").Las reglas del uso de comillas en los archivos de comandos pueden diferir de las reglas que usa el shell porque su shell no analiza las líneas del archivo de comandos.

Ventajas e inconvenientes de los dos métodos

¿Que método debe utilizar, la automatización interna o la externa? Pasemos a las ventajas y los inconvenientes de cada método:

Automatización externa

Automatización interna

Ventajas

  • Es más flexible porque puede ejecutar no solo los comandos de tf, sino otros comandos.

  • Es sencillo. Si está familiarizado con el proceso o lenguaje externo, se invoca la herramienta de línea de comandos tf de la misma forma que cualquier otro proceso de la línea de comandos.

  • Es fácil de depurar. Si algunos comandos no se ejecutan como se espera, no tiene que cambiar los comandos en la línea de comandos para diagnosticar problemas.

  • Es más rápido que el método externo. Dado que la máquina virtual Java se carga una sola vez y la herramienta de línea de comandos puede reutilizar sus conexiones para el servidor, puede ejecutar varios comandos en un archivo de comandos con mayor rapidez que si ejecuta cada comando por separado.

Cons

  • Es más lento que la automatización interna. Para cada comando que ejecute, la CPU debe pasar tiempo iniciando la máquina virtual Java y preparándose para ejecutar el cliente.

  • El proceso externo debe detectar errores. Si el proceso externo no procesa el código de salida de cada ejecución, el proceso podría no detectar un error.

  • Puede ser más complejo programar. El proceso externo debe proporcionar todas las opciones pertinentes cada vez que ejecuta la herramienta de línea de comandos tf, y los argumentos pueden requerir un uso especial de las comillas o de las secuencias de escape.

Es menos flexible que la automatización externa. Esta es la razón por la que:

  • Solo puede especificar comandos tf en el archivo de comandos, por lo que podría tener que escribir varios archivos de comandos y ejecutar cada uno de ellos si desea realizar otras tareas entre los comandos de tf.

  • La ejecución se detiene en la primera condición de error que se encuentra. No puede obligar a la herramienta a omitir o pasar por alto ninguna condición de error.

  • Podría darse cuenta de que tratar con la salida normal o de error es más complicado. Un proceso que está ejecutando la herramienta con automatización interna no puede determinar que línea en el archivo de comandos produjo qué parte del resultado normal.

Vea también

Otros recursos

Command-line Reference (Team Explorer Everywhere)