viernes, marzo 07, 2014

PlasticSCM: Hice un checkin erróneo de un archivo nuevo ¿cómo lo arreglo?

Por: Fernando D. Bozzo

A todos nos puede pasar que estamos trabajando en algo, y en un momento dado queremos proteger los cambios, entonces vamos al SCM, elegimos los archivos y hacemos checkin.... pero luego nos damos cuenta de que cometimos un error, ¿cómo lo arreglamos?

   Si el error detectado es de capitalización de un archivo recién agregado, pero al cual todavía no hicimos checkin, es muy fácil: Ir a la ventana de Cambios Pendientes y seleccionar el botón "Deshacer cambios". Problema resuelto, se soluciona el problema de capitalización haciendo la conversión texto/binario que ya comenté en el punto 3 y 4 de la otra nota, y se repite el proceso de agregar el archivo.

   Si el error detectado es de capitalización de un archivo agregado y que además se le hizo checkin, entonces habrá que hacer una copia del mismo (en un zip por ejemplo) y eliminar el último changeset creado, así:


1) Seleccionamos el changeset anterior con click-derecho:


2) Elegimos la opción "Apuntar workspace a este changeset":



2.b) ¿Muestra un error?: Si les muestra un error como el de la imagen, pueden elegir entre las opciones que ven en la imagen, y que ahí mismo están explicadas:




3) Hacemos click-derecho en el changeset a borrar (siempre es el último) y elegimos "Borrar changeset":


4) Y listo, el changeset fue borrado y el nuevo changeset actual es el anterior:


5) Finalmente, como se ha borrado un changeset que en este caso consistía en archivos agregados al SCM, esto implica que Plastic los borrará del directorio de trabajo, y por eso hicimos el ZIP en un paso anterior. Simplemente se vuelven a descomprimir los archivos, se procesan con FoxBin2Prg (solo si son binarios Fox) pasándolos a texto y binario nuevamente, se comprueba la capitalización y se vuelven a agregar al control de código.


Esto también se puede hacer cuando se protege un cambio que no se quiere guardar, pero lo ideal es solo hacer el checkin cuando se tiene certeza de que lo que se sube es correcto.


Video de ejemplo:

FoxPro 9: Deshacer Merge de 2 ramas en PlasticSCM




Importante:
Para evitar estos inconvenientes, es mejor verificar visualmente la capitalización de los archivos justo antes de que se vayan a proteger, y no olvidar que cualquier form, clase, etc, que se haya modificado, se debe pasar primero a texto y luego del texto se debe pasar a binario otra vez, ya que en estos pasos también se hace el ajuste de la capitalización.

Otra cosa a estar atento es no subir cualquier archivo, es decir, el control de código fuente (SCM) es justamente para eso, para controlar los archivos de programa que hacemos, y no para proteger los archivos temporales (tmp) o los backup (bkp) u otro tipo de archivos que no tienen nada que ver con nuestro desarrollo.

Incluso es conveniente guardar la versión texto de las tablas (archivos DB2) y bases de datos (archivos DC2) generados con FoxBin2Prg, pero no guardar las tablas con datos, porque si no el espacio destinado para el código se agotaría bastante rápido. Recordar que todo esto se guarda en una base de datos de Plastic que se puede elegir entre la que viene por defecto  y que sirve para pequeños desarrollos o desarrollos personales (SQL Server CE - 4 GB por repositorio/proyecto), u otras bases de datos más potentes como SQL Server full, MySQL, Oracle u otras.


Nota Relacionada:
FoxPro 9 y PlasticSCM: Como deshacer un changeset sin borrarlo




jueves, marzo 06, 2014

PlasticSCM: Cómo crear una rama para comenzar a trabajar

Por: Fernando D. Bozzo

