[improvement][arch] new 'automatch_providers' settings

This commit is contained in:
Vinicius Moreira
2020-06-02 17:54:08 -03:00
parent b93fb63430
commit 157ec0e2c6
15 changed files with 65 additions and 12 deletions

View File

@@ -7,9 +7,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [0.9.5] 2020
### Improvements
- Arch
- new **automatch_providers** settings: bauh will automatically choose which provider will be used for a package dependency when both names are equal.
<p align="center">
<img src="https://raw.githubusercontent.com/vinifmor/bauh/staging/pictures/releases/0.9.5/arch_providers.png">
</p>
- minor UI improvements
- download clients parameters
### Fixes
- regressions (from **0.9.4**)
- resetting the main configuration when tray mode is active [#118](https://github.com/vinifmor/bauh/issues/118)

View File

@@ -183,6 +183,7 @@ mirrors_sort_limit: 5 # defines the maximum number of mirrors that will be used
aur: true # allows to manage AUR packages
repositories: true # allows to manage packages from the configured repositories
repositories_mthread_download: true # enable multi-threaded download for repository packages if aria2 is installed
automatch_providers: true # if a possible provider for a given package dependency exactly matches its name, it will be chosen instead of asking for the user to decide (false).
```
- Required dependencies:
- **pacman**

View File

@@ -11,5 +11,6 @@ def read_config(update_file: bool = False) -> dict:
"refresh_mirrors_startup": False,
"sync_databases_startup": True,
'mirrors_sort_limit': 5,
'repositories_mthread_download': True}
'repositories_mthread_download': True,
'automatch_providers': True}
return read(CONFIG_FILE, template, update_file=update_file)

View File

@@ -1514,6 +1514,7 @@ class ArchManager(SoftwareManager):
sort=True,
remote_provided_map=context.get_remote_provided_map(),
remote_repo_map=context.get_remote_repo_map(),
automatch_providers=context.config['automatch_providers'],
watcher=context.watcher)
tf = time.time()
@@ -1615,6 +1616,7 @@ class ArchManager(SoftwareManager):
watcher=context.watcher,
remote_provided_map=remote_provided_map,
remote_repo_map=remote_repo_map,
automatch_providers=context.config['automatch_providers'],
sort=False)
if missing_deps is None:
@@ -2122,6 +2124,11 @@ class ArchManager(SoftwareManager):
tooltip_key='arch.config.optimize.tip',
value=bool(local_config['optimize']),
max_width=max_width),
self._gen_bool_selector(id_='autoprovs',
label_key='arch.config.automatch_providers',
tooltip_key='arch.config.automatch_providers.tip',
value=bool(local_config['automatch_providers']),
max_width=max_width),
self._gen_bool_selector(id_='mthread_download',
label_key='arch.config.pacman_mthread_download',
tooltip_key='arch.config.pacman_mthread_download.tip',
@@ -2167,6 +2174,7 @@ class ArchManager(SoftwareManager):
config['refresh_mirrors_startup'] = form_install.get_component('ref_mirs').get_selected()
config['mirrors_sort_limit'] = form_install.get_component('mirrors_sort_limit').get_int_value()
config['repositories_mthread_download'] = form_install.get_component('mthread_download').get_selected()
config['automatch_providers'] = form_install.get_component('autoprovs').get_selected()
try:
save_config(config, CONFIG_FILE)

View File

@@ -178,7 +178,8 @@ class DependenciesAnalyser:
def _fill_missing_dep(self, dep_name: str, dep_exp: str, aur_index: Iterable[str],
missing_deps: Set[Tuple[str, str]],
remote_provided_map: Dict[str, Set[str]], remote_repo_map: Dict[str, str],
repo_deps: Set[str], aur_deps: Set[str], deps_data: Dict[str, dict], watcher: ProcessWatcher):
repo_deps: Set[str], aur_deps: Set[str], deps_data: Dict[str, dict], watcher: ProcessWatcher,
automatch_providers: bool):
if dep_name == dep_exp:
providers = remote_provided_map.get(dep_name)
@@ -222,7 +223,16 @@ class DependenciesAnalyser:
if providers:
if len(providers) > 1:
dep_data = (dep_name, '__several__')
dep_data = None
if automatch_providers:
exact_matches = [p for p in providers if p == dep_name]
if exact_matches:
dep_data = (exact_matches[0], remote_repo_map.get(exact_matches[0]))
if not dep_data:
dep_data = (dep_name, '__several__')
else:
real_name = providers.pop()
dep_data = (real_name, remote_repo_map.get(real_name))
@@ -246,7 +256,8 @@ class DependenciesAnalyser:
def map_missing_deps(self, pkgs_data: Dict[str, dict], provided_map: Dict[str, Set[str]],
remote_provided_map: Dict[str, Set[str]], remote_repo_map: Dict[str, str],
aur_index: Iterable[str], deps_checked: Set[str], deps_data: Dict[str, dict],
sort: bool, watcher: ProcessWatcher, choose_providers: bool = True) -> List[Tuple[str, str]]:
sort: bool, watcher: ProcessWatcher, choose_providers: bool = True,
automatch_providers: bool = False) -> List[Tuple[str, str]]:
sorted_deps = [] # it will hold the proper order to install the missing dependencies
missing_deps, repo_missing, aur_missing = set(), set(), set()
@@ -271,7 +282,8 @@ class DependenciesAnalyser:
remote_provided_map=remote_provided_map,
remote_repo_map=remote_repo_map,
repo_deps=repo_missing, aur_deps=aur_missing, watcher=watcher,
deps_data=deps_data)
deps_data=deps_data,
automatch_providers=automatch_providers)
else:
version_pattern = '{}='.format(dep_name)
version_found = [p for p in provided_map if p.startswith(version_pattern)]
@@ -297,7 +309,8 @@ class DependenciesAnalyser:
remote_repo_map=remote_repo_map,
repo_deps=repo_missing, aur_deps=aur_missing,
watcher=watcher,
deps_data=deps_data)
deps_data=deps_data,
automatch_providers=automatch_providers)
else:
self._fill_missing_dep(dep_name=dep_name, dep_exp=dep, aur_index=aur_index,
missing_deps=missing_deps,
@@ -305,7 +318,8 @@ class DependenciesAnalyser:
remote_repo_map=remote_repo_map,
repo_deps=repo_missing, aur_deps=aur_missing,
watcher=watcher,
deps_data=deps_data)
deps_data=deps_data,
automatch_providers=automatch_providers)
if missing_deps:
if repo_missing:
@@ -339,6 +353,7 @@ class DependenciesAnalyser:
watcher=watcher,
remote_provided_map=remote_provided_map,
remote_repo_map=remote_repo_map,
automatch_providers=automatch_providers,
choose_providers=False)
if missing_subdeps:
@@ -353,7 +368,8 @@ class DependenciesAnalyser:
return self.fill_providers_deps(missing_deps=sorted_deps, provided_map=provided_map,
remote_provided_map=remote_provided_map, remote_repo_map=remote_repo_map,
watcher=watcher, sort=sort, already_checked=deps_checked,
aur_idx=aur_index, deps_data=deps_data)
aur_idx=aur_index, deps_data=deps_data,
automatch_providers=automatch_providers)
return sorted_deps
@@ -361,7 +377,7 @@ class DependenciesAnalyser:
provided_map: Dict[str, Set[str]], remote_repo_map: Dict[str, str],
already_checked: Set[str], remote_provided_map: Dict[str, Set[str]],
deps_data: Dict[str, dict], aur_idx: Iterable[str], sort: bool,
watcher: ProcessWatcher) -> List[Tuple[str, str]]:
watcher: ProcessWatcher, automatch_providers: bool) -> List[Tuple[str, str]]:
"""
:param missing_deps:
:param provided_map:
@@ -372,6 +388,7 @@ class DependenciesAnalyser:
:param aur_idx:
:param sort:
:param watcher:
:param automatch_providers
:return: all deps sorted or None if the user declined the providers options
"""
@@ -404,7 +421,8 @@ class DependenciesAnalyser:
remote_provided_map=remote_provided_map,
remote_repo_map=remote_repo_map,
watcher=watcher,
choose_providers=True)
choose_providers=True,
automatch_providers=automatch_providers)
# cleaning the already mapped providers deps:
to_remove = []
@@ -427,7 +445,8 @@ class DependenciesAnalyser:
if not self.fill_providers_deps(missing_deps=missing_deps, provided_map=provided_map,
remote_repo_map=remote_repo_map, already_checked=already_checked,
aur_idx=aur_idx, remote_provided_map=remote_provided_map,
deps_data=deps_data, sort=False, watcher=watcher):
deps_data=deps_data, sort=False, watcher=watcher,
automatch_providers=automatch_providers):
return
if sort:

View File

@@ -22,6 +22,8 @@ arch.checking.missing_deps=Verificació de les dependències que falten de {}
arch.clone=Sestà clonant el dipòsit {} de lAUR
arch.config.aur=AUR packages
arch.config.aur.tip=It allows to manage AUR packages
arch.config.automatch_providers=Auto-define dependency providers
arch.config.automatch_providers.tip=It automatically chooses which provider will be used for a package dependency when both names are equal.
arch.config.clean_cache=Elimina les versions antigues
arch.config.clean_cache.tip=Si cal eliminar les versions antigues d'un paquet emmagatzemat al disc durant la desinstal·lació
arch.config.mirrors_sort_limit=Mirrors sort limit

View File

@@ -22,6 +22,8 @@ arch.checking.missing_deps=Überprüfen der fehlenden Abhängigkeiten von {}
arch.clone=AUR Repository {} wird kopiert
arch.config.aur=AUR packages
arch.config.aur.tip=It allows to manage AUR packages
arch.config.automatch_providers=Auto-define dependency providers
arch.config.automatch_providers.tip=It automatically chooses which provider will be used for a package dependency when both names are equal.
arch.config.clean_cache=Remove old versions
arch.config.clean_cache.tip=Whether old versions of a package stored on disk should be removed during uninstall
arch.config.mirrors_sort_limit=Mirrors sort limit

View File

@@ -22,6 +22,8 @@ arch.checking.missing_deps=Verifying missing dependencies of {}
arch.clone=Cloning the AUR repository {}
arch.config.aur=AUR packages
arch.config.aur.tip=It allows to manage AUR packages
arch.config.automatch_providers=Auto-define dependency providers
arch.config.automatch_providers.tip=It automatically chooses which provider will be used for a package dependency when both names are equal.
arch.config.clean_cache=Remove old versions
arch.config.clean_cache.tip=Whether old versions of a package stored on disk should be removed during uninstall
arch.config.mirrors_sort_limit=Mirrors sort limit

View File

@@ -22,6 +22,8 @@ arch.checking.missing_deps=Verificando las dependencias faltantes de {}
arch.clone=Clonando el repositorio {} de AUR
arch.config.aur=Paquetes de AUR
arch.config.aur.tip=Permite gestionar paquetes del AUR
arch.config.automatch_providers=Autodefinir proveedores de dependencia
arch.config.automatch_providers.tip=Elige automáticamente qué proveedor se usará para una dependencia de paquete cuando ambos nombres son iguales.
arch.config.clean_cache=Eliminar versiones antiguas
arch.config.clean_cache.tip=Si las versiones antiguas de un paquete almacenado en el disco deben ser eliminadas durante la desinstalación
arch.config.mirrors_sort_limit=Límite de ordenación de espejos

View File

@@ -22,6 +22,8 @@ arch.checking.missing_deps=Verifica delle dipendenze mancanti di {}
arch.clone=Clonazione del repository AUR {}
arch.config.aur=AUR packages
arch.config.aur.tip=It allows to manage AUR packages
arch.config.automatch_providers=Auto-define dependency providers
arch.config.automatch_providers.tip=It automatically chooses which provider will be used for a package dependency when both names are equal.
arch.config.clean_cache=Rimuovi le vecchie versioni
arch.config.clean_cache.tip=Se le vecchie versioni di un pacchetto memorizzate sul disco devono essere rimosse durante la disinstallazione
arch.config.mirrors_sort_limit=Mirrors sort limit

View File

@@ -22,6 +22,8 @@ arch.checking.missing_deps=Verificando dependências ausentes de {}
arch.clone=Clonando o repositório {} do AUR
arch.config.aur=Pacotes do AUR
arch.config.aur.tip=Permite gerenciar pacotes dos AUR
arch.config.automatch_providers=Auto-definir provedores de dependências
arch.config.automatch_providers.tip=Escolhe automaticamente qual provedor será utilizado para determinada dependência de um pacote caso os nomes de ambos sejam iguais.
arch.config.clean_cache=Remover versões antigas
arch.config.clean_cache.tip=Se versões antigas de um pacote armazenadas em disco devem ser removidas durante a desinstalação
arch.config.mirrors_sort_limit=Limite de ordenação de espelhos

View File

@@ -22,6 +22,8 @@ arch.checking.missing_deps=Проверка отсутствующих зави
arch.clone=Клонирование AUR-репозитория {}
arch.config.aur=пакеты AUR
arch.config.aur.tip=Это позволяет управлять пакетами AUR
arch.config.automatch_providers=Auto-define dependency providers
arch.config.automatch_providers.tip=It automatically chooses which provider will be used for a package dependency when both names are equal.
arch.config.clean_cache=Remove old versions
arch.config.clean_cache.tip=Whether old versions of a package stored on disk should be removed during uninstall
arch.config.mirrors_sort_limit=Ограничение сортировки зеркал

View File

@@ -22,6 +22,8 @@ arch.checking.missing_deps={} eksik bağımlılıkları kontrol ediliyor
arch.clone=AUR deposu kopyalanıyor {}
arch.config.aur=AUR paketleri
arch.config.aur.tip=AUR paketlerinin yönetilmesine izin verir
arch.config.automatch_providers=Auto-define dependency providers
arch.config.automatch_providers.tip=It automatically chooses which provider will be used for a package dependency when both names are equal.
arch.config.clean_cache=Önbelleği temizle
arch.config.clean_cache.tip=Disk üzerinde kurulu bir paketin eski sürümlerinin kaldırma sırasında kaldırılıp kaldırılmayacağı
arch.config.mirrors_sort_limit=Yansı sıralama sınırı

View File

@@ -253,7 +253,8 @@ class UpdatesSummarizer:
deps_data=deps_data,
remote_provided_map=context.remote_provided_map,
remote_repo_map=context.remote_repo_map,
watcher=self.watcher)
watcher=self.watcher,
automatch_providers=context.arch_config['automatch_providers'])
if deps is None:
tf = time.time()

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB