close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Changes between Version 24 and Version 25 of TolPackageRulesAndComments


Ignore:
Timestamp:
Oct 18, 2010, 5:28:59 PM (14 years ago)
Author:
Víctor de Buen Remiro
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TolPackageRulesAndComments

    v24 v25  
    3333de los problemas que pueden resolver.
    3434
    35 == Arquitectura ==
    36 
    37 Un paquete es un tipo de NameBlock especial que se carga con la orden
     35== Uso básico de paquetes ==
     36
     37Un paquete es un caso de NameBlock especial que se carga con la orden
    3838{{{
    3939  #Require nombre_de_paquete;
     
    4242directorio local predeterminado por el sistema al que llamaremos almacén
    4343del cliente y que es común para todas las instalaciones de TOL que haya
    44 en una misma máquina.
     44en una misma máquina y ubicado en {{{Text TolPackage::Client::_.localRoot}}}.
     45
     46La orden de requerimiento {{{#Require}}} es muy diferente a las órdenes
     47de inclusión {{{Include}}} e incrustación {{{Embed}}} por estos motivos
     48fundamentales:
     49
     50 * No hay que dar el camino del archivo TOL sino el nombre del paquete
     51 * No hay que poner el nombre entre comillas
     52 * El NameBlock cargado es siempre global se llame desde donde se llame
     53 * No es posible deshacer un requerimiento: el paquete permanecerá
     54   disponible durante toda la sesión
    4555
    4656Un repositorio es un sitio web o un directorio local al que llamaremos
    4757también almacén servidor, donde se encuentra disponible una colección de
    4858paquetes ya preparados para que los usuarios puedan descargarlos a su
    49 almacén de cliente.
     59almacén de cliente. Los paquetes se encuentran comprimidos en el
     60repositorio remoto mientras que en el almacén del cliente se encuentran
     61los directorios descomprimidos para no perder tiempo en descomprimirlos
     62cada vez.
     63
     64=== El gestor de paquetes ===
     65
     66El gestor de paquetes TOL es el {{{NameBlock TolPakage}}}
    5067
    5168Los paquetes disponibles en repositorios remotos o locales se instalan,
     
    5673{{{StdLib::TolPackage::Server}}}
    5774
    58 == Creación y uso de paquetes ==
     75=== Uso on-line de paquetes ===
     76
     77La propia orden {{{#Require}}} se encargará de descargar e instalar los
     78paquetes que no se encuentren disponibles localmente revisando la lista
     79de directorios apuntada por
     80{{{
     81#!cpp
     82  Set TolConfigManager::Config::Upgrading::TolPackage::Repositories
     83}}}
     84
     85Por defecto, esta lista sólo contiene el [wiki:OfficialTolArchiveNetwork
     86repositorio oficial de bayes] pero es posible añadir otros mediante
     87{{{
     88  Real TolPackage::Client::AddRepository(Text url)
     89}}}
     90
     91=== Uso off-line de paquetes ===
     92
     93Para el uso off-line de los paquetes en una máquina sin acceso remoto es
     94necesario instalar manualmente los paquetes. Para ello lo más sencillo es
     95instalarlos en una máquina que sí tenga acceso y luego copiar el directorio
     96{{{Text TolPackage::Client::_.localRoot}}} a la máquina aislada mediante
     97algún tipo de disco o unidad flash.
     98
     99Para evitar que el sistema pierda tiempo intentando conectarse es
     100recomendable cambiar la configuración local de TOL
     101{{{
     102#!cpp
     103  Real TolConfigManager::Config::Upgrading::TolVersion::CheckAllowed:= False;
     104  Real TolConfigManager::Config::Upgrading::TolPackage::LocalOnly := False;
     105  Real TolConfigManager::SaveConfig(TolConfigManager::Config);
     106}}}
     107
     108
     109== Creación de paquetes ==
    59110 
    60111Un paquete se crea como un NameBlock pero con una serie de restricciones de
     
    70121 * Los miembros obligatorios del NameBlock de un paquete son: [[BR]]
    71122   {{{
     123#!cpp
    72124  Text _.autodoc.name = "NombreDelPaquete";
    73125  Text _.autodoc.brief = "Descripción cortísima en una línea";
     
    82134   }}}
    83135 * Cuando un paquete requiera para su ejecución de recursos ajenos a TOL será
    84    necesario añadir un nuevo miembro que será un conjunto de conjuntos de
    85    caminos a los directorios raíces de cada uno de los recursos. Los que sean
    86    independientes de la plataforma se pueden poner en un elemento
    87    {{{crossPlatform}}} y los que sí dependan en uno con el nombre de la
    88    plataforma. Los nombres de los recursos han de ser únicos dentro de cada
    89    plataforma específica y serán lógicamente los mismos en todas ellas, pues
    90    los recursos deberían estar disponibles en cualquiera de ellas, aunque podría
    91    haber excepciones si no se encuentra la forma de implementarlo en alguna.
    92    Los recursos multi-plataforma deben tener nombres únicos distintos de los de
    93    las específicas pues en el almacén de cliente convivirán con ellos en un
    94    mismo directorio. [[BR]]
     136   necesario añadir un nuevo miembro que será un conjunto de textos con los 
     137   caminos, obligatoriamente relativos e internos al paquete, de los directorios
     138   raíces de cada uno de los recursos. Los que sean dependientes de la plataforma
     139   deben tener una entrada distinta para cada una de forma que luego sea posible
     140   cargar lo necesario. Todos los recursos así definidos pasarán a formar parte
     141   del directorio del paquete [[BR]]
    95142   {{{
     143#!cpp
    96144  Set _.autodoc.nonTolResources = { [[
    97     Set crossPlatform = { [[
    98        Text resource_cross_1="./....",
    99        Text resource_cross_2="./....",
    100        ... ]] },
    101     Set win32_x86 =  { [[
    102        Text resource_1="./....",
    103        Text resource_2="./....",
    104        ... ]] },
    105     Set linux_x86 =  { [[
    106        Text resource_1="./....",
    107        Text resource_2="./....",
    108        ... ]] },
     145    Text "./resource_1",
     146    Text "./resource_2",
     147    Text "./resource_3/Linux_x86_32",
     148    Text "./resource_3/Windows_x86_32",
    109149    ...
    110150  ]] };
    111151   }}}
     152
     153=== Construcción del archivo comprimido ===
     154
     155Si sólo se quiere construir el archivo .zip correspondiente a un paquete basta con llamar a
     156{{{
     157#!cpp
     158//////////////////////////////////////////////////////////////////////////////
     159Text TolPackage::Server::BuildPackage(
     160  Text name,         //Nombre del paquete (sin versión)
     161  Text sourceRoot,   //Directorio raíz del código fuente
     162  Text destination,  //Directorio de destino del paquete
     163  Real removeDir)    //Si es cierto se borra el directorio descomprimido
     164"Construye el archivo comprimido correspondiente a un paquete TOL a partir "
     165"del código situado en el directorio fuente:\n"
     166"  \"<sourceRoot>/<name>\"\n"
     167"\n"
     168"El resultado se almacena en el directorio de destino con el nombre de "
     169"la versión específica que conste en el NameBlock del paquete:"
     170"\n"
     171"  \"<destination>/<name>.<high>.<low>.zip\"\n"
     172"\n";
     173//////////////////////////////////////////////////////////////////////////////
     174}}}
     175
     176Para hacer una instalación manual directa basta con pasarle
     177{{{
     178#!cpp
     179Text destination = TolPackage::Client::_.localRoot,
     180Real removeDir   = False
     181}}}
     182
     183Si no se quiere interferir con la instalación local es mejor pasarle
     184{{{
     185#!cpp
     186Text destination = TolPackage::Server::_.localRoot,
     187Real removeDir   = True
     188}}}
     189
     190=== Publicación de paquetes ===
     191
     192Para subir un paquete ya comprimido previamente con {{{TolPackage::Server::BuildPackage}}} se usará
     193{{{
     194#!cpp
     195//////////////////////////////////////////////////////////////////////////////
     196Real TolPackage::Server::UploadPackage(NameBlock dbConnect, Text pkg.path.zip)
     197"Sube al repositorio remoto un paquete desde el archivo local comprimido "
     198"creado con TolPackage::Server::BuildPackage y dado por el argumento:\n"
     199"  Text pkg.path.zip = \"<directory>/<name>.<high>.<low>.zip\"\n";
     200//////////////////////////////////////////////////////////////////////////////
     201}}}
     202
     203=== Construcción y publicación de paquetes en un solo paso ===
     204La manera más sencilla de subir un paquete es mediante la función
     205{{{
     206#!cpp
     207//////////////////////////////////////////////////////////////////////////////
     208Real BuildAndUploadPackage(
     209  Text name,                //Nombre del paquete (sin versión)
     210  Text sourceRoot,          //Directorio raíz del código fuente
     211  Text repository.url,      //URL del repositorio
     212  NameBlock repository.db,  //Conexión a la base de datos
     213  Text checkInstallMode)    //Modo de chequeo de la instalación
     214"Construye el archivo comprimido correspondiente a un paquete TOL a partir "
     215"del código situado en el directorio fuente:\n"
     216"  \"<sourceRoot>/<name>\"\n"
     217"\n"
     218"y luego lo sube al repositorio remoto.\n"
     219"La copia temporal del archivo comprimido del paquete se queda en el "
     220"directorio del servidor a efectos de depuración si surgen problemas "
     221"pero se puede borrar si se desea.\n"
     222"Por último se chequeará la instalación según lo indicado:"
     223" Si checkInstallMode = \"local\" se usa la copia local comprimida.\n"
     224" Si checkInstallMode = \"remote\" se instala desde el repositorio.\n"
     225" En otro caso no se instala nada.";
     226//////////////////////////////////////////////////////////////////////////////
     227}}}
     228que internamente llama a {{{TolPackage::Server::BuildPackage}}} y
     229{{{TolPackage::Server::UploadPackage}}} y luego chequea opcionalmente si
     230funciona la instalación.
     231
    112232
    113233=== Control de versiones ===