Compare commits

...
Sign in to create a new pull request.

14 commits

Author SHA1 Message Date
Sandro
93c4556bf3
Handle exceptions from file pickers (RHBZ#2296214) 2024-11-09 23:12:03 +01:00
Sandro
7bb7c2ca15
Apply patch for AttributeError (RHBZ#2313567) 2024-11-09 23:12:03 +01:00
Sandro
421bbf58d0
Rename and rebase existing patches
For ease of rebasing onto new releases.

[skip changelog]
2024-11-09 23:12:03 +01:00
Packit
43cd2c008d
Update to 51.15 upstream release
- Resolves: rhbz#2318429

Upstream tag: 51.15
Upstream commit: e93cd189

Commit authored by Packit automation (https://packit.dev/)
2024-11-09 23:12:02 +01:00
Sandro
79dbd8e844
Add optional 32-bit dependencies (RHBZ#2277098)
Those may be required fir running 32-bit bottles.
2024-08-18 13:47:04 +02:00
Packit
4ec8aa3403
Update to 51.13 upstream release
- Resolves: rhbz#2297253

Upstream tag: 51.13
Upstream commit: 7e60ede5

Commit authored by Packit automation (https://packit.dev/)
2024-08-18 13:47:04 +02:00
Lyes Saadi
526fa4d872
Removing ExcludeArch s390x 2024-08-18 13:46:52 +02:00
Sandro
ae240c0442
Add vkbasalt-cli dependency (RHBZ#2277182)
It was accidentally dropped when switching to generated dependencies in
commit 60f51c6.
2024-04-25 18:59:51 +02:00
Sandro
48f38750a9
Add .git-blame-ignore-revs
Use with `git blame --ignore-revs-file` or set the git config option
`blame.ignoreRevsFile`.

[skip changelog]
2024-04-21 16:45:19 +02:00
Sandro
3306d5b8f1
Properly line out sections
Whitespace changes only.

[skip changelog]
2024-04-21 16:45:19 +02:00
Sandro
0f73ce521a
Generate Python requirements
- Fix RHBZ#2276256

Use upstream's `requirements.txt` to generate Python runtime
requirements. Meson isn't helping us in keeping the list of requirements
complete and up to date. With the added script this becomes semi
automated.
2024-04-21 16:45:11 +02:00
Sandro
2af4680aa4
Catch AttributeError in set_manager()
Return empty list if AttributeError is raised (RHBZ#2260135).
2024-03-10 20:24:41 +01:00
Sandro
cbcde4ceea
Make sure Paths.bottles exists
Fixes a FileNotFoundError when opening an executable directly in
Bottles (RHBZ#2257180).

Earlier reported in RHBZ#2249922, RHBZ#2252369 and RHBZ#2249986.
2024-03-10 20:24:40 +01:00
Packit
2847d6c822
[packit] 51.11 upstream release
- Resolves rhbz#2264828

Upstream tag: 51.11
Upstream commit: 89abf684
2024-03-10 20:24:33 +01:00
10 changed files with 285 additions and 98 deletions

2
.git-blame-ignore-revs Normal file
View file

@ -0,0 +1,2 @@
# Line out sections
53d45d3de51c20d134e62146a0ff82a3114cdeda

64
.gitignore vendored
View file

@ -1,62 +1,2 @@
/bottles-2.0.9.7.tar.gz
/bottles-2.0.9.8.tar.gz
/bottles-2.0.9.9.tar.gz
/bottles-2.1.0.tar.gz
/bottles-2.1.0.2.tar.gz
/bottles-2.1.0.4.tar.gz
/bottles-2.1.0.5.tar.gz
/bottles-2.1.0.6.tar.gz
/bottles-2.1.0.7.tar.gz
/bottles-2.1.1.tar.gz
/bottles-2.1.2.tar.gz
/bottles-3.0.1.1.tar.gz
/bottles-3.0.2.tar.gz
/bottles-3.0.5.tar.gz
/bottles-3.0.6.tar.gz
/bottles-3.0.8.tar.gz
/bottles-3.0.9.tar.gz
/bottles-3.1.0.tar.gz
/bottles-3.1.1.tar.gz
/bottles-3.1.2.tar.gz
/bottles-3.1.3.tar.gz
/bottles-3.1.4.tar.gz
/bottles-3.1.5.tar.gz
/bottles-3.1.6.tar.gz
/bottles-3.1.7.tar.gz
/bottles-3.1.8.tar.gz
/bottles-3.1.9.tar.gz
/bottles-3.1.10.tar.gz
/bottles-3.1.11.tar.gz
/bottles-3.1.12.tar.gz
/bottles-3.1.13.tar.gz
/bottles-3.1.14.tar.gz
/bottles-3.1.15.tar.gz
/bottles-2021.7.3.tar.gz
/bottles-2021.7.14.tar.gz
/bottles-2021.7.28.tar.gz
/bottles-2021.8.14.tar.gz
/bottles-2021.8.28.tar.gz
/bottles-2021.9.14.tar.gz
/bottles-2021.9.28.tar.gz
/bottles-2021.10.14.tar.gz
/bottles-2021.10.28.tar.gz
/bottles-2021.11.14.tar.gz
/bottles-2021.11.28.tar.gz
/bottles-2021.12.14.tar.gz
/bottles-2021.12.28.tar.gz
/bottles-2022.1.14.tar.gz
/bottles-2022.1.28.tar.gz
/bottles-2022.2.14.tar.gz
/bottles-2022.2.28.tar.gz
/bottles-2022.3.14.tar.gz
/bottles-2022.3.28.tar.gz
/bottles-2022.4.14.tar.gz
/bottles-2022.4.28.tar.gz
/bottles-2022.5.2.tar.gz
/bottles-2022.5.14.tar.gz
/bottles-2022.5.28-trento-3.tar.gz
/bottles-2022.6.14-brescia-1.tar.gz
/bottles-2022.7.14-brescia-3.tar.gz
/Bottles-51.6.tar.gz
/Bottles-51.9.tar.gz
/Bottles-51.10.tar.gz
/Bottles*tar.gz
require*.txt

View file

@ -0,0 +1,34 @@
From cb8cd4567cd34aac692672362cb87e5f021660cf Mon Sep 17 00:00:00 2001
From: Sandro <devel@penguinpee.nl>
Date: Mon, 4 Mar 2024 20:28:49 +0100
Subject: [PATCH 1/2] Make sure Paths.bottles exists
When calling `bottles foo.exe` either from the command line or by
opening the executable from the file browser with Bottles, Bottles will
throw a FileNotFoundError if Paths.bottles does not exist.
It seems check_app_dirs() is never called in that situation.
---
bottles/backend/managers/manager.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/bottles/backend/managers/manager.py b/bottles/backend/managers/manager.py
index 2a923ec8..42a87167 100644
--- a/bottles/backend/managers/manager.py
+++ b/bottles/backend/managers/manager.py
@@ -812,7 +812,11 @@ class Manager(metaclass=Singleton):
Check for local bottles and update the local_bottles list.
Will also mark the broken ones if the configuration file is missing
"""
- bottles = os.listdir(Paths.bottles)
+ try:
+ bottles = os.listdir(Paths.bottles)
+ except FileNotFoundError:
+ self.check_app_dirs()
+ bottles = []
# Empty local bottles
self.local_bottles = {}
--
2.47.0

View file

@ -0,0 +1,33 @@
From 5302231bc20db5912349bd3bce27df5a4acf9256 Mon Sep 17 00:00:00 2001
From: Sandro <devel@penguinpee.nl>
Date: Mon, 4 Mar 2024 21:45:51 +0100
Subject: [PATCH 2/2] Catch AttributeError in set_manager()
Return empty list if AttributeError is raised.
---
bottles/frontend/windows/main_window.py | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/bottles/frontend/windows/main_window.py b/bottles/frontend/windows/main_window.py
index 5fb9a15c..cd26408b 100644
--- a/bottles/frontend/windows/main_window.py
+++ b/bottles/frontend/windows/main_window.py
@@ -178,9 +178,12 @@ class MainWindow(Adw.ApplicationWindow):
def set_manager(result: Manager, error=None):
self.manager = result
- tmp_runners = [
- x for x in self.manager.runners_available if not x.startswith("sys-")
- ]
+ try:
+ tmp_runners = [
+ x for x in self.manager.runners_available if not x.startswith("sys-")
+ ]
+ except AttributeError:
+ tmp_runners = []
if len(tmp_runners) == 0:
self.show_onboard_view()
--
2.47.0

View file

@ -0,0 +1,33 @@
From 25ca897f6a04187cec0e06e4740abf8378cf0d43 Mon Sep 17 00:00:00 2001
From: Sandro <devel@penguinpee.nl>
Date: Sat, 9 Nov 2024 13:42:00 +0100
Subject: [PATCH] Catch AttributeError when window is closed
In certain situations Bottles crashes with:
__quit:AttributeError: 'Bottles' object has no attribute 'win'
This should allow Bottles to exit without error.
---
bottles/frontend/main.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/bottles/frontend/main.py b/bottles/frontend/main.py
index 5616ab22..7c44b585 100644
--- a/bottles/frontend/main.py
+++ b/bottles/frontend/main.py
@@ -260,7 +260,10 @@ class Bottles(Adw.Application):
logging.info(
_("[Quit] request received."),
)
- self.win.on_close_request()
+ try:
+ self.win.on_close_request()
+ except AttributeError:
+ pass
quit()
@staticmethod
--
2.47.0

View file

@ -0,0 +1,79 @@
From 77bc57c6a2468d4c28f9c8e80ca20fd4e2e48dfb Mon Sep 17 00:00:00 2001
From: Sandro <devel@penguinpee.nl>
Date: Sat, 9 Nov 2024 16:59:50 +0100
Subject: [PATCH] Use FileDialog for all file/path pickers
- Use `FileDialog` throughout
- Handle whatever `GLib.Error` throws our way
- Handle it the same way regardless of dialog
---
bottles/frontend/windows/launchoptions.py | 43 ++++++++++++++---------
1 file changed, 27 insertions(+), 16 deletions(-)
diff --git a/bottles/frontend/windows/launchoptions.py b/bottles/frontend/windows/launchoptions.py
index adb122a3..79dbedd6 100644
--- a/bottles/frontend/windows/launchoptions.py
+++ b/bottles/frontend/windows/launchoptions.py
@@ -279,6 +279,7 @@ class LaunchOptionsDialog(Adw.Window):
else:
# something else happened...
logging.warning("Error selecting post-run script: %s" % error)
+ pass
dialog = Gtk.FileDialog.new()
dialog.set_title("Select Post-run Script")
@@ -296,25 +297,35 @@ class LaunchOptionsDialog(Adw.Window):
self.btn_post_script_reset.set_visible(False)
def __choose_cwd(self, *_args):
- def set_path(dialog, response):
- if response != Gtk.ResponseType.ACCEPT:
- self.action_cwd.set_subtitle(self.__default_cwd_msg)
- return
-
- directory_path = dialog.get_file().get_path()
- self.program["folder"] = directory_path
- self.action_cwd.set_subtitle(directory_path)
- self.btn_cwd_reset.set_visible(True)
+ def set_path(dialog, result):
- dialog = Gtk.FileChooserNative.new(
- title=_("Select Working Directory"),
- parent=self.window,
- action=Gtk.FileChooserAction.SELECT_FOLDER,
- )
+ try:
+ directory = dialog.select_folder_finish(result)
+
+ if directory is None:
+ self.action_cwd.set_subtitle(
+ self.__default_cwd_msg)
+ return
+ directory_path = directory.get_path()
+ self.program["folder"] = directory_path
+ self.action_cwd.set_subtitle(directory_path)
+ self.btn_cwd_reset.set_visible(True)
+ except GLib.Error as error:
+ # also thrown when dialog has been cancelled
+ if error.code == 2:
+ # error 2 seems to be 'dismiss' or 'cancel'
+ if self.program["folder"] is None or self.program["folder"] == "":
+ self.action_cwd.set_subtitle(self.__default_cwd_msg)
+ else:
+ # something else happened...
+ logging.warning("Error selecting folder: %s" % error)
+ raise
+
+ dialog = Gtk.FileDialog.new()
+ dialog.set_title("Select Working Directory")
dialog.set_modal(True)
- dialog.connect("response", set_path)
- dialog.show()
+ dialog.select_folder(parent=self.window, callback=set_path)
def __reset_cwd(self, *_args):
"""
--
2.47.0

3
README.packit Normal file
View file

@ -0,0 +1,3 @@
This repository is maintained by packit.
https://packit.dev/
The file was generated using packit 0.102.1.post1.dev6+g64f7460b.

View file

@ -2,7 +2,7 @@
Name: bottles
Epoch: 1
Version: 51.10
Version: 51.15
Release: %autorelease
Summary: Run Windows in a Bottle
@ -15,45 +15,80 @@ Summary: Run Windows in a Bottle
License: GPL-3.0-or-later AND MIT
URL: %{forgeurl}
Source0: %{forgesource}
# Make sure bottles dir exists when opening executable directly
# https://bugzilla.redhat.com/show_bug.cgi?id=2249922
# https://bugzilla.redhat.com/show_bug.cgi?id=2257180
Patch: 0001-Make-sure-Paths.bottles-exists.patch
# Don't fail on AttributeError
# https://bugzilla.redhat.com/show_bug.cgi?id=2260135
Patch: 0002-Catch-AttributeError-in-set_manager.patch
# Catch AttributeError when closing window
# https://bugzilla.redhat.com/show_bug.cgi?id=2313567
Patch: 0003-Catch-AttributeError-when-window-is-closed.patch
# Attempt to prevent segfaults when picking files
# https://bugzilla.redhat.com/show_bug.cgi?id=2296214
Patch: 0004-Use-FileDialog-for-all-file-path-pickers.patch
BuildArch: noarch
# blueprint-compiler does not work on s390x:
# https://gitlab.gnome.org/jwestman/blueprint-compiler/-/issues/96
ExcludeArch: s390x
BuildArch: noarch
BuildRequires: desktop-file-utils
BuildRequires: libappstream-glib
BuildRequires: meson
BuildRequires: python3
BuildRequires: desktop-file-utils
BuildRequires: libappstream-glib
BuildRequires: meson
BuildRequires: python3
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(gtk4)
BuildRequires: pkgconfig(libadwaita-1) >= 1.1.99
BuildRequires: blueprint-compiler
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(gtk4)
BuildRequires: pkgconfig(libadwaita-1) >= 1.1.99
Requires: cabextract
Requires: glibc(x86-32) %dnl # https://github.com/bottlesdevs/Bottles/issues/601#issuecomment-936772762
Requires: gtk4
Requires: gtksourceview5
Requires: hicolor-icon-theme
Requires: libadwaita >= 1.1.99
Requires: p7zip p7zip-plugins %dnl # needed by the dependencies manager
Requires: patool
Requires: xdpyinfo %dnl # needed by the display util
Requires: ImageMagick %dnl # https://bugzilla.redhat.com/show_bug.cgi?id=2227538
BuildRequires: blueprint-compiler
# Use `generate_requires.sh` to generate Python runtime dependencies
# using upstream's `requirements.txt`, which is included in the tarball,
# but not used by Meson.
Requires: python3dist(pyyaml)
Requires: python3dist(pycurl)
Requires: python3dist(chardet)
Requires: python3dist(requests)
Requires: python3dist(markdown)
Requires: python3dist(icoextract)
Requires: python3dist(patool)
Requires: python3dist(pathvalidate)
Requires: python3dist(fvs)
Requires: python3dist(orjson)
Requires: python3dist(pycairo)
Requires: python3dist(pygobject)
Requires: python3dist(charset-normalizer)
Requires: python3dist(idna)
Requires: python3dist(urllib3)
Requires: python3dist(certifi)
Requires: python3dist(pefile)
Requires: cabextract
Requires: glibc(x86-32) %dnl # https://github.com/bottlesdevs/Bottles/issues/601#issuecomment-936772762
Requires: gtk4
Requires: gtksourceview5
Requires: hicolor-icon-theme
Requires: libadwaita >= 1.1.99
Requires: p7zip p7zip-plugins %dnl # needed by the dependencies manager
Requires: patool
Requires: python3-gobject
Requires: python3-icoextract %dnl # icons support
Requires: python3-markdown
Requires: python3-patool
Requires: python3-pefile %dnl # icons support
Requires: python3-pyyaml
Requires: python3-requests %dnl # needed by the download manager
Requires: python3-urllib3 %dnl # needed by the download manager
Requires: xdpyinfo %dnl # needed by the display util
Requires: python3-pathvalidate
Requires: python3-fvs
Requires: python3-vkbasalt-cli
Requires: ImageMagick %dnl # https://bugzilla.redhat.com/show_bug.cgi?id=2227538
Requires: python3-chardet %dnl # https://bugzilla.redhat.com/show_bug.cgi?id=2240292
# Requirements not listed in upstream's `requirements.txt`
Requires: python3dist(vkbasalt-cli)
# Optional dependencies which may be required for running 32-bit bottles.
# We recommend those in order to allow users to opt out.
Recommends: freetype.i686
Recommends: mesa-dri-drivers.i686
Recommends: mesa-filesystem.i686
Recommends: mesa-libEGL.i686
Recommends: mesa-libgbm.i686
Recommends: mesa-libglapi.i686
Recommends: mesa-libGL.i686
Recommends: mesa-libGLU.i686
Recommends: mesa-va-drivers.i686
Recommends: mesa-vulkan-drivers.i686
Recommends: SDL2.i686
Recommends: vulkan-loader.i686
%description
Bottles lets you run Windows software on Linux, such as applications

28
generate_requires.sh Executable file
View file

@ -0,0 +1,28 @@
#!/bin/bash
SPEC_FILE="bottles.spec"
REQUIREMENTS_FILE="requirements.txt"
REQUIREMENTS_SPEC="requires.txt"
# Remove file(s) from previous run
[ -f ${REQUIREMENTS_SPEC} ] && rm -vf ${REQUIREMENTS_SPEC}
[ -f ${REQUIREMENTS_FILE} ] && rm -vf ${REQUIREMENTS_FILE}
# Make sure sources are present
spectool -gSf ${SPEC_FILE} 2>/dev/null
TARBALL="$(rpmspec --parse bottles.spec 2>/dev/null | grep Source0 | sed -r 's/^.*(Bottles.*)/\1/')"
TAR_REQ_FILE="$(tar tzf ${TARBALL} | grep ${REQUIREMENTS_FILE})"
tar -x ${TAR_REQ_FILE} --strip-components=1 -zf ${TARBALL}
# Remove version pinning from listed dependencies
# Require `requests`. The `use_chardet_on_py3` extra is not packaged in
# Fedora, but we have the required version of `chardet` present.
# Remove `wheel` from list - not a runtime requirement.
sed -r -i \
-e 's/(^.*)==.*$/\1/g' \
-e 's/(^requests)\[.*\]/\1/' \
-e '/wheel/d' \
requirements.txt
# Transform requirements for inclusion in spec file
for REQ in $(grep -v '^#' ${REQUIREMENTS_FILE}); do
echo "Requires: python3dist(${REQ@L})" >> ${REQUIREMENTS_SPEC}
done

View file

@ -1 +1 @@
SHA512 (Bottles-51.10.tar.gz) = a5d27f70d580cc115f797370437a41a0eeb7335e8278618415f7ba7268aae8102ba9ee8417723a731f677b7bf346773e5851f9021ff12bdec4305b436e589c24
SHA512 (Bottles-51.15.tar.gz) = 8917e519c6b537e54a2492b8b0955589e3d0ee2eddf59ba801e84a9f9790187e9f9d3dce990b90a7eb4fe612aaa59f98bc3368e9f43a298a59825b74b74e7ac2