En esta nota vamos a ver cómo crear una rama en PlasticSCM, pero antes de hacerlo es necesario saber qué es un rama.
Antiguamente se usaban directorios para crear copias del sistema o de ciertos componentes con determinados cambios. Por ejemplo, si se tiene un form con una pageframe y una página, se agrega otra página y se quería guardar ambas versiones por las dudas, entonces se creaba un directorio para la versión de 1 página y otro directorio para la versión de 2 páginas, y en cada uno se copiaban los forms correspondientes.

Esto tiene el inconveniente de que no es práctico, la cantidad de directorios y copias va creciendo y es fácil perderse entre tantas copias. Además que no hay forma de mezclar los cambios de un directorio con los de otro.


Las ramas

Una rama se usa para lo mismo que se usaban los directorios con distintas versiones, mantener una serie de modificaciones relacionadas a uno o varios componentes. Qué parámetro se use para establecer esa relación puede variar para cada uno, pero lo ideal es tener una rama por usuario y por tarea, ya que la idea es no trabajar nunca sobre la rama principal directamente, hacerlo siempre sobre ramas independientes.


El changeset (o "juego de cambios")


En Plastic el icono de la casa indica un punto en la historia de modificaciones que fueron guardadas con check-in y es el equivalente a lo que antes era el directorio con una copia con cierta modificación particular, por eso es importante hacer un check-in cada vez que se  complete alguna funcionalidad, y antes de pasar a la siguiente.

Para seleccionar un "changeset" se hace click-derecho en el changeset al que se quiere ir, y se elige la opción "Apuntar workspace a este changeset", o sea, se cambia el área de trabajo a ese punto de la historia del proyecto.

Pero, ¿qué ocurre cuando se cambia de changeset realmente? Lo voy a explicar con directorios.
Imaginen que tienen un directorio llamado "c:\mi_sistema_actual" que contiene 3 archivos:

c:\mi_sistema_actual => a.txt, b.txt y c.txt

Ahora se cambian a una copia más vieja que llamaron "c:\mi_sistema_feb_2012" donde solo había 2 archivos:

c:\mi_sistema_feb_2012 => a.txt y b.txt

El archivo c.txt no existe aquí porque fue agregado más recientemente en "c:\mi_sistema_actual", entonces al cambiarse a este directorio es lógico no ver ese archivo, pero si nos volvemos a cambiar al otro, entonces sí que lo vemos.

Pues en Plastic es parecido, pero ocurre todo esto en el directorio que se ha elegido como "workspace", y recalco lo de "espacio de trabajo" porque durante toda la vida del proyecto, todos los cambios se harán en este directorio o workspace. Lo que hace Plastic es "reemplazar" los archivos "controlados" por los archivos del changeset que elijamos, borrando del workspace (directorio) los archivos "controlados" del changeset actual y descargando del servidor los archivos "controlados" del changeset elegido.

No hay que asustarse cuando hablo de "borrar", ya que esto solo lo hace con los archivos que sabe que luego puede recuperar, y por eso los archivos "no controlados" se llaman "privados" y no se tocan. Los archivos privados para Plastic es como si no existieran, aunque los muestra en la ventana de items para que podamos agregarlos al control de código si queremos, y que desde ese momento cambien al estado de "controlados".


Creando una rama


Vamos a crear una rama para que cada uno pueda realizar sus pruebas o su trabajo, y no entre en conflicto con lo que hagan los demás desarrolladores.
Como origen de esta rama se debe seleccionar el changeset desde el cuál se quiere partir, que en general es el último, pero también puede ser otro anterior.


1) Abrimos la vista del Explorador de Ramas (panel izquierdo), hacemos click-derecho en el changeset elegido para bifurcar y seleccionamos "Crear rama desde este changeset"


Figura 1


2) Luego le damos un nombre a la rama. Normalmente este nombre debería ser el de la tarea que se comenzará, algo como "nuevo-form-articulos", "petición-02332" o "tarea-nnn", pero para el caso de las prácticas que estamos haciendo lo voy a nombrar como "usuario" donde cada uno debe reemplazar "usuario" por su usuario:


Figura 2


