jueves, abril 03, 2014

PlasticSCM: ¿Para qué sirve el Annotate?

Por: Fernando D. Bozzo

El comando Annotate, habitualmente llamado "blame" (culpar) en los demás SCM, sirve para obtener información sobre las modificaciones hechas a un archivo, como saber quién modificó una línea, cuándo, etc.

En Plastic lo podemos encontrar en el menú contextual de la vista de Items, en la vista de Cambios Pendientes y al ver el contenido de un changeset, cuando le hacemos doble click.

Ejemplo desde la vista de Items:



Vista Annotate por defecto, donde se puede apreciar la información por cada línea (usuario, número de changeset donde se cambió, rama en la que se cambió y número de línera), el degradé de colores indica la antigüedad del cambio, cuanto más claro, más reciente es el cambio:



En el menú contextual de esta vista también hay varias opciones más:



Entre ellas, el poder ver los cambios coloreados por usuario:



El botón "Statistics" de arriba permite ver algunas estadísticas, como la cantidad de líneas del fichero, la antigüedad y la cantidad de líneas modificadas por desarrollador:



Algo muy útil de esta funcionalidad Annotate es que, al igual que el resto de funcionalidades en Plastic, lo mismo se puede obtener desde la línea de comandos con el comando cm, por ejemplo, estando en la terminal de DOS ubicado en el directrorio del workpsace, este comando:

cm annotate forms\frm_test_fdb.sc2

Genera esta información:


La interfaz de comandos, mediante el comando cm, permite automatizar la mayoría de las funciones de Plastic, lo que es increíblemente flexible y útil no solo para usar en scripts, como las utilidades de Visual FoxPro 9 para Plastic, sino también para automatizar la generación de estadísticas que luego se puedan mostrar por otros sistemas, incluso en web.

Aquí hay un link de ejemplo de lo que se puede obtener:

http://codicesoftware.blogspot.com/2007/08/getting-stats-with-query-system.html


Hasta la próxima!

miércoles, abril 02, 2014

PlasticSCM: ¿Qué es el Shelve?

Por: Fernando D. Bozzo

La verdad es que a veces se buscan términos que confunden, cuando se podrían utilizar otros que todo el mundo conoce. El Shelve es el concepto del portapapeles (clipboard) aplicado a un changeset.


Si, es el copiar+pegar de un grupo de archivos en la rama que se elija, pero con la diferencia de que:

  • El "pegar" se hace con un merge especial llamado "Cherry Pick"
  • Este portapapeles (Shelves) se ha potenciado para que permita múltiples entradas que se guardan por separado (cada entrada es un changeset)
  • Se les puede poner una descripción, para diferenciarlas de otras entradas
  • Se pueden compartir con los demás desarrolladores que estén en el mismo servidor Plastic, ya que se guardan en la base de datos
  • Se pueden borrar o reutilizar todas las veces que se necesite

Veamos un ejemplo de uso:

1.  Tomamos un form:


2.  Le hacemos un cambio, en este caso solo modificaré el backcolor:



3.  Verificamos los datos cambiados, que mostrará solo los binarios del form, y regeneramos la vista de texto del form, para tener ambas versiones sincronizadas:



 4.  En vez de hacer checkin, hacemos Shelve, lo que lo guarda en el portapapeles que comenté:


Observación al paso: Ya que tenemos este menú abierto, notar que hay una opción "Proteger los cambios a otra rama", que sirve para guardarlos en una nueva rama con el nombre que le demos. Viene bien cuando nos equivocamos e hicimos los cambios en la rama principal y olvidamos crear antes la rama de trabajo, lo resolvemos aquí en un paso ;-)


5.  En la ventana de confirmación que nos aparece, podemos guardar estos cambios y seguir modificando, o guardar estos cambios y deshacerlos de la rama si marcamos el check de abajo, lo que permite mantenerlos solamente en el portapapeles (Shelve):



Como deshice los cambios del workspace, el form volvió a quedar como estaba:




6.  Nos muestra un mensaje confirmando el guardado, donde se puede marcar el check de abajo para que no vuelva a mostrar este mensaje:



7.  Nos muestra la vista de Shelves con los que haya, donde arriba siempre están los más nuevos. Un apunte: Esta vista tiene el panel derecho desactivado por defecto, pero se puede activar del icono indicado en la imagen, y en el mismo panel se puede poner un comentario descriptivo, que es muy útil para saber de qué se trata y no se pierda entre los demás:



 8.  Para aplicar un Shelve en el workspace, se elige desde el menú contextual:



