Selectores a fondo (I)
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.
0 comentarios:
Publicar un comentario