Ticket #1191 (closed enhancement: fixed)

Opened 3 years ago

Last modified 2 years ago

A Graphical Interface for Managing Packages

Reported by: pgea Owned by: josp
Priority: highest Milestone: TOLBase Revitalization
Component: Interface Version: head
Severity: critical Keywords:
Cc:

Description

Se solicita una interfaz gráfica para la gestión de paquetes en TOL que permita:

  • Gestionar los repositorios definidos: añadir un nuevo repositorio o quitarlo, comprobar la disponibilidad o acceso a los repositorios definidos.
  • Explorar el árbol de paquetes disponibles para su instalación desde cada repositorio y facilitar la instalación de paquetes.
  • Explorar el conjunto de paquetes instalados, comprobar los distintos estados de un paquete: actualizado, actualizable (upgrade o update) y actualizarlos.
  • Instalación de un paquete desde un archivo ZIP.
  • Otras tareas de mantenimiento

Attachments

Repos_GUI_r00.png (16.6 kB) - added by josp 2 years ago.
Pkgs_GUI_r00.png (54.1 kB) - added by josp 2 years ago.

Change History

Changed 3 years ago by josp

  • status changed from new to accepted

Changed 3 years ago by josp

Se requieren funcionalidades para:

  • Obtener repositorios registrados: GetKnownRepositories
  • Registrar un repositorio: AddRepository
  • Obtener lista de paquetes disponibles en un repositorio.
  • Obtener versiones disponibles de un paquete en un repositorio.
  • Obtener la lista de paquetes instalados.
  • Conocer de un paquete instalado la fuente de instalación
  • Borrar un paquete instalado posiblemente incluyendo dependencias
  • Limpiar todos los paquetes instalados
  • Upgrade de un paquete
  • Update de un paquete ...

Changed 3 years ago by vdebuen

Antes de nada hay que resaltar que al principio de la sesión y tras cada operación que pueda suponer cambios locales, hay que actualizar la información sobre el repositorio local mediante las sentencias

Real TolPackage::Client::RemoteUpdatePackSyncInfo(False);
Real TolPackage::Client::RemoteUpdateVersSyncInfo(False);

Ahora mismo sería posible hacer todas las peticiones usando funciones y objetos del sistema tal y como se detalla a continuación:

  • Obtener repositorios registrados:
      Set TolConfigManager::Config::Upgrading::TolPackage::Repositories;
    
  • Registrar un repositorio:
      Real TolPackage::Client::AddRepository(Text url);
    
  • Obtener lista de paquetes disponibles en un repositorio. Ejemplo:
    Set Select(TolPackage::Client::_.packSyncInfo, Real(Set pkg)
    {
      pkg->te_url=="http://packages.tol-project.org/OfficialTolArchiveNetwork/repository.php"
    })
    
  • Obtener versiones disponibles de un paquete (no hace falta especificar el repositorio porque sólo puede estar en uno). Ejemplo:
    Set Select(TolPackage::Client::_.versSyncInfo, Real(Set pkg)
    {
      pkg->co_name=="NonLinGloOpt"
    })
    
  • Obtener la lista de paquetes instalados.
    Set TolPackage::Client::_.packInstalled;
    
  • Conocer de un paquete instalado la fuente de instalación
    Text (TolPackage::Client::_.packInstalled::NonLinGloOpt)->te_url;
    
  • Borrar un paquete instalado (no se pueden borrar las dependencias porque puedes romper las de otros paquetes instalados que coincidan en alguna)
      Real TolPackage::Client::LocalClean(package);
    
  • Limpiar todos los paquetes instalados
      Real TolPackage::Client::LocalClean.All("");
    
  • Upgrade de un paquete
    {
      TolPackage::@PackageSynchro pkg = (TolPackage::Client::_.packSyncInfo)["NonLinGloOpt"];
      Real TolPackage::Client::RemoteInstallPackage(pkg->te_url, pkg->co_last_version_remote, True)
    }
    
  • Update de un paquete
    {
      TolPackage::@PackageSynchro pkg = (TolPackage::Client::_.packSyncInfo)["NonLinGloOpt"];
      Real TolPackage::Client::RemoteInstallPackage(pkg->te_url, pkg->co_last_version_local, True)
    }
    

No tengo claro que haga falta crear funciones específicas para cada cosa que haga falta en el interfaz, que seguro que saldrán más y cada una con su API ad-hoc.

A no ser que realmente no haya una combinación de llamadas que sean capaces de dar el resultado requerido yo usaría las funcionalidades básicas que dan mayor potencia que una batería de funciones dedicadas, sobre todo teniendo en cuenta el lío de versiones de TOL que podemos montar.

Changed 3 years ago by vdebuen

Más variaciones de consultas sobre información de paquetes.

  • Para obtener versiones instaladas de un paquete sólo hay que tener en cuenta que si el campo @VersionSynchro->dh_release_date_local es TheBegin es que la versión no está instalada. Ejemplo:
    Set Select(TolPackage::Client::_.versSyncInfo, Real(Set pkg)
    {
      And(pkg->co_name=="MMS", pkg->dh_release_date_local>TheBegin)
    });
    
  • Para obtener información detallada sobre un repositorio
    Set TolPackage::Client::GetRepositoryInfo(
    "http://packages.tol-project.org/OfficialTolArchiveNetwork/repository.php?action=general_information");
    
    //Returns a set like this
    [[
      Text name = "OfficialTolArchiveNetwork"; 
      Text type = "Public"; 
      Text description = "Official TOL Archive Network contains public open source packages developed or aproved by TOL Developping Team at local repository"; 
      Set contact = [["vdebuen@tol-project.org", "josp@tol-project.org", "pgea@bayesforecast.com"]]
    ]]; 
    
    