9.  Aquí se muestra el Shelve aplicado, que es el equivalente a haber realizado las modificaciones a mano. Un apunte:  Aplicar un Shelve implica hacer un merge del Shelve sobre el contenido del workspace que, como todo merge, puede ser manual o automático dependiendo de los cambios hechos en el workspace. Como en este ejemplo antes deshice los cambios del workspace, entonces no hay cambios y el merge será automático:


Y a partir de aquí es como cualquier otro cambio merge que hemos hecho antes.

El resultado de aplicar este Shelve, es el cambio de color del form:



Nota: El Shelve se puede usar para guardar cambios pendientes normales, no los cambios pendientes de un Merge, ya que no puede guardar el link de Merge.



Resumen


El Shelve puede ser muy útil usarlo como "backup rápido" cuando se deba hacer un checkin de varios archivos en los que se pretenda deshacer los cambios de los binarios que no tengan su versión texto tx2 (o sea, se indicó generar, pero no se generó), y que por tanto no tienen cambios en el código (esos cambios en los binarios pueden ser por el timestamp interno), y que pueda ocurrir un error que les haga perder los cambios de uno o varios archivos.


Hasta la próxima!

Artículos relacionados:
PlasticSCM: ¿Qué es el Merge?

Nueva versión v2.4.13 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.19)

Por: Fernando D. Bozzo

Está liberada la versión v2.4.13 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:

- Actualizada la versión de FoxBin2Prg (solo el EXE) a la versión v1.19.19
- Actualizada la configuración en el README.txt, ya que un error en lo escrito estaba causando algunos problemas en la configuración del merge


Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes de FoxBin2Prg están en CodePlex, en el link indicado arriba en la versión.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

Nueva versión v1.19.19 de FoxBin2Prg (Nuevo Hook)

Por: Fernando D. Bozzo

Está liberada la versión v1.19.19 de FoxBin2Prg con los siguientes cambios:

  • Nuevo: Hook para DBFs que permite intercalar un proceso personalizado entre la creación del DBF y la creación de sus índices (ejemplo "tests\demo_hook_dbf.prg" incluido). Este agregado le puede servir a quienes usen FoxBin2Prg como objeto por programa. El Hook consiste en la creación de un encganche donde se puede lanzar una rutina personalizada, por ejemplo de carga de datos, entre la creación de la tabla y la creación de los índices cuando se procesa un archivo DB2.

Como actualizar el FoxBin2Prg existente:
Con descargar el zip y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link  de descarga:
https://vfpx.codeplex.com/releases/view/116407


 Saludos!

PlasticSCM: El merge sustractivo como reemplazo del borrado

Por: Fernando D. Bozzo

Hay situaciones en las que necesitamos borrar uno o varios cambios (changesets), pero queremos borrarlos con la opción de poder recuperarlos luego, o queremos borrarlos definitivamente pero nos es imposible porque no es el último changeset, sino uno o varios intermedios que ya forman parte del historial, y que por cuestiones de integridad referencial Plastic no permite borrarlos.

En estas situaciones lo que se puede hacer es un "merge sustractivo", o sea, un merge para deshacer cambios, que funciona exactamente al revés del merge común, que agrega cambios.

Aunque son exactamente la operación opuesta, tienen un punto en común, y es que en ambos puede darse el caso de requerir una intervención manual, o sea, de resolver algo a mano, bien desactivando los cambios de un panel en la ventana de merge o bien modificando a mano valores directamente.

En esta nota vamos a ver el merge sustractivo automático, ya que la parte manual es la misma que ya comenté en el merge normal, excepto que en vez de agregar cambios, quitaríamos cambios.


Cómo deshacer un changeset


Supongamos que hemos agregado un archivo en un changeset que no debíamos agregar e hicimos algunos cambios que no queremos, y que nos damos cuenta luego de haber hecho otros cambios que hemos guardado en otro changeset posterior y que no queremos borrar, solo queremos quitar el changeset del archivo agregado y los cambios anteriores.


Imagen 1: Cambios a mantener del nuevo botón "Pag.4" (click en la imagen para agrandar)



Imagen 2: Los mismos cambios, pero vistos en el código, luego de hacer doble-click en el changeset de la flecha verde




Imagen 3: Cambios a descartar del label verde (click en la imagen para agrandar)



