Proyecto Eneboo-tools (Guía superrapida)
=================================================
Actualmente solo se proveen los comandos eneboo-mergetool y eneboo-assembler.
Otros comandos que no están listados aquí pueden ser pruebas de concepto o estar
en desarrollo.
Dependencias
---------------------
Como mínimo, se necesita:
* python 2.5
* sqlite3
* lxml (python-lxml)
* libxml2
* libxslt
Para tener el programa funcionando, se recomienda:
* python 3.6.9 o superior.
* lxml (python-lxml) (Parser de XML)
* psycopg (python-psycopg) (Driver de base de datos PostgreSQL)
* pyqt4 (python-pyqt4) (Enlace de Qt4 para GUI)
Instalación
---------------------
La instalación recomendada es enlazar los comandos en /usr/local/bin
Hemos creado un Makefile que lo hace automáticamente al lanzar el comando::
$ sudo make install
Si se quiere realizar manualmente, se puede hacer del siguiente modo::
$ sudo ln -s $HOME/git/eneboo-tools/eneboo-mergetool /usr/local/bin/eneboo-mergetool
Assembler: Introducción
------------------------
eneboo-assembler es una herramienta de "collage" de código fuente. Toma como base
unos módulos y les aplica una serie de parches en un orden determinado para
conseguir un proyecto modificado de cierta forma, que cumpla ciertas especificaciones.
Es una buena forma para mantener centenares de versiones distintas del mismo programa
al día, gestionando correctamente los cambios propios que tiene cada versión.
Assembler: Uso
------------------------
Para empezar, necesitaremos 2 repositorios adicionales:
* Módulos Oficiales
* Extensiones
Si tenemos cuenta en github, el procedimiento estándar para clonar los dos repositorios es el siguiente::
$ cd ~/git
$ ssh-add
$ git clone git@github.com:gestiweb/eneboo-modules
$ git clone git@github.com:gestiweb/eneboo-features
Si no tenemos cuenta en github, el procedimiento es::
$ cd ~/git
$ git clone git://github.com/aulla/eneboo-tools.git
Para instalar los comandos que tenemos en eneboo-tools es suficiente con
ejecutar "sudo make install" desde la carpeta del proyecto.
El comando "eneboo-assembler" es el que usaremos normalmente para realizar las
mezclas desde consola. Es muy sencillo y práctico.
Este comando tiene unas configuraciones y una base de datos de caché. Para que
genere los primeros ficheros es conveniente lanzar la acción "dbupdate"::
$ eneboo-assembler dbupdate
Cabe destacar que eneboo-assembler no depende de en qué carpeta lo ejecutes.
Todas sus acciones leen los directorios de las configuraciones. Para que esto
funcione como debe, es necesario revisar la configuración que nos
crea en $HOME/.eneboo-tools/assembler-config.ini
En ese fichero, que es muy sencillo de editar a mano, debemos incluir las
rutas donde hemos puesto los módulos y las funcionalidades (extensiones). Se
deben modificar las rutas si no son las mismas en nuestro caso, o si tenemos
repositorios privados, se pueden agregar también. Hay que tener en cuenta que
las líneas de abajo toman preferencia sobre las de arriba. Se recomienda poner
al final siempre los repositorios públicos para que tomen preferencia.
Este sería un ejemplo de configuración::
[module]
modulefolders =
~/git/eneboo-modules
featurefolders =
~/git/eneboo-features
buildcache = ~/.eneboo-tools/buildcache
Siempre que modificamos la ruta de una extensión, o ponemos o quitamos
alguna, es necesario ejecutar "dbupdate", que almacenará en caché dónde
están los módulos y extensiones. Si no lo hacéis luego os dará errores
de que no encuentra las extensiones nuevas::
$ eneboo-assembler dbupdate -v
Las extensiones si os fijáis son carpetas con ficheros de configuración y con
los parches para aplicar dentro. Hay un proyecto de ejemplo creado que une
cuatro extensiones muy básicas.
Para crear un proyecto (lo que llamamos "compilar") se lanza la acción
"build" seguida del proyecto y del target. El "target" es qué es lo que se
quiere crear, la idea es muy similar al make. El modo de empleo es::
$ eneboo-assembler build [FEATURE] [TARGET]
*[FEATURE]* es el nombre corto (quitando la numeración) de la funcionalidad,
es decir, para el proyecto *prj0002-standard* habría que poner *standard*.
*[TARGET]* puede tomar los valores:
* **base:**
compila las dependencias del proyecto (todo lo que
necesitamos para poder aplicar los parches luego)
* **final:**
todo lo que lleva base, mas los parches que existen
para este proyecto. (esto es lo que se envía al cliente)
* **src:**
una copia del target final, donde realizar los cambios
a la extensión
* **patch:**
calcula el parche de las diferencias entre src y final. (incremental)
* **test-patch:**
el resultado de aplicar el parche "patch" sobre
"final", sirve para realizar las pruebas convenientes antes de
guardar el nuevo parche.
* **fullpatch:**
calcula el parche de las diferencias entre src y base. (completo)
* **revfullpatch:**
calcula el parche de las diferencias entre base y src. (completo)
* **test-fullpatch:**
el resultado de aplicar el parche "fullpatch" sobre
"base", sirve para realizar las pruebas convenientes antes de
guardar el nuevo parche.
Novedad: Podemos usar "revfullpatch" para que nos calcule un parche inverso, lo
cual desaplicaría una extensión a un proyecto dado.
Cuando compilamos algo, nos lo deja dentro de la carpeta build/ en la
carpeta de la extensión que habíamos compilado.
Por ejemplo::
deavid:~$ eneboo-assembler build basic base
Borrando carpeta /home/deavid/git/eneboo-features/prj001-basic/build/base . . .
Copiando facturacion/principal . . .
Copiando facturacion/facturacion . . .
Copiando contabilidad/informes . . .
Copiando contabilidad/principal . . .
Copiando facturacion/informes . . .
Copiando facturacion/tesoreria . . .
Copiando facturacion/almacen . . .
Aplicando parche (...)oo-features/ext0224-pgc2008/patches/pgc2008 . . .
Aplicando parche (...)res/ext0014-recibosprov/patches/recibosprov . . .
WARN: No hemos encontrado el bloque de código para las definiciones de la clase ifaceCtx, pondremos las nuevas al final del fichero.
Aplicando parche (...)/ext0020-co_renumasiento/patches/co_renumasiento . . .
WARN: No hemos encontrado el bloque de código para las definiciones de la clase ifaceCtx, pondremos las nuevas al final del fichero.
Aplicando parche (...)/ext0048-listadoscliprov/patches/listadoscliprov . . .
deavid:~$ cd /home/deavid/git/eneboo-features/prj001-basic/build/
deavid:~/git/eneboo-features/prj001-basic/build$ ls
base base.build.xml
deavid:~/git/eneboo-features/prj001-basic/build$ cat base.build.xml
<BuildInstructions feature="prj001-basic" target="base" path="/home/deavid/git/eneboo-features/prj001-basic" dstfolder="build/base">
<CopyFolderAction src="/home/deavid/git/eneboo-modules/facturacion/principal" dst="facturacion/principal" create_dst="yes"/>
<CopyFolderAction src="/home/deavid/git/eneboo-modules/facturacion/facturacion" dst="facturacion/facturacion" create_dst="yes"/>
<CopyFolderAction src="/home/deavid/git/eneboo-modules/contabilidad/informes" dst="contabilidad/informes" create_dst="yes"/>
<CopyFolderAction src="/home/deavid/git/eneboo-modules/contabilidad/principal" dst="contabilidad/principal" create_dst="yes"/>
<CopyFolderAction src="/home/deavid/git/eneboo-modules/facturacion/informes" dst="facturacion/informes" create_dst="yes"/>
<CopyFolderAction src="/home/deavid/git/eneboo-modules/facturacion/tesoreria" dst="facturacion/tesoreria" create_dst="yes"/>
<CopyFolderAction src="/home/deavid/git/eneboo-modules/facturacion/almacen" dst="facturacion/almacen" create_dst="yes"/>
<ApplyPatchAction src="/home/deavid/git/eneboo-features/ext0224-pgc2008/patches/pgc2008"/>
<ApplyPatchAction src="/home/deavid/git/eneboo-features/ext0014-recibosprov/patches/recibosprov"/>
<ApplyPatchAction src="/home/deavid/git/eneboo-features/ext0020-co_renumasiento/patches/co_renumasiento"/>
<ApplyPatchAction src="/home/deavid/git/eneboo-features/ext0048-listadoscliprov/patches/listadoscliprov"/>
</BuildInstructions>
deavid:~/git/eneboo-features/prj001-basic/build$ find base -maxdepth 2 -type d
base/facturacion
base/facturacion/principal
base/facturacion/facturacion
base/facturacion/informes
base/facturacion/tesoreria
base/facturacion/almacen
base/contabilidad
base/contabilidad/informes
base/contabilidad/principal
Si os fijáis, la idea es en el futuro, "apilar" parches, es decir, que cuando modificamos una
extensión creamos otro parche **distinto**, que tiene que ser aplicado **después**
del original. Esto ayudará a que si dos personas trabajan a la vez sobre el
mismo parche, sea mucho más fácil mezclarlo.
De momento, no hay soporte para parche incremental, pues casi todos los diff y
patch contextuales son incapaces de realizar un patch incremental (la única
excepción es el de XML). Así que de momento sólo se pueden guardar cambios
reemplazando todos los anteriores (con fullpatch).
Para guardar un cambio, después de haberlo probado con test-fullpatch y habiendo
comprobado que no hemos perdido nada, se usa la acción "save-fullpatch" del siguiente
modo::
$ eneboo-assembler save-fullpatch prj001-basic
Eso sí, la operación **ES DESTRUCTIVA** y reemplazará lo que había antes sin que
se pueda recuperar. No recomiento usar esto si no tenemos la carpeta bajo control
de versiones (GIT, SVN, etc), porque en un descuido nos podemos quedar sin parche.
Aún faltan cosas básicas por desarrollar, como por ejemplo:
* Comando "save-patch" para guardar los cambios realizados en un parche incremental
* Comando "blend-patches" para unir todos los parches en uno solo. (excepto los N últimos)
* Comando "export" para generar un tar.gz de los módulos (del target final)
Assembler: Creando extensiones nuevas
-----------------------------------------
Hasta hace poco para crear las extensiones nuevas que el assembler pueda leer
había que crear los ficheros y carpetas a mano. Como son unas cuantas, esto era
un tanto costoso.
Para facilitar las cosas hemos creado una acción "new" que contiene un asistente
que realizará las preguntas necesarias y luego escribirá en disco la extensión.
Si se ejecuta sin argumentos, preguntará los datos mínimos para crear la plantilla::
$ eneboo-assembler new
Qué tipo de funcionalidad va a crear?
ext) extensión
prj) proyecto
set) conjunto de extensiones
Seleccione una opción: ext
Código para la nueva funcionalidad: A002
Nombre corto de funcionalidad: mifun02
Descripción de la funcionalidad: Funcionalidad 02
Si se le pasa el nombre de la carpeta y la descripción, omite los pasos
iniciales y pasa directamente al menú::
$ eneboo-assembler new extA003-mifun03 "Funcionalidad 03"
Aparecerá el menú principal como se muestra a continuación::
**** Asistente de creación de nueva funcionalidad ****
: Carpeta destino : /home/david/git/eneboo-features/extA003-mifun03
: Nombre : extensión - A003 - mifun03
: Descripción : Funcionalidad 03
: Dependencias : 0 módulos, 0 funcionalidades
: Importar Parche : None
-- Menú de opciones generales --
c) Cambiar datos básicos
d) Dependencias
i) Importar parche
e) Eliminar parche
a) Aceptar y crear
q) Cancelar y Salir
Seleccione una opción:
La opción *d) Dependencias* sirve para añadir módulos y funcionalidades. Una vez dentro del menú de dependencias, para facilitar la tarea de agregado podemos utilizar caracteres comodín. Por ejemplo, si introducimos "flfact*" y pulsamos tabulador, pondrá todos los módulos que empiecen por "flfact".
En el caso de las rutas, también existe autocompletado con el sistema de ficheros, que se activa con la tecla de tabulador.
Por defecto las extensiones se crean en la primera carpeta de extensiones que
haya en la configuración, se puede cambiar la carpeta de destino en una opción del
menú.
MergeTool: Introducción
------------------------
eneboo-mergetool es una herramienta orientada a calcular diferencias entre ficheros
y a aplicarlas en diferentes contextos. Generalmente siempre se le proveerá de
la ruta exacta a los ficheros y carpetas. Esta herramienta se usa internamente por
eneboo-assembler, aunque puede ser conveniente usarla en determinados casos donde
el assembler no cubre el uso exacto que queremos darle.
MergeTool: Uso
-------------------
Para sacar una ayuda y listado de acciones::
$ eneboo-mergetool --help
Para sacar más ayuda de una acción::
$ eneboo-mergetool --help nombre-accion
MergeTool: Acciones disponibles
---------------------------------
**Utilidades para carpetas:**
*folder-diff* lee dos carpetas recursivamente y obtiene una diferencia. A partir
de esta diferencia, genera una colección de parches en una tercera carpeta.
*folder-patch* lee una carpeta de parches (flpatch) y una carpeta de ficheros
originales. Aplica los parches en a estos ficheros y el resultado se guarda en
una tercera carpeta.
**Utilidades para ficheros individuales:**
*file-diff* muestra la diferencia entre dos ficheros por la salida estándar o a
un fichero especificado por --output-file. Tiene un argumento de modo que
condiciona el tipo de algoritmo que será lanzado para comparar los ficheros.
Están soportados *qs* y *xml*.
*file-patch* muestra el resultado de aplicar un parche a un fichero por la salida
estándar o guarda el resultado en el fichero indicado por --output-file. Tiene
un argumento de modo que condiciona el algoritmo que se lanza para aplicar el
parche. Están soportados *qs* y *xml*.
*file-check* realiza comprobaciones rutinarias sobre el fichero dado. Actualmente
sólo está soportado el modo *qs-classes*, que comprobará la correcta herencia de
éstas.
*qs-extract* es una utilidad para extraer clases que se especifiquen de un
fichero qs directamente, sin necesidad de comparar con otro fichero.
MergeTool: FOLDER DIFF
-----------------------------------
Extrae las modificaciones realizadas en un proyecto y guarda una carpeta
de parche.
Para trabajar con esta herramienta, debemos contar con dos carpetas. Una
contendrá un backup del proyecto antes de realizar los cambios y la otra será
donde hayamos realizado nuestras modificaciones. Llamamos *basedir* a la carpeta
de backup y *finaldir* a la carpeta donde están los cambios realizados.
Esta herramienta creará una carpeta (que no debe existir antes) y dejará dentro
todas las diferencias encontradas, así como las instrucciones de aplicación.
Veamos un ejemplo::
$ eneboo-mergetool folder-diff parches/mi_parche \
proyecto1_original/ proyecto1_modificado/
Esto crearía la carpeta *parches/mi_parche* y contendría las instrucciones para
generar *proyecto1_modificado* a partir del *proyecto1_original*.
MergeTool: FOLDER PATCH
-----------------------------------
Lee una carpeta de parche y aplica las modificaciones en el proyecto generando
una carpeta nueva.
Para trabajar con esta herramienta, debemos contar con dos carpetas. Una
contendrá proyecto a aplicar los cambios y la otra será donde hayamos guardado
el parche. Llamamos *basedir* a la carpeta del proyecto original y *patchdir*
a la carpeta donde están guardados los parches.
Esta herramienta creará una carpeta (que no debe existir antes) y dejará dentro
el nuevo proyecto que será el resultado de la aplicación de los parches.
Veamos un ejemplo::
$ eneboo-mergetool folder-patch parches/mi_parche \
proyecto1_original/ proyecto1_parcheado/
Esto crearía la carpeta *proyecto1_parcheado/* y contendría *proyecto1_original/*
pero con los parches aplicados. El fichero XML del parche debe encontrarse en la
carpeta *mi_parche*.
MergeTool: DIFF QS
----------------------
Obtener diff de un fichero QS::
$ eneboo-mergetool file-diff qs \
antiguo/facturacion/facturacion/scripts/flfactalma.qs \
nuevo/facturacion/facturacion/scripts/flfactalma.qs \
--output-file patches/flfactalma.qs
Aplicar un diff de fichero QS::
$ eneboo-mergetool file-patch qs \
antiguo/facturacion/facturacion/scripts/flfactalma.qs \
patches/flfactalma.qs \
--output-file antiguo/facturacion/facturacion/scripts/flfactalma.patched.qs
MergeTool: DIFF XML
---------------------
Obtener diff de un fichero XML::
$ eneboo-mergetool file-diff xml \
antiguo/facturacion/facturacion/forms/flfactalma.ui \
nuevo/facturacion/facturacion/forms/flfactalma.ui \
--output-file patches/flfactalma.ui
Aplicar un diff de fichero XML::
$ eneboo-mergetool file-patch qs \
antiguo/facturacion/facturacion/forms/flfactalma.ui \
patches/flfactalma.ui \
--output-file antiguo/facturacion/facturacion/scripts/flfactalma.patched.ui
MergeTool: FILE CHECK
-----------------------
Es posible comprobar los ficheros con eneboo-mergetool. Esta comprobación se limita
(hasta ahora) a los ficheros QS y a una comprobación sobre los bloques y las clases.
Además es posible generar un fichero de "parche" para corregir los fallos típicos en
la creación de bloques class_declaration y definition::
$ for i in $(find . -iname '*.qs'); do eneboo-mergetool file-check qs-classes $i --patch-dest mypatch -v; done
$ patch -p1 < mypatch
Packager
-----------------------------
Esta herramienta permite empaquetar código eneboo en un sólo fichero .eneboopkg. Este tipo de ficheros presentan varias ventajas frente al código tradicional ordenado en carpetas de módulos, a saber:
- Se pueden importar de forma cómoda desde la opción *Sistema > Administración > Cargar Paquete de Módulos* de eneboo.
- Ocupan menos, ya que el código está comprimido.
- Son más fáciles de trasladar y descargar.
Para empaquetar un directorio que contenga código eneboo podemos usar::
$ eneboo-packager create ruta_directorio_codigo -v
Para conocer todas las opciones de la herramienta::
$ eneboo-packager --help
Raw data
{
"_id": null,
"home_page": "https://github.com/aulla/eneboo-tools",
"name": "enebootools",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6.9",
"maintainer_email": "",
"keywords": "erp pineboo eneboo tools",
"author": "David Mart\u00ednez Mart\u00ed, Jos\u00e9 A. Fern\u00e1ndez Fern\u00e1ndez",
"author_email": "deavidsedice@gmail.com, aullasistemas@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/5c/79/9b214fb2022e2c253dd970e613e5489b79eca32b08018981fb0e030fa550/enebootools-2.2.1.tar.gz",
"platform": null,
"description": "Proyecto Eneboo-tools (Gu\u00eda superrapida)\n=================================================\n\nActualmente solo se proveen los comandos eneboo-mergetool y eneboo-assembler.\n\nOtros comandos que no est\u00e1n listados aqu\u00ed pueden ser pruebas de concepto o estar\nen desarrollo.\n\nDependencias\n---------------------\n\nComo m\u00ednimo, se necesita:\n * python 2.5 \n * sqlite3\n * lxml (python-lxml)\n * libxml2\n * libxslt\n \nPara tener el programa funcionando, se recomienda:\n * python 3.6.9 o superior.\n * lxml (python-lxml) (Parser de XML)\n * psycopg (python-psycopg) (Driver de base de datos PostgreSQL)\n * pyqt4 (python-pyqt4) (Enlace de Qt4 para GUI)\n \n\nInstalaci\u00f3n\n---------------------\n\nLa instalaci\u00f3n recomendada es enlazar los comandos en /usr/local/bin \n\nHemos creado un Makefile que lo hace autom\u00e1ticamente al lanzar el comando::\n \n $ sudo make install\n \nSi se quiere realizar manualmente, se puede hacer del siguiente modo::\n\n $ sudo ln -s $HOME/git/eneboo-tools/eneboo-mergetool /usr/local/bin/eneboo-mergetool\n\n\nAssembler: Introducci\u00f3n\n------------------------\neneboo-assembler es una herramienta de \"collage\" de c\u00f3digo fuente. Toma como base\nunos m\u00f3dulos y les aplica una serie de parches en un orden determinado para \nconseguir un proyecto modificado de cierta forma, que cumpla ciertas especificaciones.\n\nEs una buena forma para mantener centenares de versiones distintas del mismo programa\nal d\u00eda, gestionando correctamente los cambios propios que tiene cada versi\u00f3n.\n\nAssembler: Uso\n------------------------\n\nPara empezar, necesitaremos 2 repositorios adicionales:\n\n * M\u00f3dulos Oficiales\n * Extensiones\n\nSi tenemos cuenta en github, el procedimiento est\u00e1ndar para clonar los dos repositorios es el siguiente::\n\n $ cd ~/git\n $ ssh-add\n $ git clone git@github.com:gestiweb/eneboo-modules\n $ git clone git@github.com:gestiweb/eneboo-features\n\nSi no tenemos cuenta en github, el procedimiento es::\n \n $ cd ~/git\n $ git clone git://github.com/aulla/eneboo-tools.git\n\n\nPara instalar los comandos que tenemos en eneboo-tools es suficiente con \nejecutar \"sudo make install\" desde la carpeta del proyecto.\n\nEl comando \"eneboo-assembler\" es el que usaremos normalmente para realizar las \nmezclas desde consola. Es muy sencillo y pr\u00e1ctico. \n\nEste comando tiene unas configuraciones y una base de datos de cach\u00e9. Para que \ngenere los primeros ficheros es conveniente lanzar la acci\u00f3n \"dbupdate\"::\n\n $ eneboo-assembler dbupdate\n\nCabe destacar que eneboo-assembler no depende de en qu\u00e9 carpeta lo ejecutes. \nTodas sus acciones leen los directorios de las configuraciones. Para que esto \nfuncione como debe, es necesario revisar la configuraci\u00f3n que nos \ncrea en $HOME/.eneboo-tools/assembler-config.ini\n\nEn ese fichero, que es muy sencillo de editar a mano, debemos incluir las \nrutas donde hemos puesto los m\u00f3dulos y las funcionalidades (extensiones). Se\ndeben modificar las rutas si no son las mismas en nuestro caso, o si tenemos\nrepositorios privados, se pueden agregar tambi\u00e9n. Hay que tener en cuenta que\nlas l\u00edneas de abajo toman preferencia sobre las de arriba. Se recomienda poner\nal final siempre los repositorios p\u00fablicos para que tomen preferencia.\n\nEste ser\u00eda un ejemplo de configuraci\u00f3n::\n\n [module]\n modulefolders = \n ~/git/eneboo-modules\n featurefolders = \n ~/git/eneboo-features\n buildcache = ~/.eneboo-tools/buildcache\n\nSiempre que modificamos la ruta de una extensi\u00f3n, o ponemos o quitamos \nalguna, es necesario ejecutar \"dbupdate\", que almacenar\u00e1 en cach\u00e9 d\u00f3nde \nest\u00e1n los m\u00f3dulos y extensiones. Si no lo hac\u00e9is luego os dar\u00e1 errores \nde que no encuentra las extensiones nuevas::\n\n $ eneboo-assembler dbupdate -v\n\nLas extensiones si os fij\u00e1is son carpetas con ficheros de configuraci\u00f3n y con \nlos parches para aplicar dentro. Hay un proyecto de ejemplo creado que une \ncuatro extensiones muy b\u00e1sicas. \n\nPara crear un proyecto (lo que llamamos \"compilar\") se lanza la acci\u00f3n \n\"build\" seguida del proyecto y del target. El \"target\" es qu\u00e9 es lo que se \nquiere crear, la idea es muy similar al make. El modo de empleo es::\n \n $ eneboo-assembler build [FEATURE] [TARGET]\n \n*[FEATURE]* es el nombre corto (quitando la numeraci\u00f3n) de la funcionalidad,\nes decir, para el proyecto *prj0002-standard* habr\u00eda que poner *standard*.\n\n*[TARGET]* puede tomar los valores:\n\n * **base:** \n compila las dependencias del proyecto (todo lo que \n necesitamos para poder aplicar los parches luego)\n * **final:** \n todo lo que lleva base, mas los parches que existen \n para este proyecto. (esto es lo que se env\u00eda al cliente)\n * **src:** \n una copia del target final, donde realizar los cambios \n a la extensi\u00f3n\n * **patch:** \n calcula el parche de las diferencias entre src y final. (incremental)\n * **test-patch:** \n el resultado de aplicar el parche \"patch\" sobre \n \"final\", sirve para realizar las pruebas convenientes antes de \n guardar el nuevo parche.\n * **fullpatch:** \n calcula el parche de las diferencias entre src y base. (completo)\n * **revfullpatch:** \n calcula el parche de las diferencias entre base y src. (completo)\n * **test-fullpatch:** \n el resultado de aplicar el parche \"fullpatch\" sobre \n \"base\", sirve para realizar las pruebas convenientes antes de \n guardar el nuevo parche.\n\nNovedad: Podemos usar \"revfullpatch\" para que nos calcule un parche inverso, lo\ncual desaplicar\u00eda una extensi\u00f3n a un proyecto dado.\n\nCuando compilamos algo, nos lo deja dentro de la carpeta build/ en la \ncarpeta de la extensi\u00f3n que hab\u00edamos compilado.\n\nPor ejemplo::\n\n deavid:~$ eneboo-assembler build basic base\n Borrando carpeta /home/deavid/git/eneboo-features/prj001-basic/build/base . . . \n Copiando facturacion/principal . . . \n Copiando facturacion/facturacion . . . \n Copiando contabilidad/informes . . . \n Copiando contabilidad/principal . . . \n Copiando facturacion/informes . . . \n Copiando facturacion/tesoreria . . . \n Copiando facturacion/almacen . . . \n Aplicando parche (...)oo-features/ext0224-pgc2008/patches/pgc2008 . . .\n Aplicando parche (...)res/ext0014-recibosprov/patches/recibosprov . . .\n WARN: No hemos encontrado el bloque de c\u00f3digo para las definiciones de la clase ifaceCtx, pondremos las nuevas al final del fichero.\n Aplicando parche (...)/ext0020-co_renumasiento/patches/co_renumasiento . . .\n WARN: No hemos encontrado el bloque de c\u00f3digo para las definiciones de la clase ifaceCtx, pondremos las nuevas al final del fichero.\n Aplicando parche (...)/ext0048-listadoscliprov/patches/listadoscliprov . . .\n\n deavid:~$ cd /home/deavid/git/eneboo-features/prj001-basic/build/\n deavid:~/git/eneboo-features/prj001-basic/build$ ls\n base base.build.xml\n\n deavid:~/git/eneboo-features/prj001-basic/build$ cat base.build.xml \n <BuildInstructions feature=\"prj001-basic\" target=\"base\" path=\"/home/deavid/git/eneboo-features/prj001-basic\" dstfolder=\"build/base\">\n <CopyFolderAction src=\"/home/deavid/git/eneboo-modules/facturacion/principal\" dst=\"facturacion/principal\" create_dst=\"yes\"/>\n <CopyFolderAction src=\"/home/deavid/git/eneboo-modules/facturacion/facturacion\" dst=\"facturacion/facturacion\" create_dst=\"yes\"/>\n <CopyFolderAction src=\"/home/deavid/git/eneboo-modules/contabilidad/informes\" dst=\"contabilidad/informes\" create_dst=\"yes\"/>\n <CopyFolderAction src=\"/home/deavid/git/eneboo-modules/contabilidad/principal\" dst=\"contabilidad/principal\" create_dst=\"yes\"/>\n <CopyFolderAction src=\"/home/deavid/git/eneboo-modules/facturacion/informes\" dst=\"facturacion/informes\" create_dst=\"yes\"/>\n <CopyFolderAction src=\"/home/deavid/git/eneboo-modules/facturacion/tesoreria\" dst=\"facturacion/tesoreria\" create_dst=\"yes\"/>\n <CopyFolderAction src=\"/home/deavid/git/eneboo-modules/facturacion/almacen\" dst=\"facturacion/almacen\" create_dst=\"yes\"/>\n <ApplyPatchAction src=\"/home/deavid/git/eneboo-features/ext0224-pgc2008/patches/pgc2008\"/>\n <ApplyPatchAction src=\"/home/deavid/git/eneboo-features/ext0014-recibosprov/patches/recibosprov\"/>\n <ApplyPatchAction src=\"/home/deavid/git/eneboo-features/ext0020-co_renumasiento/patches/co_renumasiento\"/>\n <ApplyPatchAction src=\"/home/deavid/git/eneboo-features/ext0048-listadoscliprov/patches/listadoscliprov\"/>\n </BuildInstructions>\n\n deavid:~/git/eneboo-features/prj001-basic/build$ find base -maxdepth 2 -type d\n base/facturacion\n base/facturacion/principal\n base/facturacion/facturacion\n base/facturacion/informes\n base/facturacion/tesoreria\n base/facturacion/almacen\n base/contabilidad\n base/contabilidad/informes\n base/contabilidad/principal\n\n\nSi os fij\u00e1is, la idea es en el futuro, \"apilar\" parches, es decir, que cuando modificamos una \nextensi\u00f3n creamos otro parche **distinto**, que tiene que ser aplicado **despu\u00e9s** \ndel original. Esto ayudar\u00e1 a que si dos personas trabajan a la vez sobre el \nmismo parche, sea mucho m\u00e1s f\u00e1cil mezclarlo. \n\nDe momento, no hay soporte para parche incremental, pues casi todos los diff y \npatch contextuales son incapaces de realizar un patch incremental (la \u00fanica\nexcepci\u00f3n es el de XML). As\u00ed que de momento s\u00f3lo se pueden guardar cambios \nreemplazando todos los anteriores (con fullpatch).\n\nPara guardar un cambio, despu\u00e9s de haberlo probado con test-fullpatch y habiendo\ncomprobado que no hemos perdido nada, se usa la acci\u00f3n \"save-fullpatch\" del siguiente\nmodo::\n\n $ eneboo-assembler save-fullpatch prj001-basic\n \nEso s\u00ed, la operaci\u00f3n **ES DESTRUCTIVA** y reemplazar\u00e1 lo que hab\u00eda antes sin que\nse pueda recuperar. No recomiento usar esto si no tenemos la carpeta bajo control\nde versiones (GIT, SVN, etc), porque en un descuido nos podemos quedar sin parche.\n\n\nA\u00fan faltan cosas b\u00e1sicas por desarrollar, como por ejemplo:\n\n * Comando \"save-patch\" para guardar los cambios realizados en un parche incremental\n * Comando \"blend-patches\" para unir todos los parches en uno solo. (excepto los N \u00faltimos) \n * Comando \"export\" para generar un tar.gz de los m\u00f3dulos (del target final)\n\n\nAssembler: Creando extensiones nuevas\n-----------------------------------------\n\nHasta hace poco para crear las extensiones nuevas que el assembler pueda leer\nhab\u00eda que crear los ficheros y carpetas a mano. Como son unas cuantas, esto era\nun tanto costoso.\n\nPara facilitar las cosas hemos creado una acci\u00f3n \"new\" que contiene un asistente\nque realizar\u00e1 las preguntas necesarias y luego escribir\u00e1 en disco la extensi\u00f3n.\n\nSi se ejecuta sin argumentos, preguntar\u00e1 los datos m\u00ednimos para crear la plantilla::\n\n $ eneboo-assembler new\n\n Qu\u00e9 tipo de funcionalidad va a crear?\n ext) extensi\u00f3n\n prj) proyecto\n set) conjunto de extensiones\n Seleccione una opci\u00f3n: ext\n\n C\u00f3digo para la nueva funcionalidad: A002\n\n Nombre corto de funcionalidad: mifun02\n\n Descripci\u00f3n de la funcionalidad: Funcionalidad 02 \n \nSi se le pasa el nombre de la carpeta y la descripci\u00f3n, omite los pasos \niniciales y pasa directamente al men\u00fa::\n \n $ eneboo-assembler new extA003-mifun03 \"Funcionalidad 03\" \n \nAparecer\u00e1 el men\u00fa principal como se muestra a continuaci\u00f3n::\n\n **** Asistente de creaci\u00f3n de nueva funcionalidad ****\n\n : Carpeta destino : /home/david/git/eneboo-features/extA003-mifun03\n : Nombre : extensi\u00f3n - A003 - mifun03 \n : Descripci\u00f3n : Funcionalidad 03 \n\n : Dependencias : 0 m\u00f3dulos, 0 funcionalidades\n : Importar Parche : None\n\n -- Men\u00fa de opciones generales --\n c) Cambiar datos b\u00e1sicos\n d) Dependencias\n i) Importar parche\n e) Eliminar parche\n a) Aceptar y crear\n q) Cancelar y Salir\n Seleccione una opci\u00f3n: \n\n\nLa opci\u00f3n *d) Dependencias* sirve para a\u00f1adir m\u00f3dulos y funcionalidades. Una vez dentro del men\u00fa de dependencias, para facilitar la tarea de agregado podemos utilizar caracteres comod\u00edn. Por ejemplo, si introducimos \"flfact*\" y pulsamos tabulador, pondr\u00e1 todos los m\u00f3dulos que empiecen por \"flfact\".\n\nEn el caso de las rutas, tambi\u00e9n existe autocompletado con el sistema de ficheros, que se activa con la tecla de tabulador.\n\nPor defecto las extensiones se crean en la primera carpeta de extensiones que\nhaya en la configuraci\u00f3n, se puede cambiar la carpeta de destino en una opci\u00f3n del\nmen\u00fa.\n\nMergeTool: Introducci\u00f3n\n------------------------\neneboo-mergetool es una herramienta orientada a calcular diferencias entre ficheros\ny a aplicarlas en diferentes contextos. Generalmente siempre se le proveer\u00e1 de\nla ruta exacta a los ficheros y carpetas. Esta herramienta se usa internamente por\neneboo-assembler, aunque puede ser conveniente usarla en determinados casos donde\nel assembler no cubre el uso exacto que queremos darle.\n\nMergeTool: Uso\n-------------------\n\nPara sacar una ayuda y listado de acciones::\n\n $ eneboo-mergetool --help\n\n\nPara sacar m\u00e1s ayuda de una acci\u00f3n::\n\n $ eneboo-mergetool --help nombre-accion\n\n\nMergeTool: Acciones disponibles\n---------------------------------\n\n**Utilidades para carpetas:**\n\n*folder-diff* lee dos carpetas recursivamente y obtiene una diferencia. A partir\nde esta diferencia, genera una colecci\u00f3n de parches en una tercera carpeta.\n\n*folder-patch* lee una carpeta de parches (flpatch) y una carpeta de ficheros\noriginales. Aplica los parches en a estos ficheros y el resultado se guarda en \nuna tercera carpeta.\n \n**Utilidades para ficheros individuales:**\n\n*file-diff* muestra la diferencia entre dos ficheros por la salida est\u00e1ndar o a \nun fichero especificado por --output-file. Tiene un argumento de modo que \ncondiciona el tipo de algoritmo que ser\u00e1 lanzado para comparar los ficheros.\nEst\u00e1n soportados *qs* y *xml*.\n \n*file-patch* muestra el resultado de aplicar un parche a un fichero por la salida\nest\u00e1ndar o guarda el resultado en el fichero indicado por --output-file. Tiene\nun argumento de modo que condiciona el algoritmo que se lanza para aplicar el \nparche. Est\u00e1n soportados *qs* y *xml*.\n\n*file-check* realiza comprobaciones rutinarias sobre el fichero dado. Actualmente\ns\u00f3lo est\u00e1 soportado el modo *qs-classes*, que comprobar\u00e1 la correcta herencia de\n\u00e9stas.\n \n*qs-extract* es una utilidad para extraer clases que se especifiquen de un \nfichero qs directamente, sin necesidad de comparar con otro fichero.\n\n\nMergeTool: FOLDER DIFF\n-----------------------------------\n\nExtrae las modificaciones realizadas en un proyecto y guarda una carpeta \nde parche.\n\nPara trabajar con esta herramienta, debemos contar con dos carpetas. Una \ncontendr\u00e1 un backup del proyecto antes de realizar los cambios y la otra ser\u00e1\ndonde hayamos realizado nuestras modificaciones. Llamamos *basedir* a la carpeta\nde backup y *finaldir* a la carpeta donde est\u00e1n los cambios realizados.\n\nEsta herramienta crear\u00e1 una carpeta (que no debe existir antes) y dejar\u00e1 dentro\ntodas las diferencias encontradas, as\u00ed como las instrucciones de aplicaci\u00f3n.\n\nVeamos un ejemplo::\n\n $ eneboo-mergetool folder-diff parches/mi_parche \\\n proyecto1_original/ proyecto1_modificado/\n \nEsto crear\u00eda la carpeta *parches/mi_parche* y contendr\u00eda las instrucciones para\ngenerar *proyecto1_modificado* a partir del *proyecto1_original*.\n\n\nMergeTool: FOLDER PATCH\n-----------------------------------\n\nLee una carpeta de parche y aplica las modificaciones en el proyecto generando\nuna carpeta nueva.\n\nPara trabajar con esta herramienta, debemos contar con dos carpetas. Una \ncontendr\u00e1 proyecto a aplicar los cambios y la otra ser\u00e1 donde hayamos guardado\nel parche. Llamamos *basedir* a la carpeta del proyecto original y *patchdir* \na la carpeta donde est\u00e1n guardados los parches.\n\nEsta herramienta crear\u00e1 una carpeta (que no debe existir antes) y dejar\u00e1 dentro\nel nuevo proyecto que ser\u00e1 el resultado de la aplicaci\u00f3n de los parches.\n\nVeamos un ejemplo::\n\n $ eneboo-mergetool folder-patch parches/mi_parche \\\n proyecto1_original/ proyecto1_parcheado/\n \nEsto crear\u00eda la carpeta *proyecto1_parcheado/* y contendr\u00eda *proyecto1_original/*\npero con los parches aplicados. El fichero XML del parche debe encontrarse en la\ncarpeta *mi_parche*.\n\n\n\nMergeTool: DIFF QS\n----------------------\n\nObtener diff de un fichero QS::\n\n $ eneboo-mergetool file-diff qs \\\n antiguo/facturacion/facturacion/scripts/flfactalma.qs \\\n nuevo/facturacion/facturacion/scripts/flfactalma.qs \\\n --output-file patches/flfactalma.qs\n\n\nAplicar un diff de fichero QS::\n\n $ eneboo-mergetool file-patch qs \\\n antiguo/facturacion/facturacion/scripts/flfactalma.qs \\\n patches/flfactalma.qs \\\n --output-file antiguo/facturacion/facturacion/scripts/flfactalma.patched.qs\n\n\n\nMergeTool: DIFF XML\n---------------------\n\nObtener diff de un fichero XML::\n\n $ eneboo-mergetool file-diff xml \\\n antiguo/facturacion/facturacion/forms/flfactalma.ui \\\n nuevo/facturacion/facturacion/forms/flfactalma.ui \\\n --output-file patches/flfactalma.ui\n\nAplicar un diff de fichero XML::\n\n $ eneboo-mergetool file-patch qs \\\n antiguo/facturacion/facturacion/forms/flfactalma.ui \\\n patches/flfactalma.ui \\\n --output-file antiguo/facturacion/facturacion/scripts/flfactalma.patched.ui\n\n\nMergeTool: FILE CHECK\n-----------------------\n\nEs posible comprobar los ficheros con eneboo-mergetool. Esta comprobaci\u00f3n se limita \n(hasta ahora) a los ficheros QS y a una comprobaci\u00f3n sobre los bloques y las clases.\n\nAdem\u00e1s es posible generar un fichero de \"parche\" para corregir los fallos t\u00edpicos en\nla creaci\u00f3n de bloques class_declaration y definition::\n\n $ for i in $(find . -iname '*.qs'); do eneboo-mergetool file-check qs-classes $i --patch-dest mypatch -v; done\n $ patch -p1 < mypatch\n \n\nPackager\n-----------------------------\n\nEsta herramienta permite empaquetar c\u00f3digo eneboo en un s\u00f3lo fichero .eneboopkg. Este tipo de ficheros presentan varias ventajas frente al c\u00f3digo tradicional ordenado en carpetas de m\u00f3dulos, a saber:\n\n- Se pueden importar de forma c\u00f3moda desde la opci\u00f3n *Sistema > Administraci\u00f3n > Cargar Paquete de M\u00f3dulos* de eneboo.\n- Ocupan menos, ya que el c\u00f3digo est\u00e1 comprimido.\n- Son m\u00e1s f\u00e1ciles de trasladar y descargar.\n\nPara empaquetar un directorio que contenga c\u00f3digo eneboo podemos usar::\n\n $ eneboo-packager create ruta_directorio_codigo -v\n \nPara conocer todas las opciones de la herramienta::\n \n $ eneboo-packager --help\n\n\n\n",
"bugtrack_url": null,
"license": "",
"summary": "ERP tools for Eneboo",
"version": "2.2.1",
"project_urls": {
"Homepage": "https://github.com/aulla/eneboo-tools"
},
"split_keywords": [
"erp",
"pineboo",
"eneboo",
"tools"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "192d269cd31922ca22b17e2d33b1c48f346f8de4723a5109590a3c417e9733f9",
"md5": "1b7edcdad521f2aaa2c8261d618f7c85",
"sha256": "4e9b8b1748d336618bc33aebca58161b8d45e59aedcee7c9861fdcdf1e0ae674"
},
"downloads": -1,
"filename": "enebootools-2.2.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1b7edcdad521f2aaa2c8261d618f7c85",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6.9",
"size": 253355,
"upload_time": "2024-01-25T06:32:04",
"upload_time_iso_8601": "2024-01-25T06:32:04.655375Z",
"url": "https://files.pythonhosted.org/packages/19/2d/269cd31922ca22b17e2d33b1c48f346f8de4723a5109590a3c417e9733f9/enebootools-2.2.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5c799b214fb2022e2c253dd970e613e5489b79eca32b08018981fb0e030fa550",
"md5": "23ee4a3e76321efcff21cda040e65d83",
"sha256": "15a6d03614de7d4f2da25e8a48db8011e12b8d495654a321ee916ea17c13b8de"
},
"downloads": -1,
"filename": "enebootools-2.2.1.tar.gz",
"has_sig": false,
"md5_digest": "23ee4a3e76321efcff21cda040e65d83",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6.9",
"size": 237012,
"upload_time": "2024-01-25T06:32:07",
"upload_time_iso_8601": "2024-01-25T06:32:07.976637Z",
"url": "https://files.pythonhosted.org/packages/5c/79/9b214fb2022e2c253dd970e613e5489b79eca32b08018981fb0e030fa550/enebootools-2.2.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-25 06:32:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aulla",
"github_project": "eneboo-tools",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "enebootools"
}