Data Version Manager
25 Jul 2018 - Evaristo
dvm es una aplicación que emula control de versiones para archivos binarios de datos. Este post presenta una historia de usuario de dvm.
Crear repo dvm y agregar archivos
Primero inicializamos un repo dvm en la carpeta datos.
> cd datos
> dvm init
Vemos el estado del repo:
> dvm status
? foo.bin
? bar.bin
Agregamos los archivos de datos binarios al repo dvm:
> dvm add
Nuevamente vemos el estado del repo:
> dvm status
A foo.bin
A bar.bin
Consignamos y subimos los datos:
> dvm commit
> dvm push
pushing...
done
Consignar y subir cambios
El analista modificó foo.bin:
> dvm status
M foo.bin
Consignamos los cambios y subimos la versión actual:
> dvm commit
> dvm push
pushing...
done
Eliminar archivos y subir cambios
El analista borró bar.bin:
> dvm status
! bar.bin
Eliminamos del repo dvm los datos borrados:
> dvm remove
Nuevamente vemos el estado del repo:
> dvm status
R bar.bin
Consignamos y subimos los datos:
> dvm commit
> dvm push
pushing...
done
Descargar cambios
Para descargar actualizaciones en los archivos de datos
> dvm pull
pulling...
done
La instrucción anterior descarga la versión más nueva sin modificar tu copia local. Para actualizar tus archivos de datos:
> dvm update
Actualiza sólo un archivo
Los comandos pull y update aceptan la opcion --filename para indicar el nombre del archivo que se desea altualizar
> dvm pull --filename foo.bin
pulling...
done
> dvm update --filename foo.bin
También aceptan el checksum de la versión deseada de un archivo:
> dvm pull --checksum 4d186321c1a7f0f354b297e8914ab240
pulling...
done
> dvm update --checksum 4d186321c1a7f0f354b297e8914ab240
¿Cómo funciona?
Crear repo dvm y agregar archivos
El comando init crea un archivo dvm.json y una carpeta .dvm.
Ejemplo de dvm.json:
{
"resources": null
}
El directorio contiene dos achivos: foo.bin y bar.bin. El comando status busca en dvm.json el nombre de los archivos que encuentra en el directorio (y que no se encuentran en .dvmignore). Dado que dvm.json está vació, status despliega:
> dvm status
? foo.bin
? bar.bin
El comando add agrega a dvm.json el nombre y checksum de los archivos marcados con ?.
{
"resources":
[
{
"filename": "foo.bin",
"checksum": "4D186321C1A7F0F354B297E8914AB240",
"hash": "md5"
},
{
"filename": "bar.bin",
"checksum": "DD485E41F1758DEF296E1BC7377F8EA7",
"hash": "md5"
}
]
}
Debes consignar en tu sistema de control de versiones (hg o git) los cambios en
dvm.jsoncada vez que uses el comandodvm add.
Además, add copia los archivos foo.bin y bar.bin a la carpeta .dvm/ renombrándolos con el checksum:
> ls .dvm/
md5_4D186321C1A7F0F354B297E8914AB240.dvm
md5_DD485E41F1758DEF296E1BC7377F8EA7.dvm
Ignora en tu sistema de control de versiones (hg o git) la carpeta
.dvm.
El comando push sube los archivos md5_*.dvm a un servidor FTP.
Consignar y subir cambios
Cuando se modifica foo.bar, el comando status encuentra que el checksum actual de foo.bar no coincide con el checksum guardado en el archivo dvm.json y despliega:
> dvm status
M foo.bin
El comando commit actualiza dvm.json con el nuevo checksum:
{
"resources":
[
{
"filename": "foo.bin",
"checksum": "0AD066A5D29F3F2A2A1C7C17DD082A79",
"hash": "md5"
},
{
"filename": "bar.bin",
"checksum": "DD485E41F1758DEF296E1BC7377F8EA7",
"hash": "md5"
}
]
}
Debes consignar en tu sistema de control de versiones (hg o git) los cambios en
dvm.jsoncada vez que uses el comandodvm commit.
y hace una copia de foo.bin a la carpeta .dvm/ renombrándola con el nuevo checksum:
> ls .dvm/
md5_4D186321C1A7F0F354B297E8914AB240.dvm
md5_DD485E41F1758DEF296E1BC7377F8EA7.dvm
md5_0AD066A5D29F3F2A2A1C7C17DD082A79.dvm
Vemos que en la carpeta .dvm/ hay tres archivos: dos versiones de foo.bin y una versión de bar.bin. El nuevo archivo md5_0AD066A5D29F3F2A2A1C7C17DD082A79.dvm todavía no se ha subido al servidor. Para subir la nueva versión de foo.bar usamos nuevamente el comando push.
Eliminar archivos y subir cambios
El comando remove elimina de dvm.json el nombre y checksum del archivo marcados con !.
{
"resources":
[
{
"filename": "foo.bin",
"checksum": "4D186321C1A7F0F354B297E8914AB240",
"hash": "md5"
}
]
}
Debes consignar en tu sistema de control de versiones (hg o git) los cambios en
dvm.jsoncada vez que uses el comandodvm remove.
Descargar cambios
El comando pull obtiene una lista de los checksum guardados en dvm.json, construye una lista de nombres de archivo con el formato .dvm/md5_{checksum}.dvm, y descarga del servidor FTP los archivos que no se encuentren en la carpeta .dvm/.
El comando update sobreescribe tus archivos de datos binarios con los archivos .dvm/md5_{checksum}.dvm usando la relación filename- checksum descrita por dvm.json.
Actualiza sólo un archivo
Las opciones --filename y --checksum de los comandos add, commit, pull y update usan los campos correspondientes en dvm.json para realizar la operación sobre sólo un archivo.