Imagen 4: Los mismos cambios, pero vistos en el código, luego de hacer doble-click en el changeset de la flecha verde



1.  Para deshacer este changeset, lo marcamos (flecha verde de la imagen 4), elegimos click-derecho, "Merge Avanzado" y "Merge sustractivo de este changeset...", lo que mostrará esta pantalla en la que se puede observar que se borrará el archivo antes agregado y se desharán cambios en el form:



2.  Procesamos el merge, y nos quedarán los binarios, ya que solo podemos trabajar con versiones texto en un merge, y en este caso los cambios han sido todos automáticos (aunque no siempre es así):



3.  Seleccionamos los binarios que queden e indicamos dejar los que ya hay en el workspace:




4.  Como hemos hecho el merge sustractivo sobre la versión texto, y por suerte ha sido automático, debemos regenerar los binarios desde los textos. Nunca olvidar que en un merge "el texto manda" y el binario se regenera:



Y esperar el mensaje de confirmación:




5.  Hacemos el checkin y confirmamos que en la vista del Explorador de ramas que ha quedado una línea roja de merge sustractivo, que saltea al changeset que queríamos mantener:



6.  Finalmente, confirmamos que tanto el archivo agregado antes ahora se quita, como el código del label verde:


Como podemos ver, en el form no hay rastros del label verde y el botón "Pag.4" se mantiene.




Cómo deshacer un grupo de changesets


La forma de operar es la misma que para uno, pero con una única excepción: en vez de elegir un changeset se deben elegir dos.
Si que queremos deshacer los changesets marcados en naranja, debemos marcar (click) el de la izquierda (flecha verde) y luego marcar el de la derecha con ctrl+click (la otra flecha verde). Visualmente se puede comprobar la selección porque el fondo azulado del changeset es un poco más claro y porque el borde redondeado deja de ser gris claro y es gris oscuro:


Ejemplo 1 - Cuando los changesets a Deshacer están en la misma rama

En este caso todos los cambios están en la misma rama, por lo que el merge sustractivo también se hace en la misma rama.



Ejemplo 2 - Cuando los changesets a Deshacer están en distintas ramas

En este caso todos los cambios se han hecho en una rama secundaria (fdbozzo2), luego fueron integrados en la rama de tarea con un merge (punto A - flecha verde) y luego fueron deshechos con un merge sustractivo de la rama secundaria (fdbozzo2) pero con destino en la primaria (punto B - flecha roja)



El motivo de elegir un changeset más a la izquierda de la selección, es que se trata de un intervalo abierto-cerrado, donde la parte abierta (flecha verde izquierda) se selecciona pero no está incluida, y la parte cerrada (flecha verde derecha) se selecciona y está incluida.

El resto es igual que lo visto para un changeset.


Hasta la próxima!

Artículos relacionados:
PlasticSCM: ¿Qué es el Merge?
Control de Código Fuente: Terminología común que hay que conocer
PlasticSCM: ¡Houston, tenemos problemas!

sábado, marzo 29, 2014

PlasticSCM: ¡Houston, tenemos problemas!

[Última actualización: 12/11/2017 - Registro de la clase visualfoxpro.application.9]
Por: Fernando D. Bozzo

...Y es normal, todo no puede salir siempre bien o tal cual se pone en los tutoriales, en los artículos o en los videos. Además, quienes los hacemos, intentamos de que salga todo perfecto, haciendo pruebas previamente y equivocándonos "antes" de publicar algo, pero el problema es que al no mostrarse los posibles fallos, entonces no se puede aprender de ellos, y este artículo intenta llenar un poco ese hueco, con problemas comunes y cómo resolverlos.



1. Quiero cancelar el merge que estoy haciendo, ¡pero no sé cómo salir!


Este problema tiene 2 partes:

a) Mientras se está haciendo el merge

Cuando se hace merge de muchos archivos y no se quiere estar cancelando uno por uno 200 veces, se puede cancelar todo el proceso desde la ventana principal, para lo que es importante no intentar cerrar la ventana actual de merge (que pueden haber muchas, una tras otra), sino conmutarse a la ventana principal, pulsar el botón Cancelar y recién ahí se puede volver a la ventana de merge que quedó abierta y cancelar.

Luego se debe comprobar si hay Cambios Pendientes (no olvidar refrescar la vista) y deshacer todo, si hubiera algo.


b) Una vez hecho el merge

Si hay Cambios Pendientes (no olvidar refrescar la vista) y deshacer todo, si hubiera algo.



