Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-llfuse for openSUSE:Factory checked in at 2023-08-14 22:35:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-llfuse (Old) and /work/SRC/openSUSE:Factory/.python-llfuse.new.11712 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-llfuse" Mon Aug 14 22:35:32 2023 rev:3 rq:1103750 version:1.5.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-llfuse/python-llfuse.changes 2022-07-26 19:44:26.567634620 +0200 +++ /work/SRC/openSUSE:Factory/.python-llfuse.new.11712/python-llfuse.changes 2023-08-14 22:35:39.868379795 +0200 @@ -1,0 +2,15 @@ +Sun Aug 13 19:56:14 UTC 2023 - Dirk Müller <[email protected]> + +- update to 1.5.0: + * Note: this is first pyfuse3 release supporting the Cython + 3.0.0 release. + * Cythonized using Cython 3.0.0 release. + * Drop Python 3.5, 3.6, 3.7 support, see #69. + * Minimum requirement is Python 3.8 now. + * Get rid of PyEval_InitThreads, #55. + * CI: also test on python 3.12 / cython 3.0 release + * Tell Cython that callbacks may raise exceptions, #90. + * Misc. CI, testing, build related fixes/improvements. +- drop fix-test-for-fusermount.patch (upstream) + +------------------------------------------------------------------- Old: ---- fix-test-for-fusermount.patch python-llfuse-release-1.4.2.tar.gz New: ---- python-llfuse-release-1.5.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-llfuse.spec ++++++ --- /var/tmp/diff_new_pack.nzFivy/_old 2023-08-14 22:35:40.608384500 +0200 +++ /var/tmp/diff_new_pack.nzFivy/_new 2023-08-14 22:35:40.608384500 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-llfuse # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,21 +16,20 @@ # -%{?!python_module:%define python_module() python-%{**} python3-%{**}} -%define skip_python2 1 +%{?sle15_python_module_pythons} Name: python-llfuse -Version: 1.4.2 +Version: 1.5.0 Release: 0 Summary: Python Bindings for the low-level FUSE API License: LGPL-2.1-or-later Group: Development/Libraries/Python URL: https://github.com/python-llfuse/python-llfuse Source: https://github.com/python-llfuse/python-llfuse/archive/release-%{version}.tar.gz#/python-llfuse-release-%{version}.tar.gz -Patch0: fix-test-for-fusermount.patch BuildRequires: %{python_module Cython} -BuildRequires: %{python_module devel} +BuildRequires: %{python_module devel >= 3.8} BuildRequires: %{python_module pytest} BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module sqlite3} BuildRequires: dos2unix BuildRequires: fdupes BuildRequires: fuse-devel >= 2.8.0 @@ -54,8 +53,7 @@ used by other projects as well. %prep -%setup -q -n python-llfuse-release-%{version} -%patch0 -p1 +%autosetup -p1 -n python-llfuse-release-%{version} dos2unix README.rst %build ++++++ python-llfuse-release-1.4.2.tar.gz -> python-llfuse-release-1.5.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/.github/workflows/test.yml new/python-llfuse-release-1.5.0/.github/workflows/test.yml --- old/python-llfuse-release-1.4.2/.github/workflows/test.yml 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/.github/workflows/test.yml 2023-08-07 17:55:50.000000000 +0200 @@ -11,8 +11,9 @@ strategy: fail-fast: false matrix: - python-version: ["3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11-dev"] - os: [ubuntu-latest] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12-dev"] + cython-version: ["0.29", "3.0"] + os: [ubuntu-20.04] steps: - uses: actions/checkout@v2 @@ -24,15 +25,26 @@ - name: Install Linux dependencies run: | - sudo apt-get install -y libattr1-dev - sudo apt-get install -y pkg-config - sudo apt-get install -y gcc - sudo apt-get install -y libfuse-dev + sudo apt-get update + sudo apt-get install -y libattr1-dev libfuse-dev + sudo apt-get install -y pkg-config gcc - - name: Install Python dependencies - run: | - test/ci-install.sh + - name: Install Python dependencies (misc) + run: pip install setuptools pytest sphinx + + - name: Install Python dependencies (Cython 0.29) + if: ${{ matrix.cython-version == '0.29' }} + run: pip install "Cython<3" + + - name: Install Python dependencies (Cython 3.0) + if: ${{ matrix.cython-version == '3.0' }} + run: pip install "Cython>=3" - name: Test run: | - test/ci-test.sh + set -e + python setup.py build_cython + python setup.py build_ext --inplace + pytest -v -rs test/ + + sphinx-build -b html rst doc/html diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/.gitignore new/python-llfuse-release-1.5.0/.gitignore --- old/python-llfuse-release-1.4.2/.gitignore 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/.gitignore 2023-08-07 17:55:50.000000000 +0200 @@ -7,3 +7,5 @@ *.pyc src/llfuse.c src/llfuse*.so +.idea +.pytest_cache diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/Changes.rst new/python-llfuse-release-1.5.0/Changes.rst --- old/python-llfuse-release-1.4.2/Changes.rst 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/Changes.rst 2023-08-07 17:55:50.000000000 +0200 @@ -6,6 +6,38 @@ **WARNING**: Python-LLFUSE is no longer actively developed. +Release 1.5.0 (2023-08-08) +========================== + +- Note: this is first pyfuse3 release supporting the Cython 3.0.0 release. +- Cythonized using Cython 3.0.0 release. +- Drop Python 3.5, 3.6, 3.7 support, see #69. + Minimum requirement is Python 3.8 now. +- Get rid of PyEval_InitThreads, #55. +- CI: also test on python 3.12 / cython 3.0 release +- Tell Cython that callbacks may raise exceptions, #90. +- Misc. CI, testing, build related fixes/improvements. + + +Release 1.4.4 (2023-05-21) +========================== + +- CI: use the matrix for cy/py combinations, support and test on Cython 3 beta +- cy3: cdef void* f(void* d) noexcept with gil, #78 +- cy3: cdef nogil -> noexcept nogil +- tests: use shutil.which() instead of which(1) executable +- tests/examples: fix tmpfs: backport fix from pyfuse3 +- tests/examples: fix lltest: add statfs implementation, remove -l from umount + +Release 1.4.3 (2023-05-09) +========================== + +* cythonize with Cython 0.29.34 (brings python 3.12 support) +* also test on python 3.12-dev +* add a minimal pyproject.toml, #70 +* fix basedir in setup.py (malfunctioned with pip install -e .) +* tests: fix integer overflow on 32-bit architectures + Release 1.4.2 (2022-05-31) ========================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/Include/fuse_lowlevel.pxd new/python-llfuse-release-1.5.0/Include/fuse_lowlevel.pxd --- old/python-llfuse-release-1.4.2/Include/fuse_lowlevel.pxd 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/Include/fuse_lowlevel.pxd 2023-08-07 17:55:50.000000000 +0200 @@ -54,66 +54,69 @@ int FUSE_SET_ATTR_ATIME_NOW int FUSE_SET_ATTR_MTIME_NOW + # Request handlers + # We allow these functions to raise exceptions because we will catch them + # when checking exception status on return from fuse_session_process_buf(). struct fuse_lowlevel_ops: - void (*init) (void *userdata, fuse_conn_info *conn) - void (*destroy) (void *userdata) - void (*lookup) (fuse_req_t req, fuse_ino_t parent, const_char *name) - void (*forget) (fuse_req_t req, fuse_ino_t ino, ulong_t nlookup) + void (*init) (void *userdata, fuse_conn_info *conn) except * + void (*destroy) (void *userdata) except * + void (*lookup) (fuse_req_t req, fuse_ino_t parent, const_char *name) except * + void (*forget) (fuse_req_t req, fuse_ino_t ino, ulong_t nlookup) except * void (*getattr) (fuse_req_t req, fuse_ino_t ino, - fuse_file_info *fi) + fuse_file_info *fi) except * void (*setattr) (fuse_req_t req, fuse_ino_t ino, struct_stat *attr, - int to_set, fuse_file_info *fi) - void (*readlink) (fuse_req_t req, fuse_ino_t ino) + int to_set, fuse_file_info *fi) except * + void (*readlink) (fuse_req_t req, fuse_ino_t ino) except * void (*mknod) (fuse_req_t req, fuse_ino_t parent, const_char *name, - mode_t mode, dev_t rdev) + mode_t mode, dev_t rdev) except * void (*mkdir) (fuse_req_t req, fuse_ino_t parent, const_char *name, - mode_t mode) - void (*unlink) (fuse_req_t req, fuse_ino_t parent, const_char *name) - void (*rmdir) (fuse_req_t req, fuse_ino_t parent, const_char *name) + mode_t mode) except * + void (*unlink) (fuse_req_t req, fuse_ino_t parent, const_char *name) except * + void (*rmdir) (fuse_req_t req, fuse_ino_t parent, const_char *name) except * void (*symlink) (fuse_req_t req, const_char *link, fuse_ino_t parent, - const_char *name) + const_char *name) except * void (*rename) (fuse_req_t req, fuse_ino_t parent, const_char *name, - fuse_ino_t newparent, const_char *newname) + fuse_ino_t newparent, const_char *newname) except * void (*link) (fuse_req_t req, fuse_ino_t ino, fuse_ino_t newparent, - const_char *newname) + const_char *newname) except * void (*open) (fuse_req_t req, fuse_ino_t ino, - fuse_file_info *fi) + fuse_file_info *fi) except * void (*read) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, - fuse_file_info *fi) + fuse_file_info *fi) except * void (*write) (fuse_req_t req, fuse_ino_t ino, const_char *buf, - size_t size, off_t off, fuse_file_info *fi) + size_t size, off_t off, fuse_file_info *fi) except * void (*flush) (fuse_req_t req, fuse_ino_t ino, - fuse_file_info *fi) + fuse_file_info *fi) except * void (*release) (fuse_req_t req, fuse_ino_t ino, - fuse_file_info *fi) + fuse_file_info *fi) except * void (*fsync) (fuse_req_t req, fuse_ino_t ino, int datasync, - fuse_file_info *fi) + fuse_file_info *fi) except * void (*opendir) (fuse_req_t req, fuse_ino_t ino, - fuse_file_info *fi) + fuse_file_info *fi) except * void (*readdir) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, - fuse_file_info *fi) + fuse_file_info *fi) except * void (*releasedir) (fuse_req_t req, fuse_ino_t ino, - fuse_file_info *fi) + fuse_file_info *fi) except * void (*fsyncdir) (fuse_req_t req, fuse_ino_t ino, int datasync, - fuse_file_info *fi) - void (*statfs) (fuse_req_t req, fuse_ino_t ino) + fuse_file_info *fi) except * + void (*statfs) (fuse_req_t req, fuse_ino_t ino) except * void (*setxattr) (fuse_req_t req, fuse_ino_t ino, const_char *name, - const_char *value, size_t size, int flags) + const_char *value, size_t size, int flags) except * void (*getxattr) (fuse_req_t req, fuse_ino_t ino, const_char *name, - size_t size) - void (*listxattr) (fuse_req_t req, fuse_ino_t ino, size_t size) - void (*removexattr) (fuse_req_t req, fuse_ino_t ino, const_char *name) - void (*access) (fuse_req_t req, fuse_ino_t ino, int mask) + size_t size) except * + void (*listxattr) (fuse_req_t req, fuse_ino_t ino, size_t size) except * + void (*removexattr) (fuse_req_t req, fuse_ino_t ino, const_char *name) except * + void (*access) (fuse_req_t req, fuse_ino_t ino, int mask) except * void (*create) (fuse_req_t req, fuse_ino_t parent, const_char *name, - mode_t mode, fuse_file_info *fi) + mode_t mode, fuse_file_info *fi) except * void (*write_buf) (fuse_req_t req, fuse_ino_t ino, fuse_bufvec *bufv, - off_t off, fuse_file_info *fi) + off_t off, fuse_file_info *fi) except * void (*retrieve_reply) (fuse_req_t req, void *cookie, fuse_ino_t ino, - off_t offset, fuse_bufvec *bufv) + off_t offset, fuse_bufvec *bufv) except * void (*forget_multi) (fuse_req_t req, size_t count, - fuse_forget_data *forgets) + fuse_forget_data *forgets) except * void (*fallocate) (fuse_req_t req, fuse_ino_t ino, int mode, - off_t offset, off_t length, fuse_file_info *fi) + off_t offset, off_t length, fuse_file_info *fi) except * int fuse_reply_err(fuse_req_t req, int err) void fuse_reply_none(fuse_req_t req) @@ -164,7 +167,7 @@ int fuse_session_receive_buf(fuse_session *se, fuse_buf *buf, fuse_chan **chp) void fuse_session_process_buf(fuse_session *se, - fuse_buf *buf, fuse_chan *ch) + fuse_buf *buf, fuse_chan *ch) except * void fuse_session_remove_chan(fuse_chan *ch) void fuse_session_reset(fuse_session *se) void fuse_session_exit(fuse_session *se) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/MANIFEST.in new/python-llfuse-release-1.5.0/MANIFEST.in --- old/python-llfuse-release-1.4.2/MANIFEST.in 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/MANIFEST.in 2023-08-07 17:55:50.000000000 +0200 @@ -7,6 +7,7 @@ graft util graft test prune test/.cache +prune test/.pytest_cache exclude MANIFEST.in recursive-include src *.pyx *.pxi *.c *.h global-exclude *.pyc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/developer-notes/release-process.md new/python-llfuse-release-1.5.0/developer-notes/release-process.md --- old/python-llfuse-release-1.4.2/developer-notes/release-process.md 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/developer-notes/release-process.md 2023-08-07 17:55:50.000000000 +0200 @@ -6,7 +6,7 @@ # Releasing a new version # * `export DEVELOPER_MODE=0` # or just not have it set - * Bump version in `setup.py` + * Bump version in `setup.py` and version/release in `rst/conf.py` * Add release date to `Changes.rst` * Check `git status` to avoid undesired files in the tarball. * `./setup.py build_cython` @@ -14,8 +14,7 @@ * Extract tarball in temporary directory, * `./setup.py build_ext --inplace && python3 -m pytest test` * Run tests under valgrind. Build python `--with-valgrind --with-pydebug`, then `valgrind --trace-children=yes "--trace-children-skip=*mount*" python-dbg -m pytest test/` - * `./setup.py build_sphinx` - * `./setup.py upload_docs` + * `sphinx-build -b html rst doc/html` * `./util/sdist-sign 1.2.3` # use real version number, have GPG ready * `./util/upload-pypi 1.2.3` # use real version number, have twine installed * git commit, git tag -s diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/examples/lltest.py new/python-llfuse-release-1.5.0/examples/lltest.py --- old/python-llfuse-release-1.4.2/examples/lltest.py 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/examples/lltest.py 2023-08-07 17:55:50.000000000 +0200 @@ -91,7 +91,25 @@ # only one entry if off == 0: - yield (self.hello_name, self.getattr(self.hello_inode), 1) + yield (self.hello_name, self.getattr(self.hello_inode), self.hello_inode) + + def statfs(self, ctx): + stat_ = llfuse.StatvfsData() + + stat_.f_bsize = 512 + stat_.f_frsize = 512 + + size = 1024 * stat_.f_frsize + stat_.f_blocks = size // stat_.f_frsize + stat_.f_bfree = max(size // stat_.f_frsize, 1024) + stat_.f_bavail = stat_.f_bfree + + inodes = 100 + stat_.f_files = inodes + stat_.f_ffree = max(inodes, 100) + stat_.f_favail = stat_.f_ffree + + return stat_ def open(self, inode, flags, ctx): if inode != self.hello_inode: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/examples/tmpfs.py new/python-llfuse-release-1.5.0/examples/tmpfs.py --- old/python-llfuse-release-1.4.2/examples/tmpfs.py 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/examples/tmpfs.py 2023-08-07 17:55:50.000000000 +0200 @@ -146,7 +146,10 @@ def getattr(self, inode, ctx=None): - row = self.get_row('SELECT * FROM inodes WHERE id=?', (inode,)) + try: + row = self.get_row('SELECT * FROM inodes WHERE id=?', (inode,)) + except NoSuchRowError: + raise(llfuse.FUSEError(errno.ENOENT)) entry = llfuse.EntryAttributes() entry.st_ino = inode @@ -258,8 +261,8 @@ def link(self, inode, new_inode_p, new_name, ctx): entry_p = self.getattr(new_inode_p) if entry_p.st_nlink == 0: - log.warn('Attempted to create entry %s with unlinked parent %d', - new_name, new_inode_p) + log.warning('Attempted to create entry %s with unlinked parent %d', + new_name, new_inode_p) raise FUSEError(errno.EINVAL) self.cursor.execute("INSERT INTO contents (name, inode, parent_inode) VALUES(?,?,?)", @@ -346,8 +349,8 @@ def _create(self, inode_p, name, mode, ctx, rdev=0, target=None): if self.getattr(inode_p).st_nlink == 0: - log.warn('Attempted to create entry %s with unlinked parent %d', - name, inode_p) + log.warning('Attempted to create entry %s with unlinked parent %d', + name, inode_p) raise FUSEError(errno.EINVAL) now_ns = int(time() * 1e9) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/pyproject.toml new/python-llfuse-release-1.5.0/pyproject.toml --- old/python-llfuse-release-1.4.2/pyproject.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/python-llfuse-release-1.5.0/pyproject.toml 2023-08-07 17:55:50.000000000 +0200 @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/rst/conf.py new/python-llfuse-release-1.5.0/rst/conf.py --- old/python-llfuse-release-1.4.2/rst/conf.py 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/rst/conf.py 2023-08-07 17:55:50.000000000 +0200 @@ -52,16 +52,16 @@ # General information about the project. project = 'Python-LLFUSE' -copyright = '2010-2015, Nikolaus Rath' +copyright = '2010-2023, 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 # built documents. # # The short X.Y version. -version = '1.0' +version = '1.5.0' # The full version, including alpha/beta/rc tags. -release = '1.0' +release = version + '' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -74,7 +74,7 @@ #today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. -unused_docs = [ ] +unused_docs = [] # List of directories, relative to source directory, that shouldn't be searched # for source files. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/rst/install.rst new/python-llfuse-release-1.5.0/rst/install.rst --- old/python-llfuse-release-1.4.2/rst/install.rst 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/rst/install.rst 2023-08-07 17:55:50.000000000 +0200 @@ -68,7 +68,7 @@ python setup.py build_cython python setup.py build_ext --inplace python -m pytest test/ - python setup.py build_sphinx + sphinx-build -b html rst doc/html python setup.py install diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/setup.cfg new/python-llfuse-release-1.5.0/setup.cfg --- old/python-llfuse-release-1.4.2/setup.cfg 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/setup.cfg 2023-08-07 17:55:50.000000000 +0200 @@ -1,3 +0,0 @@ -[build_sphinx] -source-dir = rst -build-dir = doc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/setup.py new/python-llfuse-release-1.5.0/setup.py --- old/python-llfuse-release-1.4.2/setup.py 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/setup.py 2023-08-07 17:55:50.000000000 +0200 @@ -32,16 +32,10 @@ module = sys.modules['Cython.Distutils.build_ext'] del module.build_ext -try: - import setuptools -except ImportError: - raise SystemExit('Setuptools package not found. Please install from ' - 'https://pypi.python.org/pypi/setuptools') +import setuptools from setuptools import Extension -from distutils.version import LooseVersion -# Add util to load path -basedir = os.path.abspath(os.path.dirname(sys.argv[0])) +basedir = os.path.abspath(os.path.dirname(__file__)) sys.path.insert(0, os.path.join(basedir, 'util')) # when running with DEVELOPER_MODE=1 in the environment: @@ -50,25 +44,13 @@ if DEVELOPER_MODE: print('running in developer mode') warnings.resetwarnings() - # We can't use `error`, because e.g. Sphinx triggers a - # DeprecationWarning. warnings.simplefilter('default') -# Add src to load path, important for Sphinx autodoc -# to work properly -sys.path.insert(0, os.path.join(basedir, 'src')) -LLFUSE_VERSION = '1.4.2' +LLFUSE_VERSION = '1.5.0' def main(): - try: - from sphinx.application import Sphinx #pylint: disable-msg=W0612 - except ImportError: - pass - else: - fix_docutils() - with open(os.path.join(basedir, 'README.rst')) as fh: long_desc = fh.read() @@ -128,13 +110,11 @@ 'Intended Audience :: Developers', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: System :: Filesystems', 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)', @@ -145,19 +125,13 @@ keywords=['FUSE', 'python' ], package_dir={'': 'src'}, packages=setuptools.find_packages('src'), - python_requires='>=3.5', + python_requires='>=3.8', tests_require=['pytest >= 3.4.0'], provides=['llfuse'], ext_modules=[Extension('llfuse', c_sources, extra_compile_args=compile_args, extra_link_args=link_args)], - cmdclass={'upload_docs': upload_docs, - 'build_cython': build_cython }, - command_options={ - 'build_sphinx': { - 'version': ('setup.py', LLFUSE_VERSION), - 'release': ('setup.py', LLFUSE_VERSION), - }}, + cmdclass={'build_cython': build_cython}, ) @@ -192,21 +166,6 @@ return cflags.decode('us-ascii').split() -class upload_docs(setuptools.Command): - user_options = [] - boolean_options = [] - description = "Upload documentation" - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - subprocess.check_call(['rsync', '-aHv', '--del', os.path.join(basedir, 'doc', 'html') + '/', - 'ebox.rath.org:/srv/www.rath.org/llfuse-docs/']) - class build_cython(setuptools.Command): user_options = [] boolean_options = [] @@ -225,11 +184,7 @@ stderr=subprocess.STDOUT) except OSError: raise SystemExit('Cython needs to be installed for this command') - - hit = re.match('^Cython version (.+)$', version) - if not hit or LooseVersion(hit.group(1)) < "0.29": - # in fact, we need a very recent Cython version (like 0.29.21) to support py39 - raise SystemExit('Need Cython 0.29 or newer, found ' + version) + print(f"Using {version.strip()}.") cmd = ['cython', '-Wextra', '--force', '-3', '--fast-fail', '--directive', 'embedsignature=True', '--include-dir', @@ -250,30 +205,6 @@ if subprocess.call(cmd + [path + '.pyx']) != 0: raise SystemExit('Cython compilation failed') -def fix_docutils(): - '''Work around https://bitbucket.org/birkenfeld/sphinx/issue/1154/''' - - import docutils.parsers - from docutils.parsers import rst - old_getclass = docutils.parsers.get_parser_class - - # Check if bug is there - try: - old_getclass('rst') - except AttributeError: - pass - else: - return - - def get_parser_class(parser_name): - """Return the Parser class from the `parser_name` module.""" - if parser_name in ('rst', 'restructuredtext'): - return rst.Parser - else: - return old_getclass(parser_name) - docutils.parsers.get_parser_class = get_parser_class - - assert docutils.parsers.get_parser_class('rst') is rst.Parser if __name__ == '__main__': main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/src/fuse_api.pxi new/python-llfuse-release-1.5.0/src/fuse_api.pxi --- old/python-llfuse-release-1.4.2/src/fuse_api.pxi 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/src/fuse_api.pxi 2023-08-07 17:55:50.000000000 +0200 @@ -372,7 +372,7 @@ void* buf size_t bufsize -cdef void* worker_start(void* data) with gil: +cdef void* worker_start(void* data) noexcept with gil: cdef worker_data_t *wd cdef int res cdef uintptr_t tid @@ -387,7 +387,7 @@ session_loop(wd.buf, wd.bufsize) except: fuse_session_exit(session) - tid = wd.thread_id + tid = <uintptr_t> wd.thread_id log.error('FUSE worker thread %d terminated with exception, ' 'aborting processing', tid) res = pthread_mutex_lock(&exc_info_mutex) @@ -424,7 +424,6 @@ sigaddset(&newset, signal.SIGHUP); sigaddset(&newset, signal.SIGQUIT); - PyEval_InitThreads() bufsize = fuse_chan_bufsize(channel) wd = <worker_data_t*> calloc_or_raise(workers, sizeof(worker_data_t)) try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/src/llfuse.pyx new/python-llfuse-release-1.5.0/src/llfuse.pyx --- old/python-llfuse-release-1.4.2/src/llfuse.pyx 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/src/llfuse.pyx 2023-08-07 17:55:50.000000000 +0200 @@ -95,7 +95,6 @@ EDEADLK cdef extern from "Python.h" nogil: - void PyEval_InitThreads() int PY_SSIZE_T_MAX # Actually passed as -D to cc (and defined in setup.py) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/src/misc.pxi new/python-llfuse-release-1.5.0/src/misc.pxi --- old/python-llfuse-release-1.4.2/src/misc.pxi 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/src/misc.pxi 2023-08-07 17:55:50.000000000 +0200 @@ -685,13 +685,13 @@ cap.ptr = ptr return cap -cdef void signal_handler(int sig, siginfo_t *si, void* ctx) nogil: +cdef void signal_handler(int sig, siginfo_t *si, void* ctx) noexcept nogil: global exit_reason if session != NULL: fuse_session_exit(session) exit_reason = sig -cdef void do_nothing(int sig, siginfo_t *si, void* ctx) nogil: +cdef void do_nothing(int sig, siginfo_t *si, void* ctx) noexcept nogil: pass cdef int sigaction_p(int sig, sigaction_t *sa, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/test/ci-install.sh new/python-llfuse-release-1.5.0/test/ci-install.sh --- old/python-llfuse-release-1.4.2/test/ci-install.sh 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/test/ci-install.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +0,0 @@ -#!/bin/sh - -set -e - -pip install pytest cython sphinx -cython --version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/test/ci-test.sh new/python-llfuse-release-1.5.0/test/ci-test.sh --- old/python-llfuse-release-1.4.2/test/ci-test.sh 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/test/ci-test.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -#!/bin/bash - -set -e - -python setup.py build_cython -python setup.py build_ext --inplace -python -m pytest test/ - -python setup.py build_sphinx diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/test/conftest.py new/python-llfuse-release-1.5.0/test/conftest.py --- old/python-llfuse-release-1.4.2/test/conftest.py 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/test/conftest.py 2023-08-07 17:55:50.000000000 +0200 @@ -38,7 +38,7 @@ # example, if a request handler raises an exception, the server first signals an # error to FUSE (causing the test to fail), and then logs the exception. Without # the extra delay, the exception will go into nowhere. [email protected] [email protected](hookwrapper=True) def pytest_pyfunc_call(pyfuncitem): outcome = yield failed = outcome.excinfo is not None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/test/test_examples.py new/python-llfuse-release-1.5.0/test/test_examples.py --- old/python-llfuse-release-1.4.2/test/test_examples.py 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/test/test_examples.py 2023-08-07 17:55:50.000000000 +0200 @@ -340,8 +340,10 @@ os.mkdir(filename) fstat = os.lstat(filename) - # Approximately 100 years - secs = 100 * 365 * 24 * 3600 + 999 + # Approximately 67 years, ending in 999. + # Note: 67 years were chosen to avoid y2038 issues (1970 + 67 = 2037). + # Testing these is **not** in scope of this test. + secs = 67 * 365 * 24 * 3600 + 999 # Max nanos nanos = _NANOS_PER_SEC - 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/test/util.py new/python-llfuse-release-1.5.0/test/util.py --- old/python-llfuse-release-1.4.2/test/util.py 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/test/util.py 2023-08-07 17:55:50.000000000 +0200 @@ -10,6 +10,7 @@ import platform +import shutil import subprocess import pytest import os @@ -30,15 +31,9 @@ return pytest.mark.uses_fuse() skip = lambda x: pytest.mark.skip(reason=x) - # Python 2.x: Popen is not a context manager... - which = subprocess.Popen(['which', 'fusermount'], stdout=subprocess.PIPE, - universal_newlines=True) - try: - fusermount_path = which.communicate()[0].strip() - finally: - which.wait() + fusermount_path = shutil.which("fusermount") - if not fusermount_path or which.returncode != 0: + if fusermount_path is None: return skip("Can't find fusermount executable") if not os.path.exists('/dev/fuse'): @@ -106,7 +101,7 @@ def umount(mount_process, mnt_dir): if platform.system() == 'Darwin': - subprocess.check_call(['umount', '-l', mnt_dir]) + subprocess.check_call(['umount', mnt_dir]) else: subprocess.check_call(['fusermount', '-z', '-u', mnt_dir]) assert not os.path.ismount(mnt_dir) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-llfuse-release-1.4.2/util/upload-pypi new/python-llfuse-release-1.5.0/util/upload-pypi --- old/python-llfuse-release-1.4.2/util/upload-pypi 2022-05-31 17:23:32.000000000 +0200 +++ new/python-llfuse-release-1.5.0/util/upload-pypi 2023-08-07 17:55:50.000000000 +0200 @@ -15,4 +15,4 @@ D=dist/llfuse-$R.tar.gz -twine upload $D.asc $D +twine upload $D