Changed 2 years ago by josp

Changed 2 years ago by josp

Changed 2 years ago by josp

Lo siquiente se refiere a las fotos:
Gestión de repositorios:

  • Siempre ha de existir al menos un repositorio para que las cosas anden, quizá OTAN podría considerarse de "sólo lectura".
  • Sería interesante poder desplegar el árbol de paquetes y versiones disponible en cada repositorio, descripción, versiones, dependencias, etc.
  • Debería poder pedir instalar con un clic un paquete (la versión que yo quiera) y pedir la instalación individual o la instalación encadenada de todas sus dependencias.
  • Debería poder, al igual que pido la instalación individual o "encadenada", descargar (sin instalar) un zip individual o el zip de un conjunto de paquetes encadenados (zip-múltiple).
  • Debería poder desactivarse el uso de los repositorios. Por ejemplo, en el caso de un ordenador off-line no aparecería ninguna información de paquetes no instalados y tampoco debería intentar encontrar esa información.

Gestión de paquetes instalados:

  • Quitaría del listado los paquetes no instalados, o al menos por defecto no los mostraría.
  • Permitiría instalar un paquete desde un zip o un conjunto de paqutes de un zip multiple.
  • Distinguiría la desactualización por upgrade (naranja) y por update (rojo, ya que la actualización por update es crítica). Si dejara los no instalados los marcaría en gris.
  • Mostraría en forma de árbol todas las versiones del paquete coloreando del siguiente modo:
       - Paquete (según la última versión existente)
       --- Paquete.2 (naranja: necesita update, por ejemplo existe Paquete.2.4)
       ----- Paquete.2.3 (¿naranja/rojo?)
       ----- Paquete.2.2 (naranja/rojo)
       ----- Paquete.2.1 (naranja/rojo)
       --- Paquete.1 (verde: 1.8 es la ultima versión)
       ----- Paquete.1.8
       ----- Paquete.1.6 (rojo: necesita upgrade, existe otro 1.6 más actual)
       ----- Paquete.1.1
    
  • Botón de "Crear informe de versiones" que crear una lista con todas las versiones de todo lo instalado (y ya de camino también de tolbase) para poder enviarla para depuración de errores. Especialmente útil para los ordenadores off-line.

Changed 2 years ago by pgea

Sería muy útil incorporar un mecanismo para visualizar todo el árbol de dependencias de un paquete para comprobar su estado de actualización e incluso actualizarlo.

Changed 2 years ago by josp

(In [3926]) refs #1191, implementing the GUI of TolPackage

Changed 2 years ago by josp

(In [3928]) refs #1191, implementing contextual menu ...

Changed 2 years ago by josp

(In [3932]) refs #1191, implementing contextual menu ...

Changed 2 years ago by josp

(In [3933]) refs #1191, packages can be exported also from remote repository

Changed 2 years ago by josp

En windows no se muestran todas las dependencias, solo una.

Changed 2 years ago by josp

(In [3976]) refs #1191, implementando acciones del interfaz, queda pendiente:

  • errores en el estado "outdated", depende del info.oza
  • update all
  • upgrade all
  • export all
  • export sync
  • import sync

Changed 2 years ago by josp

(In [4000]) refs #1191, avisamos de las opciones no implementadas todavía

Changed 2 years ago by josp

(In [4005]) refs #1191, limpiamos el paquete antes de instalar para que info.oza se actualice correctamente, se crea un backup que se restaura en caso de error

Changed 2 years ago by josp

(In [4006]) refs #1191, se implementa UpdateAll y UpgradeAll

Changed 2 years ago by josp

(In [4053]) refs #1191,

  • el backup a veces falla en windows 7, lo hemos deshabilitado
  • el arbol se refrezca después de install/upgrade/update

Changed 2 years ago by josp

(In [4054]) refs #1191, se corrige un error en el empaquetado de -customgui y el título de la ventana de diálogo de proceso de tareas de instalación

Changed 2 years ago by josp

(In [4104]) refs #1191, se sincroniza con los servidores al abrir la ventana y también después de cada operación que lo requiera.

Changed 2 years ago by josp

  • status changed from accepted to closed
  • resolution set to fixed

Las mejoras y correcciones con este interfaz se tratarán en tickets separados.

Changed 2 years ago by vdebuen

(In [4272]) Refs #1191
Removing tol_version from DownloadCompatibleDeepDependencies and all related functions.
You need use the same version of TOL that destination machine.
New method PackagePrefix to allow TextBeginWith comparissons

Changed 2 years ago by vdebuen

(In [4273]) Refs #1191
Removing tol_version from DownloadCompatibleDeepDependencies and all related functions.
You need use the same version of TOL that destination machine.
New method PackagePrefix to allow TextBeginWith comparissons

Note: See TracTickets for help on using tickets.