2. ¡No puedo hacer un Merge, sale una pantalla rara!


Ok, estamos haciendo un Merge y nos sale esto:


¿Qué pasó, si lo elegido era un archivo de texto, no un binario?

Pueden haber pasado dos cosas:

1.  Que el archivo efectivamente sea un binario:


Y si es un binario, entonces no hay otra opción que elegir quedarse con el Origen (el archivo desde donde se hace el Merge), con la Base (de donde partieron origen y Destino) o con el Destino (el archivo del workspace). Pero esto solo debe hacerse si no se trabaja con VFP o si no se usan las herramientas de FoxPro para Plastic.

También puede haber pasado que se haya configurado mal la herramienta de Merge de FoxPro en Plastic, ya que esa configuración sirve para que esta pantalla no aparezca. Por las dudas, la configuración, que está en el README.txt, es esta:


CONFIGURACIÓN DE MERGE EN PLASTICSCM:
------------------------------------------------------------------------

  • Clickear en el icono de Preferencias de PlasticSCM
  • Seleccionar "Herramientas Merge" y "agregar" esto:
    • Herramienta Merge externa: "<path-a-las-herramientas>\foxpro_plasticscm_dm.exe" "'PRESERVE_WS' '@sourcefile'"
    • Pattern: .pjx;.pjt;.vcx;.vct;.scx;.sct;.frx;.frt;.lbx;.lbt;.mnx;.mnt;.dbf;.fpt;.cdx;.dbc;.dcx;.dct     (¡usar misúsculas!)
  • Clickear OK
  • Mover la extension agregada al inicio de la lista, para priorizarla


2.  Que no esté reconociendo el archivo como texto:


En ese caso se debe cancelar el merge cerrando la ventana de la imagen anterior, cerrar la solapa e merge, Deshacer los cambios pendientes (ver el tema anterior: "Quiero cancelar el merge que estoy haciendo, ¡pero no sé cómo salir!") y cambiar el tipo de archivo a texto en la vista de Items:


Luego de solucionar esto, podremos volver a reintentar el Merge, y ahí sí que ya debería salir la ventana de merge normal, y no olvidar "saltear" los binarios que queden, como ya expliqué en el artículo "PlasticSCM: ¿Qué es el Merge".

Para más detalle, también está este video corto:





3. ¡No puedo hacer un Diff, sale un error!


Si sale esta pantalla:


Es porque Plastic no reconoció bien un archivo de texto y lo toma como tipo binario, o porque elegimos un archivo para el que no hay conversor disponible, o porque es un archivo binario normal.
Trabajando con las herramientas de FoxPro 9 esto puede pasar en 3 casos:

1.  Plastic no reconció bien un archivo de texto:


Este es el mismo caso que comenté en el punto (2) del problema anterior con el Merge, y tiene la misma solución.

2.  Elegimos un archivo para el que no hay conversor disponible:


Si el archivo es un pjx, vcx, scx, frx, lbx, mnx, dbf o dbc, el problema es que se configuró mal, o no se configuró, la opción de DIFF en las opciones de Plastic. El README.txt indica como hacerlo:

CONFIGURACIÓN DE DIFF EN PLASTICSCM:
------------------------------------------------------------------------

  • Clickear en el icono de Preferencias de PlasticSCM
  • Seleccionar "Herramientas Diff" y "agregar" esto:
    • Herramienta Diff externa: "<path-a-las-herramientas>\foxpro_plasticscm_dm.exe" "'DIFF' '@sourcefile' '@destinationfile' '@sourcesymbolic' '@destinationsymbolic'"
    • Pattern: .pjx;.vcx;.scx;.frx;.lbx;.mnx;.dbf;.dbc     (¡usar misúsculas!)
  • Clickear OK
  • Mover la extension agregada al inicio de la lista, para priorizarla

3.  Elegimos un binario normal:


En este caso hemos querido hacer Diff sobre un EXE o SCT o VCT o cualquier otro binario no soportado.




4. ¡No puedo borrar el workspace!


Cuando hay una sola solapa, será el workspace activo, y no se podrá eliminar:


Para poder borrarlo necesitamos tener un segundo workspace, que podemos crear apuntando a un directorio cualquiera (ya que no lo usaremos) o aprovechar y crear otro repo que necesitemos, lo que creará una segunda solapa que deberemos elegir.

Ahora sí, si en el panel izquierdo seleccionamos "Workspaces", podremos eliminar el workspace anterior.