3) Finalmente podemos ver la nueva rama con la casita, ya que en la pantalla anterior estaba marcado por defecto la opción "Apuntar workspace a esta rama":

Figura 3


Y ahora sí, teniendo cada uno su propia rama, se puede comenzar a trabajar en la tarea, lo que normalmente es abrir una sesión de FoxPro en el directorio del workspace y comenzar a trabajar.



Comprobación de la ruta de nuestra rama


Cuando se crea una rama, queda una flecha gris señalando el origen de datos de la misma, que en este caso coincide con el changeset de origen, y el panel derecho muestra su ruta completa:

Figura 4


Cuando se crea una rama de otra que todavía no tiene nada nuevo, la flecha gris sigue señalando el origen de datos de la misma, pero en este caso el origen de datos no coincide visualmente con el changeset del ejemplo anterior elegido para hacer la rama, lo que puede confundir inicialmente, pero si observamos en el panel derecho, la ruta es correcta a pesar de lo que marca la flecha gris:

Figura 5


Una vista útil para esto es la llamada "Ramas" (panel izquierdo), donde se muestra la relación entre las ramas en forma de texto, y se resalta en negrita la actual (que en la vista anterior muestra el icono de la casa).

Desde esta vista también se pueden crear sub-ramas, y en algunos casos en los que en el Explorador de Ramas no se puede clickear o seleccionar la rama buscada, por ejemplo, por estar tapada por otra, esta es la única forma de poder hacerlo sin equivocarse.

Figura 6


Bueno, ya es hora de practicar un poco!


En este punto les puede interesar:
FoxPro 9: Creando un componente y añadiéndolo al control de código PlasticSCM
FoxPro 9 y PlasticSCM: Como deshacer un changeset sin borrarlo

(Sigue en: "PlasticSCM: Hice un checkin erróneo de un archivo nuevo, ¿cómo lo arreglo?")

Instalación de PlasticSCM paso a paso

[04.11.2014 - Actualización importante respecto de la Licencia de Plastic]
[15.08.2014 - Separada la sincronización con GitHub en artículo aparte para simplificar la lectura]
[13.08.2014 - Actualizadas las referencias de versiones antiguas a las recientes]
[30.03.2014 - Actualizada pantalla configuración de Cambios Pendientes]

Por: Fernando D. Bozzo

En esta nota vamos a ver cómo se instala PlasticSCM paso a paso. El instalador incluye tanto la parte cliente (la GUI) como la parte servidora, que incluye una base de Datos SQL Server CE (Compact Edition) con un límite de 4 GB por archivo, y como cada proyecto se guardará en un repositorio, y cada repositorio es una base de datos, esto significa que cada proyecto y toda su historia de cambios podrá usar esos 4 GB, que para proyectos personales suele ser suficiente.

Es importante saber que si luego se requiere mover los repositorios a otra base de datos más grande (SQL Server full, MySQL, etc), se puede hacer de al menos dos formas: usando el asistente de Migración que es uno de los programas dentro del apartado Servidor, o usando el Fast-Export desde la ventana de comandos con el comando cm.



Breve resumen antes de comenzar a instalar


A continuación pongo solo las pantallas más relevantes, con lo cual la instalación es mayormente pulsar "siguiente" hasta que aparezca una de ellas. Buena parte de la información ya está completada, como el servidor y el puerto de conexión 8087, con lo que los datos realmente a poner serán elegir idioma, opciones de instalación, un nombre de usuario/contraseña, directorio de instalación, nombre de repositorio, nombre de workspace y directorio de trabajo. Luego explicaré los conceptos nuevos.


Importante: Si al finalizar la instalación les da un error, verifiquen este artículo:
PlasticSCM: ¡Houston, tenemos problemas!


Estos son los pasos a seguir

Antes que nada, se puede bajar la version 5.0.44.618 (2014.10.28) para Windows (es la actual, a octubre 2014) desde este enlace .Regístrense en la web de Plastic y descárguenlo. En caso de no estar disponible, pueden bajarse esta versión de mi GDrive en este link.

