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')

Reply via email to