Nota: Eliminar el workspace solo borra el "alias" del repositorio, no borra el repositorio ni su contenido. Esto permite poder crear un workspace distinto con un nuevo directorio para el mismo repositorio.



5. ¡Me equivoqué al crear el workspace y lo asocié a un directorio equivocado!

En este caso debemos borrar el workspace (no el repositorio!) y volverlo a crear. Si al hacerlo nos da un error como este:


Es porque es el único workspace y está activo. Ver el punto anterior "¡No puedo borrar el workspace!"




6. Error al intentar abrir el cliente Plastic (1)


Si aparece un mensaje de error como este:


Entonces hicieron mal el paso 5 o el 14 de la guía de Instalación de PlasticSCM paso a paso

Si están queriendo usar otro modo de autenticación porque lo van a usar, por ejemplo, en la oficina con autenticación de Directorio Activo u otro, entonces deben verificar que la configuración del cliente y la del servidor son iguales.

Para comprobarlo, deben ir al menú Programas / PlasticSCM y a continuación:

> Para el cliente, abren la opción: Client Tools / Client Configuration Wizard

> Para el servidor, abren la opción: Server Tools / Server Configuration Wizard




7. Error al intentar abrir el cliente Plastic (2)


Si ocurre el siguiente error, es muy probable que el servicio "Plastic Server 5" no esté levantado:


Para solucionarlo, lo primero que se puede hacer es reiniciar la PC si no se hizo al instalar Plastic, y si no también se puede abrir la consola de Servicios, verificar si está levantado, y si no lo está, iniciarlo:


Esta es la configuración que tengo por defecto para este servicio:









8. ¿Cómo se cambia el idioma?

Cuando se instala un programa, a veces no miramos bien las opciones de la pantalla y le damos "aceptar", "aceptar", "aceptar"... hasta que nos damos cuenta de que se nos pasó algo.

Plastic por suerte viene con 2 programas de configuración, uno para el cliente y otro para el servidor, que permiten configurar el idioma, el servidor, el puerto de conexión, el modo de autenticación, etc.

Para reconfigurar el cliente o el servidor, deben ir al menú Programas / PlasticSCM y a continuación:

> Para el cliente, abren la opción: Client Tools / Client Configuration Wizard

> Para el servidor, abren la opción: Server Tools / Server Configuration Wizard

En ambos casos, vayan avanzando en las pantallas hasta encontrar lo que buscan.

Recuerden que si acaban de instalar el programa, es probable que deban reiniciar la PC o probablemente les de errores al intentar ejecutar Plastic.



9. ¡No puedo descargar Plastic, da un error la página!


Aquí hay un enlace a una versión de Plastic actualizada a agosto 2014 que temporalmente va a servir (versión evaluación 30 días y 5 desarrolladores), así que luego hay que bajarse el archivo de licencia gratuita anual para 15 desarrolladores antes de que caduque:
PlasticSCM-5.0.44.596-windows-installer.exe.7z



10. Hice un checkin erróneo en un archivo, ¿cómo lo arreglo?



11. ¡Borré el directorio del workspace sin querer y se perdió todo! ¿Qué hago?


Lo que has borrado es solamente los archivos del directorio, no lo que tienen guardado en la Base de Datos, por lo que hay 2 soluciones, una rápida y otra algo menos rápida:

  • Opción 1: Si no has borrado el directorio oculto ".plastic" del directorio del workspace, entonces puedes ir al Explorador de Ramas, buscar el último changeset y ubicar la casa ahi (click-derecho -> Apuntar workspace a este changeset). Este último paso descargará de la BDD de Plastic todos los archivos en sus ubicaciones.
  • Opción 2: Si has borrado el directorio oculto ".plastic", entonces debes borrar el workspace de Plastic desde el panel izquierdo (Workspaces), volver a crearlo, asociándolo al mismo directorio (u otro), buscar el último changeset y ubicar la casa ahi (click-derecho -> Apuntar workspace a este changeset). Este último paso descargará de la BDD de Plastic todos los archivos en sus ubicaciones.




12. Quiero ver/comparar el contenido de un archivo tx2 (texto) y dice que es binario!



Cuando esto ocurre, es porque la información del tipo de archivo se perdió en algún momento, o directamente no se indicó en el archivo filetypes.conf del directorio raíz del workspace.


