Hola gente,
Quería armar un pequeño sumario para ver lo que nos falta.
El desarrollo de safa-commit, del que solo restan pruebas, es un avance importante. Cuando acabemos lo necesario para 'safa-add' (ex safa-addfiles) tendrmos la posibilidad de un versionado lineal y comenzaremos a versionar via web con la v0.1-dev
Con esto, deberíamos ser capaces de seguir este flujo:
a) Configurar lo mínimo, el nombre de usuario:
$ mkdir -p ~/.safa-dcs
$ echo "user.name=Tu Nombre" >> ~/.safa-dcs/configb) Iniciar un repositorio donde sea:
$ mkdir /usr/src/mi-proyecto
$ cd /usr/src/mi-proyecto $ safa-initc) Trackear archivos:
$ vim README # se crea un README $ safa-add README # se agrega al index
$ safa-commit # se trackea
Entonces... ¿qué hay que hacer?
- CREAR SCRIPTS DE PRUEBAS: Es primordial probar todos los casos, y que los scripts sean claros, partiendo de un repositorio armado, teniendo en cuenta detalles que no tuvimos en cuenta, como los cambios de permisos en distintos sistemas. En el caso de safa-tree-from-index me encontré con que al trackear un archivo y ningun directorio, tira un error. Sigue, pero tira el error. No estaba contemplado. Simplemente vean todas las posibilidades de lo que se puede o se debería poder hacer, y contemplen en cada caso.
- AUDITAR CODIGO: Algunos de los scripts funcionan pero no están bien escritos, o no son muy legibles, o simplemente son mejorables. Parte de nuestro compromiso al hacer software por gusto y para aprender es hacerlo lo mejor posible. Si alguno se acerca con un approach distinto y más comprensible, o una modificación, o lo que sea, es bienvenido, de hecho es lo que espero que pase. Una vez terminamos de desarrollar un programa, no podemos considerar que está bien escrito. Ahora que funciona debe estar lleno de defectos e impurezas, y debemos ser capaces de hacerlo inteligente y perfecto.
ejemplos:
- safa-cat-tree hace uso de dos listas y funciones para ambas, cuando podría usar funciónes genéricas
- Escribimos la configuracion a mano, no hay safa-config
- En los testsets no se considera que "umask" puede ser distinta, eso generaría archivos con distintos permisos y por lo tanto cambiarían los hashes de los TREEs, que contienen a los permisos de los BLOBs como parte de su contenido. No necesitamos considerar umask, pero podemos hacer un chmod para cambiar los permisos de los archivos que creamos, y así acotar mejor el test
- No hay casos de integración. Siempre se parte de un repositorio para probar un comando, y nunca se usan comandos para crear partes del repositorio.
- A safa-status le falta mucho desarrollo, y no se puede usar safa-diff-from-tree con HEAD, que no es un tree, es una referencia a COMMIT. Se puede hacer un comando safa-resolve-ref que lleve al COMMIT, y un safa-cat-commit que permita hacer 'safa-cat-commit --tree' y leer el árbol al que apunta el COMMIT... acá se plantea una solución posible y todos pueden opinar si es el mejor camino
- safa-tree-from-index crea muchos archivos temporales, creo que eso se puede cambiar
Como ven, hay muchas cosas que pulir.
- CREAR safa-checkout-tree: Este comando lee el TREE apuntado desde el commit HEAD, borra los archivos que estén en ese commit a menos que estén cambiados respecto de HEAD, y luego recrea el TREE que le mencionemos, usando safa-cat-tree para evitar la necesidad de resolver DELTAS. Cuando lee el arbol, obtiene el nombre de los blobs a sacar, el nombre con el que los tiene que reproducir, y los permisos que debe poner.
Si alguno de los que tiene que sacar choca contra un archivo nuevo, o había modificaciónes sin commitear, no podemos hacer un checkout.
En principio eso sería lo q hay para hacer. Hay mucho trabajo, pero ya avanzamos mucho y espero tengamos el mejor versionador distribuído.
PD: Acabo de verificar el sitio y el ultimo tar que subi está mal. Con el sistema nuevo trabaké sobre un symlink, y cuando seguí la misma rutina de siempre, empaqué el symlink en un tarball. Hoy a la noche lo reemplazo.
Saludos
--
Dario