[04.11.2014 - Actualización Importante >>]
- Para obtener la licencia gratuita Comunity Edition para 15 usuarios, hay que escribir un correo a Codicesoftware indicando que que el uso no será comercial y una breve detalle del uso que se le dará. Ya no se puede descargar esta licencia libremente como era hasta ahora, salvo que se use la de 5 usuarios y 30 días de prueba para poder comenzar, y que luego se consiga la Community Edition de la licencia, para actualizar.
[<<]

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)








1) Se ejecuta el instalador (la versión que muestra la captura está desactualizada):



2) Seleccionamos el lenguaje (Español o Inglés):



3) Avanzar hasta la siguiente pantalla y seleccionar solo lo que está marcado (componentes de cliente y de servidor)) y lo demás no debe marcarse:




4) Seguir avanzando hasta que muestre esta pantalla, y desmarcar el primer check del Léame. A partir de aquí se realizarán las tareas marcadas en el orden en que aparecen (instalar componente Servidor, levantar servicio e instalar componente Cliente):



5) Seguir avanzando hasta esta pantalla de configuración del servidor y elegir la primera opción:



6) Por elegir esa opción de autentificación, que indica que los usuarios serán gestionados desde Plastic, se mostrará la pantalla para crear nuestro usuario inicial:



7) En esta pentalla se selecciona "Grupos", se hace click-derecho, se elige "Nuevo Grupo" y se pone "desarrollo":



8) Se puede ver como muestra el grupo elegido:



9) Ahora se selecciona "Usuarios", se hace click-derecho, se elige "Nuevo Usuario" y se elige un usuario y una contraseña que quieran usar en Plastic.

Nota importante para las Prácticas del Grupo VFP de Google (agosto 2014): 
Para las prácticas del foro usen aquí el usuario que les he pasado de forma individual, porque así luego podemos ver todos quién hizo qué modificaciones y así es más fácil de ver.
Si no están con las prácticas, entonces aquí pueden elegir cualquier usuario/password.




10) Podrán ver como aparece vuestro usuario:



11) Ahora hay que vincular el usuario al grupo. Hacemos doble-click sobre el nombre de usuario, elegimos el botón "Añadir", elegimos el grupo "desarrollo" que creamos antes y aceptamos y cerramos todo, incluyendo la ventana del fondo que dice "Herramienta de gestión de usuarios y grupos":



12) Seguimos avanzando hasta esta ventana que ya debería estar completa con los datos por defecto. En el caso de ustedes les mostrará el nombre de sus PC, el mio es WIN7U y el puerto por defecto es el 8087:



13) Seguimos avanzando hasta finalizar la parte servidora y se iniciará la instalación del cliente, donde deben seguir avanzando hasta esta pantalla que debería estar completada con los datos por defecto. En el campo del "servidor Plastic SCM" puede decir "localhost", el nombre de vuestro PC o incluso una IP. Para nuestro caso con "localhost" es suficiente:



14) Avanzamos hasta esta pantalla, que debería estar preseleccionada con la primera opción:



15) Avanzamos hasta esta pantalla que debería estar precompletada con el mismo usuario/contraseña que crearon antes, y si no lo está la completan:



16) Les mostrará un mensaje de que finalizó la instalación, y ahora les permite crear nuestro primer espacio de trabajo o Workspace en Inglés, donde elegimos "Nuevo...":



17) Elegimos el nombre del workspace, que será el alias asociado al directorio de trabajo, (ejemplo: "dvcs_vfp9"), también elegimos el directorio de trabajo (conviene que se llame igual por comodidad) y en el tercer dato donde va el Repositorio elegimos "Nuevo..." para crear uno:

Nota: Normalmente el nombre de Repositorio que se suele usar es el del proyecto FoxPro que se va a subir o a crear, o el nombre del directorio que contiene al proyecto. Este mismo nombre además se suele usar para el workspace, por lo que es común que Repositorio y Workspace se llamen igual.




