Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gearlever for openSUSE:Factory checked in at 2025-09-16 18:18:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gearlever (Old) and /work/SRC/openSUSE:Factory/.gearlever.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gearlever" Tue Sep 16 18:18:33 2025 rev:14 rq:1305033 version:3.4.2 Changes: -------- --- /work/SRC/openSUSE:Factory/gearlever/gearlever.changes 2025-07-16 15:53:03.015956984 +0200 +++ /work/SRC/openSUSE:Factory/.gearlever.new.1977/gearlever.changes 2025-09-16 18:19:08.628977785 +0200 @@ -1,0 +2,10 @@ +Mon Sep 15 19:19:18 UTC 2025 - Jaime Marquínez Ferrándiz <[email protected]> + +- Update to 3.4.2: + * Fixed an issue when integrating apps from CLI +- Update to 3.4.1: + * Added new command line option to unset update url +- Update to 3.4.0: + * Added new command line option --set-update-url + +------------------------------------------------------------------- Old: ---- gearlever-3.3.4.tar.gz New: ---- gearlever-3.4.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gearlever.spec ++++++ --- /var/tmp/diff_new_pack.KbGm2T/_old 2025-09-16 18:19:09.128998842 +0200 +++ /var/tmp/diff_new_pack.KbGm2T/_new 2025-09-16 18:19:09.128998842 +0200 @@ -1,7 +1,7 @@ # # spec file for package gearlever # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %define appid it.mijorus.gearlever Name: gearlever -Version: 3.3.4 +Version: 3.4.2 Release: 0 Summary: Manage AppImages License: GPL-3.0-or-later @@ -37,6 +37,7 @@ Requires: flatpak-spawn Requires: python3-dbus-python Requires: python3-pyxdg +Requires: python3-requests Requires: squashfs %description ++++++ gearlever-3.3.4.tar.gz -> gearlever-3.4.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gearlever-3.3.4/README.md new/gearlever-3.4.2/README.md --- old/gearlever-3.3.4/README.md 2025-07-04 10:01:14.000000000 +0200 +++ new/gearlever-3.4.2/README.md 2025-08-19 21:24:08.000000000 +0200 @@ -32,12 +32,15 @@ Usage: flatpak run it.mijorus.gearlever [OPTION...] # OR gearlever [OPTION...] if using the alias ---integrate Integrate an AppImage file ---update Update an AppImage file ---update --all Update all apps ---remove Trashes an AppImage, its .desktop file and icons ---list-installed List integrated apps ---list-updates List available updates + +--integrate Integrate an AppImage file +--update Update an AppImage file +--remove Trashes an AppImage, its .desktop file and icons +--list-installed List integrated apps +--list-updates List available updates +--set-update-url Set/Unset a custom update url +--fetch-updates Fetch updates in the background and sends a desktop notification, used on system startup + ``` For an improved user experience, add the following line to your `.bashrc` file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gearlever-3.3.4/data/it.mijorus.gearlever.appdata.xml.in new/gearlever-3.4.2/data/it.mijorus.gearlever.appdata.xml.in --- old/gearlever-3.3.4/data/it.mijorus.gearlever.appdata.xml.in 2025-07-04 10:01:14.000000000 +0200 +++ new/gearlever-3.4.2/data/it.mijorus.gearlever.appdata.xml.in 2025-08-19 21:24:08.000000000 +0200 @@ -20,6 +20,22 @@ <p>An utility to manage AppImages with ease! Gear lever will organize and manage AppImage files for you, generate desktop entries and app metadata, update apps in-place or keep multiple versions side-by-side.</p> </description> <releases> + <release type="stable" version="3.4.2" date="2025-08-09:00:00Z"> + <description> + <p>- Fixed an issue when integrating apps from CLI</p> + </description> + </release> + <release type="stable" version="3.4.1" date="2025-08-09:00:00Z"> + <description> + <p>- Added new command line option to unset update url</p> + </description> + </release> + <release type="stable" version="3.4.0" date="2025-07-31:00:00Z"> + <description> + <p>- Added new command line option --set-update-url</p> + <p>- Update to Gnome Runtime 48</p> + </description> + </release> <release type="stable" version="3.3.4" date="2025-07-04:00:00Z"> <description> <p>- Fixed an issue caused by apps with spaces in their file names</p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gearlever-3.3.4/it.mijorus.gearlever.json new/gearlever-3.4.2/it.mijorus.gearlever.json --- old/gearlever-3.3.4/it.mijorus.gearlever.json 2025-07-04 10:01:14.000000000 +0200 +++ new/gearlever-3.4.2/it.mijorus.gearlever.json 2025-08-19 21:24:08.000000000 +0200 @@ -1,7 +1,7 @@ { "id": "it.mijorus.gearlever", "runtime": "org.gnome.Platform", - "runtime-version": "47", + "runtime-version": "48", "sdk": "org.gnome.Sdk", "command": "gearlever", "finish-args": [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gearlever-3.3.4/meson.build new/gearlever-3.4.2/meson.build --- old/gearlever-3.3.4/meson.build 2025-07-04 10:01:14.000000000 +0200 +++ new/gearlever-3.4.2/meson.build 2025-08-19 21:24:08.000000000 +0200 @@ -1,5 +1,5 @@ project('gearlever', - version: '3.3.4', + version: '3.4.2', meson_version: '>= 0.59.0', default_options: [ 'warning_level=2', ], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gearlever-3.3.4/po/ru.po new/gearlever-3.4.2/po/ru.po --- old/gearlever-3.3.4/po/ru.po 2025-07-04 10:01:14.000000000 +0200 +++ new/gearlever-3.4.2/po/ru.po 2025-08-19 21:24:08.000000000 +0200 @@ -3,19 +3,22 @@ # This file is distributed under the same license as the PACKAGE package. # Ворон <[email protected]>, 2023. # +# SPDX-FileCopyrightText: 2025 Sergey Kazorin <[email protected]> msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-20 14:54+0100\n" -"PO-Revision-Date: 2024-12-03 13:43+0300\n" -"Last-Translator: Ворон <[email protected]>\n" -"Language-Team: \n" +"PO-Revision-Date: 2025-07-07 15:42+0300\n" +"Last-Translator: Sergey Kazorin <[email protected]>\n" +"Language-Team: Russian <[email protected]>\n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.5\n" +"X-Generator: Lokalize 24.12.3\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" +"4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: data/it.mijorus.gearlever.desktop.in:3 msgid "Gear Lever" @@ -23,7 +26,7 @@ #: data/it.mijorus.gearlever.desktop.in:4 msgid "An utility to manage AppImages with ease!" -msgstr "Утилита для простого управления приложениями AppImage!" +msgstr "Утилита позволяет с лёгкостью управлять приложениями AppImage!" #: data/it.mijorus.gearlever.desktop.in:12 msgid "AppImage;" @@ -43,7 +46,7 @@ #: src/AppDetails.py:30 src/InstalledAppsList.py:32 msgid "Checking updates..." -msgstr "Проверка обновлений..." +msgstr "Проверка обновлений…" #: src/AppDetails.py:31 msgid "No updates available" @@ -65,12 +68,11 @@ "<small>You can hide external apps in the settings</small>" msgstr "" "Это приложение находится вне папки по умолчанию.\n" -"<small>Вы можете скрыть внешние приложения в настройках</small>" +"<small>Внешние приложения можно скрыть в настройке параметров</small>" #: src/AppDetails.py:224 msgid "Please, verify the source of this app before opening it" -msgstr "" -"Пожалуйста, проверьте источник этого приложения, прежде чем открывать его" +msgstr "Проверьте источник этого приложения, прежде чем открывать его" #: src/AppDetails.py:225 msgid "Unlock" @@ -78,7 +80,7 @@ #: src/AppDetails.py:328 msgid "Launching..." -msgstr "Запуск..." +msgstr "Запуск…" #: src/AppDetails.py:335 src/AppDetails.py:501 #: src/providers/AppImageProvider.py:648 @@ -95,11 +97,11 @@ #: src/AppDetails.py:424 msgid "Do you really want to remove this app?" -msgstr "Вы действительно хотите удалить это приложение?" +msgstr "Удалить это приложение?" #: src/AppDetails.py:427 src/components/AppDetailsConflictModal.py:14 msgid "Cancel" -msgstr "Отменить" +msgstr "Отмена" #: src/AppDetails.py:428 src/AppDetails.py:467 msgid "Remove" @@ -115,11 +117,11 @@ #: src/AppDetails.py:471 msgid "Uninstalling..." -msgstr "Удаление..." +msgstr "Удаление…" #: src/AppDetails.py:475 msgid "Installing..." -msgstr "Установка..." +msgstr "Установка…" #: src/AppDetails.py:488 msgid "Move to the app menu" @@ -151,7 +153,7 @@ #: src/AppDetails.py:802 msgid "Update URL" -msgstr "Обновить URL-адрес" +msgstr "URL-адрес обновления" #: src/AppDetails.py:809 msgid "Source" @@ -239,7 +241,7 @@ #: src/InstalledAppsList.py:51 msgid "Filter installed applications" -msgstr "Фильтр установленных приложений" +msgstr "Фильтровать установленные приложения" #: src/InstalledAppsList.py:57 msgid "Installed applications" @@ -278,7 +280,7 @@ "Receive a notification when a new update is detected; updates will not be " "installed automatically" msgstr "" -"Получать уведомление, когда обнаружено новое обновление; обновления не будут " +"Получать уведомление при обнаружении нового обновления; обновления не будут " "устанавливаться автоматически" #: src/preferences.py:62 @@ -317,11 +319,11 @@ "\n" "For example, \"golang_x86_64.appimage\" will be saved as \"go\"" msgstr "" -"Если включено, приложения, которые запускаются в терминале, " -"переименовываются как их исполняемые файлы.\n" -"Вам нужно будет вручную добавить вышеупомянутую папку в $PATH.\n" +"Если включено, запускаемые в терминале приложения " +"получают имена исполняемых файлов.\n" +"При этом вышеупомянутую папку необходимо вручную добавить в $PATH.\n" "\n" -"Например, \"golang_x86_64.appimage\" будет сохранено как \"go\"" +"Например, «golang_x86_64.appimage» будет сохранено как «go»" #: src/preferences.py:106 msgid "Debugging" @@ -355,11 +357,11 @@ #: src/gtk/main-menu.ui:6 msgid "_Preferences" -msgstr "_Настройки" +msgstr "_Параметры" #: src/gtk/main-menu.ui:10 msgid "_Open Log File" -msgstr "_Открыть файл лога" +msgstr "_Открыть файл журнала" #: src/gtk/main-menu.ui:14 msgid "_Show tutorial" @@ -367,7 +369,7 @@ #: src/gtk/main-menu.ui:18 msgid "_About Gear lever" -msgstr "_О приложении" +msgstr "_О приложении Gear lever" #: src/components/AppDetailsConflictModal.py:10 #, python-brace-format @@ -376,7 +378,7 @@ #: src/components/AppDetailsConflictModal.py:11 msgid "There is already an app with the same name, how do you want to proceed?" -msgstr "Приложение с таким названием уже существует, как вы хотите продолжить?" +msgstr "Приложение с таким именем уже существует. Что делать дальше?" #: src/components/AppDetailsConflictModal.py:17 msgid "Keep both" @@ -392,7 +394,7 @@ #: src/gtk/empty-list-placeholder.ui:18 msgid "Get started" -msgstr "Начать" +msgstr "Начало работы" #: src/gtk/empty-list-placeholder.ui:30 msgid "Drag and drop an AppImage here or click on the \"+\" icon." @@ -400,16 +402,15 @@ #: src/gtk/empty-list-placeholder.ui:35 msgid " If you don't see your apps, check if the selected folder is correct." -msgstr "" -" Если вы не видите своих приложений, проверьте, правильно ли выбрана папка." +msgstr " Если приложения не отображаются, проверьте правильность выбора папки." #: src/gtk/empty-list-placeholder.ui:46 msgid "Show welcome screen" -msgstr "Показывать экран приветствия" +msgstr "Показать экран приветствия" #: src/gtk/empty-list-placeholder.ui:56 msgid "Open Preferences" -msgstr "Открыть настройки" +msgstr "Открыть настройку параметров" #: src/gtk/help-overlay.ui:11 msgctxt "shortcut window" @@ -432,13 +433,11 @@ #: src/gtk/tutorial/1.ui:30 msgid "An app that helps you integrating AppImages into you system." -msgstr "" -"Приложение, которое поможет вам интегрировать приложения AppImage в вашу " -"систему." +msgstr "Приложение для интеграции приложений AppImage в систему." #: src/gtk/tutorial/1.ui:36 msgid "Click \"Next\" to follow this tutorial." -msgstr "Нажмите \"Далее\", чтобы продолжить это руководство." +msgstr "Нажмите «Далее» для продолжения просмотра этого руководства." #: src/gtk/tutorial/2.ui:19 msgid "Set the AppImage location" @@ -449,13 +448,12 @@ "Gear lever groups all your AppImages into a specific folder and keeps them " "organized." msgstr "" -"Gear lever группирует все ваши AppImage в определенную папку и упорядочивает " -"их." +"Gear lever группирует все AppImage в определенную папку и упорядочивает их." #: src/gtk/tutorial/2.ui:33 #, python-brace-format msgid "By default, AppImages are saved at: {location}" -msgstr "По умолчанию AppImage сохраняются по адресу: {location}" +msgstr "По умолчанию приложения AppImage сохраняются по адресу: {location}" #: src/gtk/tutorial/2.ui:47 msgid "Change AppImage location" @@ -463,7 +461,7 @@ #: src/gtk/tutorial/2.ui:59 msgid "You can customize it later in the preferences." -msgstr "Вы можете настроить это позже в настройках." +msgstr "Это можно изменить в настройках параметров." #: src/gtk/tutorial/3.ui:19 msgid "Set Gear lever as default" @@ -472,16 +470,15 @@ #: src/gtk/tutorial/3.ui:28 msgid "" "Click on the button to open a demo folder, containing a sample AppImage." -msgstr "" -"Нажмите на кнопку, чтобы открыть демо-папку, содержащую пример AppImage." +msgstr "Нажмите на кнопку для открытия демо-папки с примером AppImage." #: src/gtk/tutorial/3.ui:33 msgid "" "Use the right-click menu to set Gear lever as the default app for \"." "appimage\" files" msgstr "" -"Используйте меню правой кнопки мыши, чтобы установить Gear lever в качестве " -"приложения по умолчанию для файлов \".appimage\"" +"Используйте контекстное меню для установки Gear lever в качестве " +"приложения по умолчанию для файлов «.appimage»" #: src/gtk/tutorial/3.ui:44 msgid "Open demo folder" @@ -518,8 +515,8 @@ "updated\n" "{el.name} ➔ {list_element.name}" msgstr "" -"Загруженный AppImage не имеет того же имени приложения и не может быть " -"обновлен\n" +"Загруженный AppImage имеет другое имя приложения и не может " +"обновляться\n" "{el.name} ➔ {list_element.name}" #: src/providers/AppImageProvider.py:634 @@ -535,8 +532,8 @@ "Click the link below for more information. \n" "{url}" msgstr "" -"AppImage требует FUSE для запуска. Вы все равно можете запустить его с " -"помощью --appimage-extract-and-run в аргументах командной строки. \n" +"Для запуска AppImage необходим FUSE. Тем не менее, запуск возможен при указани" +"и аргумента командной строки --appimage-extract-and-run. \n" "\n" "Для получения более подробной информации, нажмите на ссылку ниже. \n" "{url}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gearlever-3.3.4/src/BackgroudUpdatesFetcher.py new/gearlever-3.4.2/src/BackgroudUpdatesFetcher.py --- old/gearlever-3.3.4/src/BackgroudUpdatesFetcher.py 2025-07-04 10:01:14.000000000 +0200 +++ new/gearlever-3.4.2/src/BackgroudUpdatesFetcher.py 2025-08-19 21:24:08.000000000 +0200 @@ -10,6 +10,7 @@ from .models.UpdateManager import UpdateManagerChecker class BackgroudUpdatesFetcher(): + @staticmethod def fetch(): logging.warn('Fetching updates in the background') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gearlever-3.3.4/src/Cli.py new/gearlever-3.4.2/src/Cli.py --- old/gearlever-3.3.4/src/Cli.py 2025-07-04 10:01:14.000000000 +0200 +++ new/gearlever-3.4.2/src/Cli.py 2025-08-19 21:24:08.000000000 +0200 @@ -5,10 +5,10 @@ from gi.repository import Gtk, Gio, Adw, Gdk, GLib, GObject # noqa from .BackgroudUpdatesFetcher import BackgroudUpdatesFetcher from .lib.constants import FETCH_UPDATES_ARG -from .lib.utils import make_option +from .lib.utils import make_option, url_is_valid from .providers.providers_list import appimage_provider from .providers.AppImageProvider import AppImageUpdateLogic, AppImageListElement -from .lib.json_config import read_config_for_app, read_json_config +from .lib.json_config import read_config_for_app, save_config_for_app from .models.UpdateManager import UpdateManagerChecker class Cli(): @@ -18,9 +18,11 @@ make_option('remove', description='Trashes an AppImage, its .desktop file and icons '), make_option('list-installed', description='List integrated apps'), make_option('list-updates', description='List available updates'), + make_option('set-update-url', description='Set a custom update url'), make_option(FETCH_UPDATES_ARG, description='Fetch updates in the background and sends a desktop notification, used on system startup'), ] + @staticmethod def ask(message: str, options: list) -> str: _input = None @@ -31,6 +33,7 @@ return _input + @staticmethod def from_options(argv): if len(argv) < 2: return -1 @@ -51,9 +54,11 @@ return -1 + @staticmethod def fetch_updates(argv): BackgroudUpdatesFetcher.fetch() + @staticmethod def update(argv): Cli._print_help_if_requested(argv, [ ['--yes | -y', 'Skips any interactive question'], @@ -107,6 +112,7 @@ print(f'\n{el.file_path} updated successfully') + @staticmethod def remove(argv): Cli._print_help_if_requested(argv, [ ['Usage: --remove <file_path>'], @@ -135,11 +141,65 @@ appimage_provider.uninstall(el, force_delete=force) print(f'{el.file_path} was removed sucessfully') + @staticmethod + def set_update_url(argv): + u_managers = ', '.join([n.name for n in UpdateManagerChecker.get_models()]) + + Cli._print_help_if_requested(argv, [ + ['--manager <manager>', f'Optional: specify an update manager between: {u_managers}'], + ['--unset', f'Unset a custom config for an app'], + ], text='Usage: --set-update-url <file_path> --url <url>') + + update_url = None + update_url = Cli._get_arg_value(argv, '--url') + manager_name = Cli._get_arg_value(argv, '--manager') + + if (not update_url) or (not url_is_valid(update_url)): + print('Error: "%s" is not a valid URL' % update_url) + sys.exit(1) + + g_file = Cli._get_file_from_args(argv) + el = appimage_provider.create_list_element_from_file(g_file) + + if '--unset' in argv: + app_conf = read_config_for_app(el) + + if 'update_url' in app_conf: + del app_conf['update_url'] + + if 'update_url_manager' in app_conf: + del app_conf['update_url_manager'] + + save_config_for_app(app_conf) + sys.exit(0) + + selected_manager = None + if manager_name: + selected_manager = UpdateManagerChecker.get_model_by_name(manager_name) + + manager = UpdateManagerChecker.check_url(update_url, el, model=selected_manager) + + if manager: + app_conf = read_config_for_app(el) + app_conf['update_url'] = update_url + app_conf['update_url_manager'] = manager.name + save_config_for_app(app_conf) + + print(f'Saved update url for: {manager.name}') + else: + if selected_manager: + print(f'The provided url is not supported by: {manager_name}') + else: + print(f'The provided url is not supported by any of the following providers: {u_managers}') + sys.exit(1) + + @staticmethod def integrate(argv): Cli._print_help_if_requested(argv, [ ['--keep-both', 'If a name conflict occurs, keeps both files (default behaviour)'], ['--replace', 'If a name conflict occurs, replaces the old file with the one that you are currently integrating'], ['--yes | -y', 'Skips any interactive question and integrates the file'], + ['--update-url <url>', 'Set a custom URL for updates'], ], text='Usage: --integrate <file_path>') g_file = Cli._get_file_from_args(argv) @@ -192,6 +252,7 @@ appimage_provider.install_file(el) print(f'{el.file_path} was integrated successfully') + @staticmethod def list_installed(argv): Cli._print_help_if_requested(argv, [ ['-v', ' Show more info'] @@ -209,6 +270,7 @@ Cli._print_table(table) + @staticmethod def list_updates(argv): Cli._print_help_if_requested(argv, [['-v', 'Prints update URL information']]) @@ -237,6 +299,21 @@ Cli._print_table(table) + @staticmethod + def _get_arg_value(argv: list[str], arg_name: str): + if not arg_name in argv: + return None + + i = argv.index(arg_name) + + if len(argv) < (i + 2): + print(f'Error: {arg_name} requires a value') + sys.exit(1) + + val = argv[i + 1] + return val + + @staticmethod def _print_table(table): if (not table): return @@ -261,7 +338,8 @@ row_format = "".join(["{:<" + str(longest_col) + "}" for longest_col in longest_cols]) for row in table: print(row_format.format(*row)) - + + @staticmethod def _get_invoked_option(argv): for opt in Cli.options: long_name = str(opt.long_name) @@ -270,7 +348,8 @@ return None - def _print_help_if_requested(argv, help: list[str], text=''): + @staticmethod + def _print_help_if_requested(argv, help: list, text=''): if '--help' in argv: opt = Cli._get_invoked_option(argv) if opt: @@ -282,6 +361,7 @@ Cli._print_table(help) sys.exit(0) + @staticmethod def _get_file_from_args(args): for a in args: if not a.startswith('-'): @@ -295,6 +375,7 @@ print('Error: please specify a valid AppImage file') sys.exit(1) + @staticmethod def _get_list_element_from_gfile(g_file: Gio.File): el = None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gearlever-3.3.4/src/models/UpdateManager.py new/gearlever-3.4.2/src/models/UpdateManager.py --- old/gearlever-3.3.4/src/models/UpdateManager.py 2025-07-04 10:01:14.000000000 +0200 +++ new/gearlever-3.4.2/src/models/UpdateManager.py 2025-08-19 21:24:08.000000000 +0200 @@ -49,9 +49,11 @@ class UpdateManagerChecker(): + @staticmethod def get_models() -> list[UpdateManager]: return [StaticFileUpdater, GithubUpdater, GitlabUpdater, CodebergUpdater] + @staticmethod def get_model_by_name(manager_label: str) -> Optional[UpdateManager]: item = list(filter(lambda m: m.name == manager_label, UpdateManagerChecker.get_models())) @@ -61,6 +63,7 @@ return None + @staticmethod def check_url_for_app(el: AppImageListElement=None): app_conf = read_config_for_app(el) update_url = app_conf.get('update_url', None) @@ -68,6 +71,7 @@ return UpdateManagerChecker.check_url(update_url, el, model=UpdateManagerChecker.get_model_by_name(update_url_manager)) + @staticmethod def check_url(url: str=Optional[str], el: Optional[AppImageListElement]=None, model: Optional[UpdateManager]=None) -> Optional[UpdateManager]: @@ -106,6 +110,7 @@ return None + @staticmethod def check_app(el: AppImageListElement) -> Optional[str]: # if not terminal.sandbox_sh(['which', 'readelf']): # return diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gearlever-3.3.4/src/providers/AppImageProvider.py new/gearlever-3.4.2/src/providers/AppImageProvider.py --- old/gearlever-3.3.4/src/providers/AppImageProvider.py 2025-07-04 10:01:14.000000000 +0200 +++ new/gearlever-3.4.2/src/providers/AppImageProvider.py 2025-08-19 21:24:08.000000000 +0200 @@ -266,7 +266,7 @@ # how the appimage will be called appimage_filename = '' prefixed_filename = '' - if el.update_logic == AppImageUpdateLogic.REPLACE: + if el.update_logic == AppImageUpdateLogic.REPLACE and el.updating_from is not None: appimage_filename = os.path.basename(el.updating_from.file_path) desktop_file_path = os.path.basename(el.updating_from.desktop_file_path) prefixed_filename = os.path.splitext(desktop_file_path)[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gearlever-3.3.4/tests/test_cli.py new/gearlever-3.4.2/tests/test_cli.py --- old/gearlever-3.3.4/tests/test_cli.py 2025-07-04 10:01:14.000000000 +0200 +++ new/gearlever-3.4.2/tests/test_cli.py 2025-08-19 21:24:08.000000000 +0200 @@ -139,6 +139,17 @@ self.runCommand(['--remove', os.path.join(self.installPath, 'citron.appimage'), '-y']) + def test_fetch_updates_explicit_url(self): + self.download_file('https://beeper-desktop.download.beeper.com/builds/Beeper-4.1.1.AppImage', 'beeper.appimage') + self.runCommand(['--integrate', 'https://api.beeper.com/desktop/download/linux/x64/stable/com.automattic.beeper.desktop', os.path.join(self.download_dir, 'beeper.appimage'), '-y']) + self.runCommand(['--set-update-url', os.path.join(self.installPath, 'beeper.appimage'), '--url', 'https://api.beeper.com/desktop/download/linux/x64/stable/com.automattic.beeper.desktop']) + self.assertIn('beeper.appimage', self.get_installed_files()) + + updates_list = self.runCommand(['--list-updates']) + self.assertIn('beeper.appimage', updates_list) + + self.runCommand(['--remove', os.path.join(self.installPath, 'beeper.appimage'), '-y']) + def test_with_appimageextract(self): # Test apps using appimage-extract self.download_file('https://dn.navicat.com/download/navicat17-premium-lite-en-x86_64.AppImage', 'navicat_premium_lite_17.appimage')
