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.json
cada 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.json
cada 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.json
cada 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.