Selectores a fondo (I)

1:22 2 Comments

Uno de los objetivos de Plastic, como hemos comentado ya en alguna ocasión, es proporcionar características realmente avanzadas, a todo tipo de grupos de desarrollo.
Una de esas características es la capacidad de configurar totalmente el espacio de trabajo.
¿Qué es un workspace o espacio de trabajo? Es el lugar en el disco del ordenador del programador en el que se descargan los ficheros y directorios del repositorio. Un repositorio (una base de datos donde se almacenan todos los objetos: revisiones de ficheros, de directorios, ramas, etiquetas, etc) maneja muchas versiones de los mismos ficheros, pero en un momento dado un programador trabajará sobre una sola versión de cada uno de ellos. Esas versiones de cada fichero y directorio se descargan en el espacio de trabajo. Una vez allí el progrador puede usar su entorno favorito (desde un IDE a la línea de comandos, cuestión de gustos) para compilar, pasar pruebas, escribir documentación, etc.
Bien, queda más o menos claro lo que es un espacio de trabajo (lo que se suele denominar sandbox en Subversion, vista en Clearcase...), pero, ¿cómo se le especifica qué debe descargar exactamente desde el repositorio?
Entra en juego uno de los conceptos más potentes del sistema: el selector.
La imagen explica cual es la función de un selector: en el repositorio, como se decía más arriba, hay muchas versiones de los ficheros y de los directorios. El selector sirve para filtrar y especificar exactamente cuáles de esas versiones deberán descargarse a disco, traerse al workspace. El ejemplo muestra que el fichero foo.c tiene 3 versiones, sin embargo el usuario quiere ver la versión 0. El selector será el encargado de indicar al servidor que efectivamente sea esa la versión a descargar. Y lo mismo ocurrirá con todos los otros ficheros del ejemplo. Se puede ver ya que el selector aporta una gran flexibilidad a Plastic, siendo una característica diferenciadora respecto a muchos otros sistemas de control de versiones.
El selector por defecto de un espacio de trabajo tiene el siguiente aspecto:

repository "default"
path "/"
branch "/main"
checkout "/main"



¿Qué significa?

El selector es un conjunto de reglas que indican exactamente qué debe descargarse en un espacio de trabajo, y también cómo realizar, o más bien desde dónde, la operación de check out. En el caso del selector por defecto la primera regla que aparece se llama repository e indica contra qué repositorio trabajar. Por defecto se trabaja contra el repositorio que el sistema crea automáticamente durante la instalación, que se llama default. Por eso repository "default" significa vamos a trabajar contra el repositorio "default".
Pero una vez especificado el repositorio, hay que indicar a qué path se aplicarán las reglas. Es decir, directorios (e incluso ficheros) diferentes podrían descargarse aplicando reglas distintas... Eso da muchísima potencia al sistema, pero vayamos paso a paso.
Mediante la regla path "/" lo que se indica es: para todo lo que haya dentro del directorio raíz del repositorio "default", se aplicarán las siguientes reglas.
Y las siguientes reglas son: branch "/main" checkout "/main" que quieren decir: coge lo último de la rama "/main" y cuando sea necesario hacer un check out, hazlo también en "/main".
¿Por qué sabe que tiene que coger lo último? Básicamente porque ese es el comportamiento por defecto, si no quisiéramos lo último sino algo etiquetado de una cierta forma, o una versión concreta, se aplicarían otras reglas diferentes. El siguiente selector tomaría todo desde la etiqueta BL0100.

repository "default"
path "/"
label "BL0100"
checkout "/main"

Símplemente se cambia branch por label.
Pero podría especificarse que se descargue una versión concreta de un fichero o directorio. El siguiente selector descargaría la revisión 10 dentro de la rama /main de /src/main.java, y el resto desde la rama principal. El ejemplo muestra, también, cómo componer diferentes reglas.

repository "default"
path "/src/main.java"
br "/main" revno "10"

path "/"
branch "/main"
checkout "/main"

El sistema va interpretando las reglas de una en una.
Si un elemento no puede cargarse con una regla se intenta con la siguiente, y si ninguna logra cargar el elemento, se descarta.
Hasta aquí la primera entrega sobre selectores, queda mucho más, pero para ir empezando es suficiente.

2 comentarios:

JavierH dijo...

Hola:

Me gustaría saber con qué herramienta has hecho el gráfico que aparece en esta entrada. Ya he visto gráficos similares en otros sitios pero no sé con qué aplicación se hace.

Muchas gracias.

Borja dijo...

Hola,

Pues ese gráfico está hecho con el programa Visio de Microsoft.