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.

Opened 14 years ago

Closed 13 years ago

Last modified 13 years ago

#1191 closed enhancement (fixed)

A Graphical Interface for Managing Packages

Reported by: Pedro Gea Owned by: Jorge
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 (2)

Repos_GUI_r00.png (16.6 KB) - added by Jorge 13 years ago.
Pkgs_GUI_r00.png (54.1 KB) - added by Jorge 13 years ago.

Download all attachments as: .zip

Change History (23)

comment:1 Changed 14 years ago by Jorge

Status: newaccepted

comment:2 Changed 14 years ago by Jorge

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

comment:3 Changed 14 years ago by Víctor de Buen Remiro

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.

comment:4 Changed 14 years ago by Víctor de Buen Remiro

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 13 years ago by Jorge

Attachment: Repos_GUI_r00.png added

Changed 13 years ago by Jorge

Attachment: Pkgs_GUI_r00.png added

comment:5 Changed 13 years ago by Jorge

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.

comment:6 Changed 13 years ago by Pedro Gea

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.

comment:7 Changed 13 years ago by Jorge

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

comment:8 Changed 13 years ago by Jorge

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

comment:9 Changed 13 years ago by Jorge

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

comment:10 Changed 13 years ago by Jorge

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

comment:11 Changed 13 years ago by Jorge

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

comment:12 Changed 13 years ago by Jorge

(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

comment:13 Changed 13 years ago by Jorge

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

comment:14 Changed 13 years ago by Jorge

(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

comment:15 Changed 13 years ago by Jorge

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

comment:16 Changed 13 years ago by Jorge

(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

comment:17 Changed 13 years ago by Jorge

(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

comment:18 Changed 13 years ago by Jorge

(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.

comment:19 Changed 13 years ago by Jorge

Resolution: fixed
Status: acceptedclosed

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

comment:20 Changed 13 years ago by Víctor de Buen Remiro

(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

comment:21 Changed 13 years ago by Víctor de Buen Remiro

(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.