Para solucionarlo, vamos a la vista de Items, seleccionamos los archivos de texto que figuran como binarios, hacemos click-derecho sobre alguno de ellos y elegimos Camiar tipo de revisión -> Texto, y listo, problema resuelto.


13. No me reconoce la licencia plastic.lic

El archivo de licencia plasticd.lic que reciban, se debe copiar en el subdirectorio server dentro del directorio de instalación de Plastic (hay un directorio client y uno server), pero antes de copiarlo deben "bajar" el servicio de Plastic ("Plastic Server 5"), luego copiar al archivo y luego volver a levantar el servicio, para que reconozca la licencia.



14. No se puede crear el objeto "visualfoxpro.application.9"

Esto pasa cuando el IDE de Visual FoxPro (vfp9.exe) no está registrado en el registro de Windows. Aunque se puede usar manuelmante el IDE sin registrarlo, el no tenerlo regitrado impide poder usarlo como clase de automatización.
El arreglo es simple: Se abre una ventana de comandos como admin, y se pone esto, adaptando la ruta donde realmente se encuentre VFP9.exe:

"c:\program files (x86)\microsoft visual foxpro 9\vfp9.exe" /regserver



15. ¡No puedo borrar un changeset! ¿qué hago?


Aunque el mensaje es bastante explícito y "técnicamente" correcto, vamos a comentarlo por partes, ya que no siempre es fácil ni evidente determinar el motivo que impide borrarlo.

Etiquetas: Eso es lo más fácil de ver, porque visualmente se puede comprobar si el changeset que se quiere borrar tiene etiquetas o no (pueden haber varias etiquetas en un mismo changeset). Si las tiene, las mismas se deben borrar antes de poder borrar el changeset.

Ramas: PlasticSCM mantiene y comprueba la integridad de los changesets, por lo que si una rama depende de un changeset, el mismo no se podrá borrar hasta que se eliminen las ramas que dependen de él. Esta solución (borrar ramas) es un tanto brusca y debe usarse como último recurso siempre que realmente sea muy importante borrar un changeset y todas sus ramas dependientes. Normalmente esto solo se hace cuando se realizan pruebas con la herramienta de Control de Código, donde se crean ramas y changesets de prueba para luego eliminarlos. Al igual que las etiquetas, ver las ramas dependientes es visualmente comprobable.

Shelves: Esto ya es más complejo, porque los shelves se crean a partir de un changeset bajo la idea de poder proteger los cambios temporalmente para poder continuar con otra cosa en otra rama y luego volver a aplicarlos en el mismo sitio cuando se vuelva a trabajar en la misma rama. El problema radica en que por un lado los shelves no son visuales y por el otro en que la información del shelve no indica en qué changeset se hizo, por lo que visualmente es imposible verlo.

Una solución (algo salvaje) podría ser borrar todos los shelves guardados, y con eso se solucionaría el problema, pero hay otra solución mucho más moderada, que consiste en preguntar a Plastic qué shelves se basan en el changeset que se quiere borrar.

Por ejemplo, si se quisiera saber qué shelves se basan en el cs:4236, la consulta desde la ventana de comandos sería esta:

cm find shelves where parent = '4236' --format="{parent} # {owner} # {guid} # {date} # {comment}"

Esto listará todos los shelves que se crearon desde ese changeset.
Para evitar tener que recurrir a esto y poder resolverlo visualmente desde la vista de Shelves, es muy recomendable que antes de crear un shelve se ponga como inicio de comentario en la vista de cambios pendientes el changeset del que parte. Por ejemplo: "cs:4236 - Arreglo bug cálculo precio"



Observaciones:


De algunos de los errores comentados, también puede deducirse que a veces vamos tan a las apuradas que no prestamos atención al instalar o configurar algo, lo que luego nos trae un sinfín de problemas que en muchos casos se podían haber evitado. Es mejor dedicar el tiempo necesario a configurar bien y sobre todo a entender cómo funciona lo que estamos configurando, y no quedarse solo con los paso-a-paso, para no perder tiempo luego y dominar mejor nuestras herramientas.


Este contenido lo iré actualizando con otros problemas comunes que me vayan surgiendo o que me sugieran.


Hasta la próxima!

martes, marzo 25, 2014

Control de Código Fuente: Terminología común que hay que conocer

Por: Fernando D. Bozzo

Esta entrada fue motivada por las inquietudes de algunos de ustedes durante las pruebas que hicimos en marzo 2014, y que me recordaron que en este tema hay términos de uso común que el que recién comienza no domina (obviamente), y por eso quiero hacer una breve reseña de los términos más usados y de lo que significan, y que iré completando a medida que me hagan nuevas preguntas sobre "¿qué significa tal término?".