En la captura anterior, al elegir el botón "Nuevo...", mostrará la siguiente pantalla:




18) Una vez creado el Repositorio, lo seleccionamos del desplegable:



19) Ya tenemos creado nuestro espacio de trabajo (workspace) en el repositorio que contendrá el proyecto, y Plastic ya sabe cuál será el directorio de trabajo que le corresponde (el nombre que figura en la captura es solo ilustrativo):



20) ¡Ya está! Ahora podemos ver la solapa de "Items" (que por ahora la verán vacía), la de cambios pendientes (también vacía) y el Explorador de ramas que por el momento solo tendrá un punto gordo:








Configuración

Nota: Antes de configurar, es probable que se deba reiniciar la PC para que se tomen todos los cambios de la Instalación. Aviso por si no puede entar a Plastic o da algún error.

En la vista de Cambios Pendientes (panel izquierdo), pulsar sobre el botón "Opciones" de arriba y configurar lo siguiente:



En el panel izquierdo elegir la opción "Configuración" y luego "Otras opciones", y configurar lo siguiente:




Configuración de las Herramientas FoxPro 9 para Plastic


Bueno, ya tenemos lo necesario para comenzar, solo queda descargar y configurar las herramientas para Plastic en FoxPro 9 que se invocarán desde las opciones de menú de Plastic y del Explorador de archivos de Windows.

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

A fecha de hoy, 13/08/2014, están actualizadas con la última versión de FoxBin2Prg v1.19.30 liberada ayer, así que bájenselas y lean la siguiente nota para configurarlas.

[Artículo] Cómo configurar las Herramientas de VFP 9 para Plastic


En la pantalla de configuración de Plastic les tendrá que quedar algo así:








Atención: antes de terminar....



Si alguno no aguanta las ganas de hacer alguna prueba ya mismo, por favor, crear un nuevo workspace en un nuevo Repositorio y en otro directorio, para no estropear el recién creado. En el panel izquierdo están ambas opciones (Repositorios y Workspaces) y ahí sí pueden hacer sus pruebas con seguridad.


Nos leemos!

(Sigue en: "PlasticSCM: Cómo crear una rama para comenzar a trabajar")

Relacionados:
PlasticSCM: Sincronización con GitHub

Recursos (en Inglés):

PlasticSCM - Introduction (Excepcional Guía PDF con pantallas y muchas explicaciones)


miércoles, marzo 05, 2014

Nueva versión v2.4.9 de las herramientas FoxPro 9 para PlasticSCM

Por: Fernando D. Bozzo

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

- Actualizada la versión de FoxBin2Prg a la versión v1.19.15
- Actualizados los scripts FoxPro para usar el seteo del soporte de configuración de binarios de foxbin2prg.cfg cuando se usa procesamiento batch (por medio de Enviar A)

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.


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


Saludos!

Nueva versión v1.19.15 de FoxBin2Prg (3 arreglos, 1 mejora)

Por: Fernando D. Bozzo

Está liberada la versión v.1.19.15 de FoxBin2Prg con los siguientes cambios:

  • Arreglo bug información OLE que se borra cuando se procesa un TX2 legacy. Los archivos tx2 generados con versiones anteriores a la v1.19.7 ponían la información de objetos OLE en la cabecera del archivo y otra parte en el objeto que lo usaba. Al procesar esos archivos con las versiones posteriores del programa, la información OLE no se guardaba en el binario. Cualquier binario que use objetos OLE que se regenere con esta versión partiendo de un tx2 antiguo, ya queda bien.
  • Arreglo bug valor por defecto de NoTimestamp = 0 (ahora es 1, como debe ser). Este es un valor que inicialmente se respetaba, hasta descubrir que Fox no lo usa para nada, por lo que por defecto se limpia automáticamente para minimizar diferencias en los SCM.
  • Arreglo bug tablas que pierden el backlink cuando se regenera el DBC (Ryan Harris). Un descubrimiento respecto de esto: Si se regenera un DBC con CREATE DATABASE <nombre> y el DBC existía, se limpian todos los backlinks a las tablas hijas, lo que no está documentado y queda solucionado borrando primero el DBC.
  • Mejora: Capitalización a minúsculas del nombre de archivo que se muestra en el header de los archivos tx2 para evitar diferencias por este dato. En la cabecera de los archivos tx2 se generan unos comentarios de aviso y un par de datos extra, la versión de FoxBin2Prg y el nombre de archivo original. Ahora se genera este nombre siempre en minúsculas para evitar que surjan diferencias al comparar con uno anterior y distinta capitalización.


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


 Saludos!

