From 0eb7ae061e9daef9c9c33a5d1a502b5df30bdd0c Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 15:32:23 +0100 Subject: [PATCH 01/11] use SPDX license metadata, fixes #104 --- pyproject.toml | 2 +- setup.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index fed528d..ef5db1b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,3 @@ [build-system] -requires = ["setuptools"] +requires = ["setuptools >= 78.1.1"] build-backend = "setuptools.build_meta" diff --git a/setup.py b/setup.py index 9654af7..189be5d 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ Copyright (c) 2010 Nikolaus Rath This file is part of Python-LLFUSE. This work may be distributed under -the terms of the GNU LGPL. +the terms of the GNU LGPL-2.0-or-later. ''' @@ -105,7 +105,8 @@ def main(): author='Nikolaus Rath', author_email='Nikolaus@rath.org', url='https://github.com/python-llfuse/python-llfuse/', - license='LGPL', + license='LGPL-2.0-or-later', + license_files=['LICENSE'], classifiers=['Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'Programming Language :: Python', @@ -119,7 +120,6 @@ def main(): 'Programming Language :: Python :: 3.14', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: System :: Filesystems', - 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)', 'Operating System :: POSIX :: Linux', 'Operating System :: MacOS :: MacOS X', 'Operating System :: POSIX :: BSD :: FreeBSD'], From bd54371747a313b91c1372ad47163d042e3fa90a Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 15:43:51 +0100 Subject: [PATCH 02/11] CI: test on Python 3.14 release --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2bf34a8..d95487b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,13 +11,13 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14-dev"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] cython-version: ["0.29", "3"] os: [ubuntu-24.04] exclude: - python-version: "3.13" cython-version: "0.29" - - python-version: "3.14-dev" + - python-version: "3.14" cython-version: "0.29" steps: From afabb4cdaeb0ea31007396ed54ee4d526da6b98a Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 17:44:42 +0100 Subject: [PATCH 03/11] setup.py: remove tests_require python-llfuse-env/lib/python3.11/site-packages/setuptools/_distutils/dist.py:289: UserWarning: Unknown distribution option: 'tests_require' --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 189be5d..0d6f206 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ Copyright (c) 2010 Nikolaus Rath This file is part of Python-LLFUSE. This work may be distributed under -the terms of the GNU LGPL-2.0-or-later. +the terms of the GNU LGPL. ''' @@ -128,7 +128,6 @@ def main(): package_dir={'': 'src'}, packages=setuptools.find_packages('src'), python_requires='>=3.8', - tests_require=['pytest >= 3.4.0'], provides=['llfuse'], ext_modules=[Extension('llfuse', c_sources, extra_compile_args=compile_args, From 9f3745c6d0667d9ae8733345b0674d8da09d6fa9 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 18:01:27 +0100 Subject: [PATCH 04/11] get rid of sphinx build warnings, fixes #56 --- src/fuse_api.pxi | 2 +- src/misc.pxi | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/fuse_api.pxi b/src/fuse_api.pxi index a156f21..fa731a6 100644 --- a/src/fuse_api.pxi +++ b/src/fuse_api.pxi @@ -272,7 +272,7 @@ def main(workers=None, handle_signals=True): and the function to return. *SIGINT* (Ctrl-C) will thus *not* result in a `KeyboardInterrupt` exception while this function is runnning. Note setting *handle_signals* to `False` means you must handle the signals - by yourself and call `stop` to make the `main` returns. + by yourself and call ``stop`` to make the `main` returns. When the function returns because the file system has received an unmount request it will return `None`. If it returns because it has received a diff --git a/src/misc.pxi b/src/misc.pxi index d93667c..79a02ff 100644 --- a/src/misc.pxi +++ b/src/misc.pxi @@ -199,7 +199,7 @@ cdef class Lock: def yield_(self, count=1): '''Yield global lock to a different thread - A call to `~Lock.yield_` is roughly similar to:: + A call to ``~Lock.yield_`` is roughly similar to:: for i in range(count): if no_threads_waiting_for(lock): @@ -207,8 +207,8 @@ cdef class Lock: lock.release() lock.acquire() - However, when using `~Lock.yield_` it is guaranteed that the lock will - actually be passed to a different thread (the above pseude-code may + However, when using ``~Lock.yield_`` it is guaranteed that the lock will + actually be passed to a different thread (the above pseudocode may result in the same thread re-acquiring the lock *count* times). ''' From 39216b7c32dd9b0869b50a19ca3481e37a0b6264 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 18:15:16 +0100 Subject: [PATCH 05/11] 2025 --- rst/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rst/conf.py b/rst/conf.py index 13f7835..69fe5ce 100644 --- a/rst/conf.py +++ b/rst/conf.py @@ -52,7 +52,7 @@ # General information about the project. project = 'Python-LLFUSE' -copyright = '2010-2024, Nikolaus Rath' +copyright = '2010-2025, Nikolaus Rath' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the From 6a29c4894eced676fe3a5e61f9d55e12f1193539 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 18:28:20 +0100 Subject: [PATCH 06/11] README: link to mfusepy project --- README.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.rst b/README.rst index 3dbcfb4..46ec1cc 100644 --- a/README.rst +++ b/README.rst @@ -14,6 +14,8 @@ The Python-LLFUSE Module Python-LLFUSE is no longer actively developed and just receiving community-contributed maintenance to keep it alive for some time. +A good alternative for some use cases might be `mfusepy `_. + Python-LLFUSE is a set of Python bindings for the low level FUSE_ API. It requires at least FUSE 2.8.0 and supports both Python 2.x and 3.x. Like FUSE itself, Python-LLFUSE is developed for Linux systems, From 7466ec6eb8e5bd35fde243efa5eb5631d66ee7df Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 18:47:34 +0100 Subject: [PATCH 07/11] remove empty setup.cfg --- setup.cfg | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 setup.cfg diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index e69de29..0000000 From d8a55514a03b7edaeece826d2111dbc536839b31 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 19:21:33 +0100 Subject: [PATCH 08/11] macOS: work around compiler warning --- src/darwin_compat.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/darwin_compat.c b/src/darwin_compat.c index c9cbafe..4daf634 100644 --- a/src/darwin_compat.c +++ b/src/darwin_compat.c @@ -10,6 +10,11 @@ #include #include +static void _unlock_mutex(void *mutex) +{ + pthread_mutex_unlock((pthread_mutex_t *)mutex); +} + /* * Semaphore implementation based on: * @@ -152,7 +157,7 @@ darwin_sem_timedwait(darwin_sem_t *sem, const struct timespec *abs_timeout) return -1; } - pthread_cleanup_push((void(*)(void*))&pthread_mutex_unlock, + pthread_cleanup_push(&_unlock_mutex, &sem->__data.local.count_lock); pthread_mutex_lock(&sem->__data.local.count_lock); @@ -213,7 +218,7 @@ darwin_sem_wait(darwin_sem_t *sem) /* Must be volatile or will be clobbered by longjmp */ volatile int res = 0; - pthread_cleanup_push((void(*)(void*))&pthread_mutex_unlock, + pthread_cleanup_push(&_unlock_mutex, &sem->__data.local.count_lock); pthread_mutex_lock(&sem->__data.local.count_lock); From 7e01be2159135ef38aba2c71bf2b20b4691f416b Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 19:37:22 +0100 Subject: [PATCH 09/11] improve upload-pypi script using TWINE_REPOSITORY makes it easier to have different sections in ones ~/.pypirc. --- util/upload-pypi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/upload-pypi b/util/upload-pypi index 300b53a..f3d3ff1 100755 --- a/util/upload-pypi +++ b/util/upload-pypi @@ -8,9 +8,9 @@ if [ "$R" = "" ]; then fi if [ "$2" = "test" ]; then - export TWINE_REPOSITORY_URL=https://test.pypi.org/legacy/ + export TWINE_REPOSITORY=testllfuse else - export TWINE_REPOSITORY_URL= + export TWINE_REPOSITORY=llfuse fi D=dist/llfuse-$R.tar.gz From 6809766f12b4a4401e240a9d827035986284af0e Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 18:14:23 +0100 Subject: [PATCH 10/11] bump version to 1.5.2 --- rst/conf.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rst/conf.py b/rst/conf.py index 69fe5ce..7b2bf5d 100644 --- a/rst/conf.py +++ b/rst/conf.py @@ -59,7 +59,7 @@ # built documents. # # The short X.Y version. -version = '1.5.1' +version = '1.5.2' # The full version, including alpha/beta/rc tags. release = version + '' diff --git a/setup.py b/setup.py index 0d6f206..6e09f10 100755 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ warnings.simplefilter('default') -LLFUSE_VERSION = '1.5.1' +LLFUSE_VERSION = '1.5.2' def main(): From 55ade6c5e925b8c43980c1f42231d84e40561115 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 22 Dec 2025 18:23:57 +0100 Subject: [PATCH 11/11] update CHANGES --- Changes.rst | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Changes.rst b/Changes.rst index 9af791f..b49f05f 100644 --- a/Changes.rst +++ b/Changes.rst @@ -6,6 +6,21 @@ **WARNING**: Python-LLFUSE is no longer actively developed. +Release 1.5.2 (2025-12-22) +========================== + +- Support and test on Python 3.14 also. +- CI: test on Ubuntu 24.04 +- Cythonized using Cython 3.2.3. +- setup.py: + + - use SPDX license metadata (the old style was deprecated), + also require setuptools >= 78.1.1, #104 + - remove tests_require (not supported anymore) +- get rid of sphinx build warnings, #56 +- README: link to mfusepy project + + Release 1.5.1 (2024-08-31) ==========================