Para facilitar las cosas, pondré alguna imagen cuando sea necesario y relacionaré los términos con los de FoxPro cuando pueda aplicarse.



Workspace


El workspace, que se traduce como "espacio de trabajo", es un alias que se le asigna a un directorio. Así como en FoxPro podemos usar un alias para usar una tabla bajo otro nombre, donde el alias "clientes" apunta a "c:\un-directorio\clientes.dbf", el workspace es eso mismo, pero aplicado a un directorio, de modo que si creamos un workspace llamado "dvcs_vfp9" para referirnos al directorio "c:\desa\tests\dvcs_vfp9", realmente estamos creando ese alias para que sea más fácil de manejar en Plastic, ya que es más cómodo mostrar un alias significativo en una de las solapas superiores que todo el nombre de un directorio, lo que dejaría poco lugar para las solapas de otros workspaces. De modo que hablar de "workspace" y de "directorio de trabajo" es lo mismo.

Vista del workspace "vfp_test_grupo" y el directorio que representa en Plastic





Checkin y Checkout



Check-in significa algo así como "verificar o realizar entrada", que es lo opuesto a Check-out, que es "verificar o realizar salida". Tanto la entrada como la salida se refiere a archivos, entrada o salida de archivos, o lo que es lo mismo, enviar/subir (checkin) o recuperar/bajar (checkout) archivos al servidor del Control de Código fuente.

El paralelismo con FoxPro sería el buffering de tablas, donde uno agrega, elimina o modifica registros en vez de archivos, en cualquier momento se pueden comprobar qué registros han cambiado con GetFldState (en Plastic se revisa la vista de Cambios Pendientes que actúa sobre los archivos del workspace) y luego se confirma la grabación de los mismos con TableUpdate (equivale al Check-in) o bien se pueden deshacer todos los cambios usando TableRevert (en Plastic equivale a "Deshacer Cambios"). El Checkout en Plastic solo es un estado que indica si un archivo está marcado para modificar o no. En otros SCM el checkout es la operación que se baja la última versión de un archivo al workspace, pero en Plastic esto se hace seleccionando un workspace por su solapa, o eligiendo "Actualizar workspace" en la vista de Items, o con el comando cm getfile en una ventana de comandos DOS.



Hacer un "Diff"


Versión corta: Hacer un Diff es buscar y mostrar las "Diferencias" (Differences en Inglés) entre dos archivos. Se usa para saber qué líneas o bloques de código se han cambiado entre dos versiones de un programa, por ejemplo trabajamos un rato en un programa, donde vamos guardando los cambios cada tanto (con checkin) y luego queremos ver los últimos cambios visualmente (a diferencia de tener que recordarlos)
Para la versión larga aplicada a Plastic, leer este artículo.



Hacer un "Merge"


Versión corta: Hacer un Merge es realizar la mezcla de las modificaciones hechas por separado a un mismo programa, para volver a tener un solo programa que tenga todos los cambios. Si yo tengo un programa copiado en dos directorios, a una copia le agrego un método "A" y a la otra copia le agrego un método "B", el merge sería tomar el programa original y agregarle los métodos "A" y "B".
Para la versión larga aplicada a Plastic, leer este artículo.



Cherry Pick


Versión corta: Es un tipo de Merge que permite seleccionar changesets o ramas específicas, sin incluir el resto de archivos heredados.
Para la versión larga aplicada a Plastic, leer este artículo.



Rama


Una rama es una línea paralela de trabajo, una copia completa del workspace (o directorio del proyecto) en la cuál poder trabajar sabiendo que a la copia original no la afectamos en lo más mínimo.
Una rama está compuesta por uno o más changesets.
En la práctica es como hacerse una copia del sistema en otro directorio y trabajar en él para, al terminar, pasar los cambios al directorio original.

Para la versión larga aplicada a Plastic, leer este artículo.

Imagen de la rama v1.19.17 de FoxBin2Prg con 4 changesets y una etiqueta de versión




Repositorio


En Plastic un repositorio es una base de datos (archivos de SQL Server, MySQL, etc) que contienen un grupo de tablas y esquemas que contendrán los archivos y relaciones que se hagan entre ellos.

Los archivos contenidos serán los que nosotros "subamos" al control de código, mediante las opciones "Agregar al control de código" o mediante los "checkin", y que también se pueden marcar opcionalmente como modificables con un checkout.