sábado, marzo 01, 2014

Nueva versión v2.4.8 de las herramientas FoxPro para PlasticSCM

Por: Fernando D. Bozzo

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

- Actualizada la versión de FoxBin2Prg a la versión v1.19.14
- Actualizados los scripts FoxPro para usar el seteo del soporte de configuración de binarios de foxbin2prg.cfg cuando se usa procesamiento batch (por medio de Enviar A)

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.


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


Saludos!

Nueva versión v1.19.14 de FoxBin2Prg (arreglos, optimizaciones)

Por: Fernando D. Bozzo

Está liberada la versión v.1.19.14 de FoxBin2Prg con los siguientes cambios:

  • Optimizada la carga de la configuracion (foxbin2prg.cfg) una única vez en un proceso masivo de múltiples conversiones. Mientras solucionaba un problema reportado en los scripts, encontré que cuando se hacen procesos masivos usándolos con el método de "Enviar A", el archivo de configuración era cargado por cada archivo procesado. Ahora se carga una sola vez y mantiene la configuración en memoria hasta finalizar el proceso, evitando un acceso a disco y lectura de archivo por cada archivo procesado.
  • Modificados los scripts .vbs para respetar la configuración del soporte de conversiones definido en el archivo de configuración foxbin2prg.cfg. Estos scripts los había hecho al inicio del proyecto y contenían algunas evaluaciones hardcodeadas que fueron creadas antes del archivo de configuración foxbin2prg.cfg, pero a partir de haber potenciado este archivo no había vuelto a modificarlos hasta ahora, donde los actualicé para respetar la configuración de tipos de conversión soportados para no generar errores, por ejemplo, si se configura que no se desea regenerar los DBFs y se procesa un directorio que contiene DBFs.
  • Agregadas 2 funciones para mejorar y encapsular la evaluación del soporte de conversiones de forma externa (requiere EvaluarConfiguracion() previamente). Usado en los scripts .vbs. Estas nuevas funciones encapsulan la evaluación del soporte de conversión bidireccional para cada extensión soportada, lo que permite reutilizarlas externamente en los scripts o automatizaciones externas, ahorrando bastante código del lado externo. Se puede comprobar como se han reducido los scripts adjuntos.
  • Arreglo bug Regresión en ExtraBackupLevels: cuando no se define valor, no se genera backup. En la versión anterior se introdujo la capacidad de desactivar los backups, y en esa mejora se introdujo el bug de dejarlos desactivados por defecto.Ahora se restablece la generación de los backups por defecto.
  • Nuevo valor por defecto ClearUniqueID = 1 configurado en foxbin2prg.cfg para minimizar diferencias en el SCM. Hasta la versión anterior este era un seteo experimental, pero para los que trabajan con herramientas SCM esta pasa a ser una configuración totalmente necesaria y por eso se habilita por defecto. Este cambio solo podría afectar a quienes usen herramientas que usen para algo el UniqueID de los registros de los binarios de FoxPro. Lo mismo se aplica al Timestamp. En ambos casos se puede forzar su activación en el archivo foxbin2prg.cfg

A qué afecta:- Los bugs no afectan la generación de binarios ni textos.


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


 Saludos!