diff --git a/CHANGELOG.md b/CHANGELOG.md index dee33a92..bf13ddee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Flatpak - creating the exports path **~/.local/share/flatpak/exports/share** (if it does not exist) and adding it to install/upgrade/downgrade/remove commands path to prevent warning messages. [#128](https://github.com/vinifmor/bauh/issues/128) + - downgrade function refactored - minor UI improvements diff --git a/bauh/gems/flatpak/controller.py b/bauh/gems/flatpak/controller.py index d91b49d1..3f72e818 100644 --- a/bauh/gems/flatpak/controller.py +++ b/bauh/gems/flatpak/controller.py @@ -168,39 +168,27 @@ class FlatpakManager(SoftwareManager): return SearchResult(models, None, len(models)) def downgrade(self, pkg: FlatpakApplication, root_password: str, watcher: ProcessWatcher) -> bool: - if not self._make_exports_dir(watcher): return False - handler = ProcessHandler(watcher) - pkg.commit = flatpak.get_commit(pkg.id, pkg.branch, pkg.installation) - watcher.change_progress(10) watcher.change_substatus(self.i18n['flatpak.downgrade.commits']) - commits = flatpak.get_app_commits(pkg.ref, pkg.origin, pkg.installation, handler) - if commits is None: - return False - - try: - commit_idx = commits.index(pkg.commit) - except ValueError: - if commits[0] == '(null)': - commit_idx = 0 - else: - return False + history = self.get_history(pkg) # downgrade is not possible if the app current commit in the first one: - if commit_idx == len(commits) - 1: - watcher.show_message(self.i18n['flatpak.downgrade.impossible.title'], self.i18n['flatpak.downgrade.impossible.body'], MessageType.WARNING) + if history.pkg_status_idx == len(history.history) - 1: + watcher.show_message(self.i18n['flatpak.downgrade.impossible.title'], + self.i18n['flatpak.downgrade.impossible.body'].format(bold(pkg.name)), + MessageType.ERROR) return False - commit = commits[commit_idx + 1] + commit = history.history[history.pkg_status_idx + 1]['commit'] watcher.change_substatus(self.i18n['flatpak.downgrade.reverting']) watcher.change_progress(50) - success = handler.handle(SystemProcess(subproc=flatpak.downgrade(pkg.ref, commit, pkg.installation, root_password), - success_phrases=['Changes complete.', 'Updates complete.'], - wrong_error_phrase='Warning')) + success = ProcessHandler(watcher).handle(SystemProcess(subproc=flatpak.downgrade(pkg.ref, commit, pkg.installation, root_password), + success_phrases=['Changes complete.', 'Updates complete.'], + wrong_error_phrase='Warning')) watcher.change_progress(100) return success @@ -311,13 +299,19 @@ class FlatpakManager(SoftwareManager): commits = flatpak.get_app_commits_data(pkg.ref, pkg.origin, pkg.installation) status_idx = 0 - commit_found = False - for idx, data in enumerate(commits): - if data['commit'] == pkg.commit: - status_idx = idx - commit_found = True - break + + if pkg.commit is None and len(commits) > 1 and commits[0]['commit'] == '(null)': + del commits[0] + pkg.commit = commits[0] + commit_found = True + + if not commit_found: + for idx, data in enumerate(commits): + if data['commit'] == pkg.commit: + status_idx = idx + commit_found = True + break if not commit_found and pkg.commit and commits[0]['commit'] == '(null)': commits[0]['commit'] = pkg.commit diff --git a/bauh/gems/flatpak/flatpak.py b/bauh/gems/flatpak/flatpak.py index 640a2129..5779179e 100755 --- a/bauh/gems/flatpak/flatpak.py +++ b/bauh/gems/flatpak/flatpak.py @@ -2,7 +2,7 @@ import re import subprocess import traceback from datetime import datetime -from typing import List, Dict, Set, Iterable +from typing import List, Dict, Set, Iterable, Optional from bauh.api.exception import NoInternetException from bauh.commons.system import new_subprocess, run_cmd, new_root_subprocess, SimpleProcess, ProcessHandler @@ -10,6 +10,7 @@ from bauh.commons.util import size_to_byte from bauh.gems.flatpak import EXPORTS_PATH RE_SEVERAL_SPACES = re.compile(r'\s+') +RE_COMMIT = re.compile(r'(Latest commit|Commit)\s*:\s*(.+)') def get_app_info_fields(app_id: str, branch: str, installation: str, fields: List[str] = [], check_runtime: bool = False): @@ -76,12 +77,13 @@ def get_app_info(app_id: str, branch: str, installation: str): return '' -def get_commit(app_id: str, branch: str, installation: str) -> str: - info = new_subprocess(['flatpak', 'info', app_id, branch, '--{}'.format(installation)]) +def get_commit(app_id: str, branch: str, installation: str) -> Optional[str]: + info = run_cmd('flatpak info {} {} --{}'.format(app_id, branch, installation)) - for o in new_subprocess(['grep', 'Commit:', '--color=never'], stdin=info.stdout).stdout: - if o: - return o.decode().split(':')[1].strip() + if info: + commits = RE_COMMIT.findall(info) + if commits: + return commits[0][1].strip() def list_installed(version: str) -> List[dict]: diff --git a/bauh/gems/flatpak/resources/locale/ca b/bauh/gems/flatpak/resources/locale/ca index a20ee7bd..e7cc6745 100644 --- a/bauh/gems/flatpak/resources/locale/ca +++ b/bauh/gems/flatpak/resources/locale/ca @@ -5,7 +5,7 @@ flatpak.config.install_level.system.tip=Applications will be installed for all t flatpak.config.install_level.user=user flatpak.config.install_level.user.tip=Application will be installed only for the current user flatpak.downgrade.commits=S’estan llegint les revisions del paquet -flatpak.downgrade.impossible.body=No s’ha pogut revertir la versió: l’aplicació és a la seva primera versió +flatpak.downgrade.impossible.body=No s’ha pogut revertir la versió: {} és a la seva primera versió flatpak.downgrade.impossible.title=Error flatpak.downgrade.reverting=S’està revertint la versió flatpak.history.commit=revisió diff --git a/bauh/gems/flatpak/resources/locale/de b/bauh/gems/flatpak/resources/locale/de index dcc8bbc9..59bdf7f2 100644 --- a/bauh/gems/flatpak/resources/locale/de +++ b/bauh/gems/flatpak/resources/locale/de @@ -5,7 +5,7 @@ flatpak.config.install_level.system.tip=Applications will be installed for all t flatpak.config.install_level.user=user flatpak.config.install_level.user.tip=Application will be installed only for the current user flatpak.downgrade.commits=Paket-Commits lesen -flatpak.downgrade.impossible.body=Downgrade nicht möglich. Dies ist die erste Version der App +flatpak.downgrade.impossible.body=Downgrade nicht möglich. Dies ist die erste Version der {} flatpak.downgrade.impossible.title=Fehler flatpak.downgrade.reverting=Version zurücksetzen flatpak.history.commit=Commit diff --git a/bauh/gems/flatpak/resources/locale/en b/bauh/gems/flatpak/resources/locale/en index 253b3229..3e1c7a16 100644 --- a/bauh/gems/flatpak/resources/locale/en +++ b/bauh/gems/flatpak/resources/locale/en @@ -5,7 +5,7 @@ flatpak.config.install_level.system.tip=Applications will be installed for all t flatpak.config.install_level.user=user flatpak.config.install_level.user.tip=Application will be installed only for the current user flatpak.downgrade.commits=Reading package commits -flatpak.downgrade.impossible.body=Impossible to downgrade: the app is in its first version +flatpak.downgrade.impossible.body=Impossible to downgrade: {} is in its first version flatpak.downgrade.impossible.title=Error flatpak.downgrade.reverting=Reverting version flatpak.history.commit=commit diff --git a/bauh/gems/flatpak/resources/locale/es b/bauh/gems/flatpak/resources/locale/es index af99e2cc..e73cb12a 100644 --- a/bauh/gems/flatpak/resources/locale/es +++ b/bauh/gems/flatpak/resources/locale/es @@ -5,7 +5,7 @@ flatpak.config.install_level.system.tip=Se instalarán aplicaciones para todos l flatpak.config.install_level.user=usuario flatpak.config.install_level.user.tip=La aplicación se instalará solo para el usuario actual flatpak.downgrade.commits=Leyendo commits del paquete -flatpak.downgrade.impossible.body=Imposible revertir la versión: el aplicativo está en su primera versión +flatpak.downgrade.impossible.body=Imposible revertir la versión: {} está en su primera versión flatpak.downgrade.impossible.title=Error flatpak.downgrade.reverting=Revirtiendo la versión flatpak.history.commit=commit diff --git a/bauh/gems/flatpak/resources/locale/it b/bauh/gems/flatpak/resources/locale/it index b7015d8a..a735febc 100644 --- a/bauh/gems/flatpak/resources/locale/it +++ b/bauh/gems/flatpak/resources/locale/it @@ -5,7 +5,7 @@ flatpak.config.install_level.system.tip=Applications will be installed for all t flatpak.config.install_level.user=user flatpak.config.install_level.user.tip=Application will be installed only for the current user flatpak.downgrade.commits=lettura commits del pacchetto -flatpak.downgrade.impossible.body=Iimpossibile effettuare il downgrade: l'app è nella sua prima versione +flatpak.downgrade.impossible.body=Iimpossibile effettuare il downgrade: {} è nella sua prima versione flatpak.downgrade.impossible.title=Errore flatpak.downgrade.reverting=Ripristino versione flatpak.history.commit=commit diff --git a/bauh/gems/flatpak/resources/locale/pt b/bauh/gems/flatpak/resources/locale/pt index 8b0632b8..694afd97 100644 --- a/bauh/gems/flatpak/resources/locale/pt +++ b/bauh/gems/flatpak/resources/locale/pt @@ -5,7 +5,7 @@ flatpak.config.install_level.system.tip=Os aplicativos serão instalados para to flatpak.config.install_level.user=usuário flatpak.config.install_level.user.tip=Os aplicativos serão instalados somente para o usuário atual flatpak.downgrade.commits=Lendo os commits do pacote -flatpak.downgrade.impossible.body=Impossível reverter a versão: o aplicativo está na sua primeira versão +flatpak.downgrade.impossible.body=Impossível reverter a versão: {} está na sua primeira versão flatpak.downgrade.impossible.title=Erro flatpak.downgrade.reverting=Revertendo a versão flatpak.history.commit=commit diff --git a/bauh/gems/flatpak/resources/locale/ru b/bauh/gems/flatpak/resources/locale/ru index 850b0e45..80016c54 100644 --- a/bauh/gems/flatpak/resources/locale/ru +++ b/bauh/gems/flatpak/resources/locale/ru @@ -5,7 +5,7 @@ flatpak.config.install_level.system.tip=Приложения будут уста flatpak.config.install_level.user=Пользователь flatpak.config.install_level.user.tip=Приложение будет установлено только для текущего пользователя flatpak.downgrade.commits=Чтение коммитов пакета -flatpak.downgrade.impossible.body=Невозможно понизить версию: приложение находится в первой версии +flatpak.downgrade.impossible.body=Невозможно понизить версию: {} находится в первой версии flatpak.downgrade.impossible.title=Ошибка flatpak.downgrade.reverting=Возврат версии flatpak.history.commit=Коммит diff --git a/bauh/gems/flatpak/resources/locale/tr b/bauh/gems/flatpak/resources/locale/tr index cc5aabaf..1901e447 100644 --- a/bauh/gems/flatpak/resources/locale/tr +++ b/bauh/gems/flatpak/resources/locale/tr @@ -5,7 +5,7 @@ flatpak.config.install_level.system.tip=Uygulamalar tüm cihaz kullanıcıları flatpak.config.install_level.user=kullanıcı flatpak.config.install_level.user.tip=Uygulama yalnızca geçerli kullanıcı için yüklenecek flatpak.downgrade.commits=Paket notları okunuyor -flatpak.downgrade.impossible.body=Sürüm düşürme imkansız: uygulama zaten ilk sürümünde +flatpak.downgrade.impossible.body=Sürüm düşürme imkansız: {} zaten ilk sürümünde flatpak.downgrade.impossible.title=Hata flatpak.downgrade.reverting=Sürüm geri döndürülüyor flatpak.history.commit=işlem