Normalmente se usa un repositorio por cada proyecto.



Changeset


"Changeset" significa "juego de cambios" o "conjunto de cambios", y se usa para identificar las operaciones de agregado, borrado o modificación hechos a uno o varios archivos que luego se guardan con checkin.
En Plastic se puede ver el contenido de las operaciones de un changeset haciendo doble click sobre uno de ellos.

Ejemplo de las operaciones contenidas en un changeset (archivos Movidos, Borrados y Añadidos):




Lista de archivos ignorados (ignore.conf)


Los archivos ignorados son aquellos archivos Privados que no nos interesa ver en la vista de Items de Plastic para mantenerla más despejada y poder enfocarnos en los archivos que sí nos interesa controlar. Es un filtro, un archivo de texto que contiene una lista de archivos o especificaciones de archivo donde generalmente se suelen anotar los .tmp (temporales), .fxp (compilados), .bak (backups), y demás archivos que no queramos ver.

Ejemplo de parte de un ignore.conf:

*.FXP
*.LNK
!/_iniciar aqui.lnk
*.SCC
*.TMP
*.BAK
*.ZIP
*.7Z

foxuser.dbf
*/FXUResults.*




Detalle de la especificación: 


En el ejemplo anterior tenemos los 4 tipos de ignore soportados, que se interpretan como un filtro con la función LIKE() en FoxPro:
  • La extensión sola (ej: *.FXP): Se ignoran todos los .fxp dentro del workspace, incluyendo subdirectorios
  • Un nombre de archivo (ej: foxuser.dbf): Se ignora el archivo indicado dentro del workspace, incluyendo subdirectorios
  • Un directorio con especificación de archivo (ej: */FXUResults.*): Se ignora el archivo dentro del directorio indicado. La raíz del workspace siempre es "/", que como se ve no es la contrabarra de Windows, sino el signo dividido que se usa en Linux y Mac para los directorios, ya que Plastic es multiplataforma
  • Una excepción a la regla (ej: !/_iniciar aqui.lnk): Este tipo realmente actúa como "anti-filtro" y es muy útil en los casos en los que tenemos definido un filtro, pero no queremos que se aplique en un directorio en particular. En el ejemplo dado se ignoran todos los accesos directos (*.lnk), pero se exceptúa de esta regla a un archivo en particular que está en la raíz y que se usa para abrir una sesión de FoxPro


Lista de archivos cloaked (cloaked.conf):


Los archivos cloaked son aquellos archivos controlados por Plastic, donde no nos interesa que se vuelvan a descargar o actualizar desde la base de datos.
Su uso habitual es para evitar que algunos archivos pesados (como un DBF con datos o un binario) se descarguen cada vez que actualizamos el workspace o nos cambiamos de changeset.
Se usa mucho en la industria del videojuego, donde ciertos mapas de textura pueden tener cientos de MB que tardarían un buen rato en descargarse y que al programador no le aporta nada para sus pruebas.

En FoxPro, un buen caso de uso podría ser el archivo "/_iniciar aqui.lnk" del ejemplo anterior, donde por un lado nos interesa controlarlo con Plastic para que todos los programadores se lo puedan descargar y que luego cada uno lo pueda personalizar según dónde tenga instalado FoxPro, poniéndolo en el cloaked.conf para que no se le vuelva a descargar y se pierda su configuración particular.

La especificación de archivos es la misma que para los ignorados.



Lista de cambios ocultos (hidden_changes.conf):


Los "cambios ocultos", como podría llegar a deducirse, son los archivos controlados por Plastic que no queremos ver en la vista de Cambios Pendientes aunque hayan sido modificados.
Un ejemplo podría un archivo LOG que se protegió inicialmente vacío, pero que suele cambiar frecuentemente y cuyo contenido no nos interesa que se guarde en la base de datos.

La especificación de archivos es la misma que para los ignorados.




Nivelar una rama


Nivelar una rama significa actualizarla con el contenido más actualizado de otra rama, y se hace tomando el contenido de otra rama (origen) y haciendo un merge sobre la rama a nivelar (destino).

Para nivelar una rama se debe estar ubicado sobre ella, en el último changeset más actualizado (en Plastic es donde se debe ubicar la casa)

Para la versión larga aplicada a Plastic, leer este artículo.



Si creen que faltan términos, me comentan y los voy agregando.


Saludos!