From cdf3f992e053f25662a42253289bc83cffe68533 Mon Sep 17 00:00:00 2001 From: Iustin Pop Date: Tue, 18 Apr 2023 22:23:26 +0200 Subject: [PATCH] New upstream version 0.8.1 --- MANIFEST.in | 4 +- Makefile | 6 +-- NEWS => NEWS.md | 82 +++++++++++++++--------------------- PKG-INFO | 8 ++-- README.md | 13 ++++-- doc/conf.py | 4 +- doc/contributing.md | 65 ++++++++++++++++++++++++++++ doc/index.rst | 4 +- doc/{news.rst => news.md} | 82 +++++++++++++++--------------------- doc/readme.md | 13 ++++-- doc/security.md | 16 +++++++ pyxattr.egg-info/PKG-INFO | 8 ++-- pyxattr.egg-info/SOURCES.txt | 6 ++- setup.py | 8 ++-- 14 files changed, 194 insertions(+), 125 deletions(-) rename NEWS => NEWS.md (92%) create mode 100644 doc/contributing.md rename doc/{news.rst => news.md} (92%) create mode 100644 doc/security.md diff --git a/MANIFEST.in b/MANIFEST.in index 4c29306..5d433d5 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,5 @@ include COPYING -include NEWS +include NEWS.md include README.md include Makefile include doc/conf.py @@ -7,6 +7,8 @@ include doc/index.rst include doc/module.rst include doc/news.md include doc/readme.md +include doc/contributing.md +include doc/security.md include setup.cfg include tests/test_xattr.py include tests/__init__.py diff --git a/Makefile b/Makefile index 0fe2199..f476054 100644 --- a/Makefile +++ b/Makefile @@ -5,13 +5,13 @@ DOCDIR = doc DOCHTML = $(DOCDIR)/html DOCTREES = $(DOCDIR)/doctrees ALLSPHINXOPTS = -d $(DOCTREES) $(SPHINXOPTS) $(DOCDIR) -VERSION = 0.8.0 +VERSION = 0.8.1 FULLVER = pyxattr-$(VERSION) DISTFILE = $(FULLVER).tar.gz MODNAME = xattr.so -RSTFILES = doc/index.rst doc/module.rst doc/news.rst doc/readme.md doc/conf.py -PYVERS = 3.7 3.8 3.9 3.10 +RSTFILES = doc/index.rst doc/module.rst doc/news.md doc/readme.md doc/conf.py +PYVERS = 3.7 3.8 3.9 3.10 3.11 REPS = 5 all: doc test diff --git a/NEWS b/NEWS.md similarity index 92% rename from NEWS rename to NEWS.md index d92f428..b021388 100644 --- a/NEWS +++ b/NEWS.md @@ -1,8 +1,17 @@ -News -==== +# News -Version 0.8.0 -------------- +## Version 0.8.1 + +*Mon, 17 Apr 2023* + +Very minor release: + +* Fix the pypi declared python versions +* Add some more documentation - a security policy, and a contributing + guide. +* Restore yet again the CI environment :/ + +## Version 0.8.0 *Mon, 12 Dec 2022* @@ -16,8 +25,7 @@ Python versions, only Python 3.7+ is supported. Otherwise: * Move fully to `setuptools` (where available), in preparation for 3.12 dropping `distutils` support. -Version 0.7.2 -------------- +## Version 0.7.2 *Sun, 29 Nov 2020* @@ -28,15 +36,13 @@ Minor release: * Enable testing with Python 3.9 and confirm compatibility with it. * Fix documentation building with Sphinx 3.0+. -Version 0.7.1 -------------- +## Version 0.7.1 *released Tue, 26 Nov 2019* Typo fix release in the bug tracker link :/ -Version 0.7.0 -------------- +## Version 0.7.0 *released Tue, 26 Nov 2019* @@ -54,8 +60,7 @@ Other changes: needed. Additionally, expand test coverage, although not directly visible in actual coverage reports… -Version 0.6.1 -------------- +## Version 0.6.1 *released Tue, 24 Jul 2018* @@ -76,8 +81,7 @@ Minor bugfix, performance and compatibility release. appreciated! This also uncovered testing problems related to symlinks, which are now fixed (the bug would be caught by the updated tests). -Version 0.6.0 -------------- +## Version 0.6.0 *released Mon, 23 Jan 2017* @@ -97,8 +101,7 @@ As feature release, OSX support was contributed by Adam Knight , thanks a lot! I don't have access to OSX so the testing for it is done via Travis builds; please report any issues. -Version 0.5.6 -------------- +## Version 0.5.6 *released Sat, 09 Apr 2016* @@ -110,8 +113,7 @@ Small bugfix release: Tested with Python 2.7.11, Python 3.5.1 and PyPy 5.0.1. -Version 0.5.5 -------------- +## Version 0.5.5 *released Fri, 01 May 2015* @@ -128,16 +130,14 @@ Bugfix release: making the code `-Wconversion`-clean (although that warning is not enabled by default) -Version 0.5.4 -------------- +## Version 0.5.4 *released Thu, 30 Apr 2015* Fix memory leaks on some of the error-handling paths of the `get()` function. -Version 0.5.3 -------------- +## Version 0.5.3 *released Fri, 23 May 2014* @@ -155,8 +155,7 @@ Small optimisations release: (e.g. when using SELinux, or NFSv4); to enable this, define the attributes in the TEST_IGNORE_XATTRS environment variable -Version 0.5.2 -------------- +## Version 0.5.2 *released Thu, 03 Jan 2013* @@ -166,8 +165,7 @@ PyArg_ParseTuple use of et# (signed vs. unsigned, and lack of compiler warnings). This was fixed, and now the test suite passed with many CPython versions and PyPy (version 1.9). -Version 0.5.1 -------------- +## Version 0.5.1 *released Wed, 16 May 2012* @@ -185,21 +183,18 @@ Also, the project home page has changed from SourceForge to GitHub, and the documentation has been converted from epydoc-based to sphinx. -Version 0.5 ------------ +## Version 0.5 *released Sun, 27 Dec 2009* Implemented support for Python 3. This required a significant change to the C module, hence the new version number. -Version 0.4 ------------ +## Version 0.4 *released Mon, 30 Jun 2008* -API -~~~ +### API The old functions ({get,set,list,remove}xattr) are deprecated and replaced with a new API that is namespace-aware and hopefully will allow other OSes (e.g. @@ -208,25 +203,21 @@ FreeBSD) to be supported more naturally. Both the old and the new API are supported in the 0.4 versions, however users are encouraged to migrate to the new API. -New features -~~~~~~~~~~~~ +### New features A new bulk get function called get_all() has been added that should be somewhat faster in case of querying files which have many attributes. -License -~~~~~~~ +### License Since LGPLv3 is not compatible with GPLv2 (which unfortunately I didn't realize before), the license was changed to LGPLv2.1 or later. -Internals -~~~~~~~~~ +### Internals Unittest coverage was improved. -Version 0.3 ------------ +## Version 0.3 *released Sun, 09 Mar 2008* @@ -234,15 +225,13 @@ Version 0.3 * changed listxattr return type from tuple to a list * developer-related: added unittests -Version 0.2.2 -------------- +## Version 0.2.2 *released Sun, 01 Jul 2007* * fixed listing symlink xattrs -Version 0.2.1 -------------- +## Version 0.2.1 *released Sat, 11 Feb 2006* @@ -250,8 +239,3 @@ Version 0.2.1 do it, actually) * fixed a possible memory leak when the actual read of the EA failed but the call to get the length of the EA didn't - -.. Local Variables: -.. mode: rst -.. fill-column: 72 -.. End: diff --git a/PKG-INFO b/PKG-INFO index b088a2d..f1dc7c1 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,9 +1,9 @@ Metadata-Version: 2.1 Name: pyxattr -Version: 0.8.0 +Version: 0.8.1 Summary: Filesystem extended attributes for python -Home-page: http://pyxattr.k1024.org/ -Download-URL: http://pyxattr.k1024.org/downloads/ +Home-page: https://pyxattr.k1024.org/ +Download-URL: https://pyxattr.k1024.org/downloads/ Author: Iustin Pop Author-email: iustin@k1024.org License: LGPL @@ -19,7 +19,7 @@ Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: POSIX :: Linux Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: System :: Filesystems -Requires-Python: >=3.4 +Requires-Python: >=3.7 License-File: COPYING This is a C extension module for Python which diff --git a/README.md b/README.md index 59e5c0f..4cb49a1 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ This is the pyxattr module, a Python extension module which gives access to the extended attributes for filesystem objects available in some operating systems. -[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/iustin/pyxattr/CI)](https://github.com/iustin/pyxattr/actions/workflows/ci.yml) +[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/iustin/pyxattr/ci.yml?branch=main)](https://github.com/iustin/pyxattr/actions/workflows/ci.yml) [![Codecov](https://img.shields.io/codecov/c/github/iustin/pyxattr)](https://codecov.io/gh/iustin/pyxattr) -[![Read the Docs](https://img.shields.io/readthedocs/pyxattr)](http://pyxattr.readthedocs.io/en/latest/?badge=latest) +[![Read the Docs](https://img.shields.io/readthedocs/pyxattr)](https://pyxattr.readthedocs.io/en/latest/?badge=latest) [![GitHub issues](https://img.shields.io/github/issues/iustin/pyxattr)](https://github.com/iustin/pyxattr/issues) ![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/iustin/pyxattr) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/iustin/pyxattr)](https://github.com/iustin/pyxattr/releases) @@ -16,11 +16,14 @@ operating systems. ![GitHub Release Date](https://img.shields.io/github/release-date/iustin/pyxattr) ![GitHub commits since latest release](https://img.shields.io/github/commits-since/iustin/pyxattr/latest) ![GitHub last commit](https://img.shields.io/github/last-commit/iustin/pyxattr) +[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/7236/badge)](https://bestpractices.coreinfrastructure.org/projects/7236) Downloads: go to . The source -repository is either at or at +repository is either at or at . +See the `CONTRIBUTING.md` file for details on how to contribute. + ## Requirements The current supported Python versions are 3.7+ (tested up to 3.10), or @@ -49,6 +52,10 @@ e.g. in Debian: sudo apt install python3-pyxattr +## Security + +For reporting security vulnerabilities, please see `SECURITY.md`. + ## Basic example >>> import xattr diff --git a/doc/conf.py b/doc/conf.py index f5b8ed8..6924552 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -48,9 +48,9 @@ copyright = u'2002, 2003, 2006, 2008, 2012, 2013, 2014, 2015, Iustin Pop' # built documents. # # The short X.Y version. -version = '0.8.0' +version = '0.8.1' # The full version, including alpha/beta/rc tags. -release = '0.8.0' +release = '0.8.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/contributing.md b/doc/contributing.md new file mode 100644 index 0000000..3e1a9d9 --- /dev/null +++ b/doc/contributing.md @@ -0,0 +1,65 @@ +# Contributing to pyxattr + +Hi, and thanks for any and all contributions! + +## Bugs and patches + +This is a small project, so let's keep things simple: + +- Please file all bug reports on github + (), as this allows + archival and discovery by other people; +- Send patches as pull requests; for larger changes, would be good to + first open a bug to discuss the plans; + +Due to simplicity, there are no old branches being kept alive, but if +it ever happens that a bug is found in older versions and there is +needed to support older Python versions, it is possible to do so. + +## Code standards + +There are no formal standards, but: + +- Code should be tested - this is why there's a [Codecov + integration](https://app.codecov.io/gh/iustin/pyxattr/tree/main). +- New functions should have good docstrings (in the C code). +- New functions/constants should be listed in the documentation, see + `doc/module.rst` for how to include them. +- All non-trivial changes should be listed in `NEWS.md` for further + inclusion in new releases documentation. Add an "unreleased" section + (if one doesn't exist yet) to list the changes. + +## Release process + +Right now, due to GPG signing, I'm doing releases and signing them +manually (offline, I mean). Basically, once GitHub workflows are fine: + +- Bump the version in all places - use `git grep -F $OLD_VER` and + update as needed. +- Ensure that `setup.py` has the right Python versions listed (bit me + more than once). +- Update the `NEWS.md` file is up to date (contents), and use the + right date. +- Check that the generated documentation (`make doc`) looks right. + +Then run these steps: + +``` +$ make clean +$ make distcheck # this leaves things in dist/ +$ git tag -m 'Release pyxattr-0.0.1' --sign v0.0.1 +$ gpg --sign -b -a dist/pyxattr-0.0.1.tar.gz +$ python3 -m twine upload dist/* +``` + +Separately: + +* Upload the `dist/` contents to GitHub and tag a new release. +* Upload the `dist/` contents to the old-style download area, + . + +Hopefully one day all this can be more automated. + +## Signing key + +The releases are currently signed by my key, see . diff --git a/doc/index.rst b/doc/index.rst index a918c2e..7179ace 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -12,7 +12,9 @@ Contents :maxdepth: 2 readme.md + contributing.md + security.md module.rst - news.rst + news.md Also see the :ref:`search`. diff --git a/doc/news.rst b/doc/news.md similarity index 92% rename from doc/news.rst rename to doc/news.md index d92f428..b021388 100644 --- a/doc/news.rst +++ b/doc/news.md @@ -1,8 +1,17 @@ -News -==== +# News -Version 0.8.0 -------------- +## Version 0.8.1 + +*Mon, 17 Apr 2023* + +Very minor release: + +* Fix the pypi declared python versions +* Add some more documentation - a security policy, and a contributing + guide. +* Restore yet again the CI environment :/ + +## Version 0.8.0 *Mon, 12 Dec 2022* @@ -16,8 +25,7 @@ Python versions, only Python 3.7+ is supported. Otherwise: * Move fully to `setuptools` (where available), in preparation for 3.12 dropping `distutils` support. -Version 0.7.2 -------------- +## Version 0.7.2 *Sun, 29 Nov 2020* @@ -28,15 +36,13 @@ Minor release: * Enable testing with Python 3.9 and confirm compatibility with it. * Fix documentation building with Sphinx 3.0+. -Version 0.7.1 -------------- +## Version 0.7.1 *released Tue, 26 Nov 2019* Typo fix release in the bug tracker link :/ -Version 0.7.0 -------------- +## Version 0.7.0 *released Tue, 26 Nov 2019* @@ -54,8 +60,7 @@ Other changes: needed. Additionally, expand test coverage, although not directly visible in actual coverage reports… -Version 0.6.1 -------------- +## Version 0.6.1 *released Tue, 24 Jul 2018* @@ -76,8 +81,7 @@ Minor bugfix, performance and compatibility release. appreciated! This also uncovered testing problems related to symlinks, which are now fixed (the bug would be caught by the updated tests). -Version 0.6.0 -------------- +## Version 0.6.0 *released Mon, 23 Jan 2017* @@ -97,8 +101,7 @@ As feature release, OSX support was contributed by Adam Knight , thanks a lot! I don't have access to OSX so the testing for it is done via Travis builds; please report any issues. -Version 0.5.6 -------------- +## Version 0.5.6 *released Sat, 09 Apr 2016* @@ -110,8 +113,7 @@ Small bugfix release: Tested with Python 2.7.11, Python 3.5.1 and PyPy 5.0.1. -Version 0.5.5 -------------- +## Version 0.5.5 *released Fri, 01 May 2015* @@ -128,16 +130,14 @@ Bugfix release: making the code `-Wconversion`-clean (although that warning is not enabled by default) -Version 0.5.4 -------------- +## Version 0.5.4 *released Thu, 30 Apr 2015* Fix memory leaks on some of the error-handling paths of the `get()` function. -Version 0.5.3 -------------- +## Version 0.5.3 *released Fri, 23 May 2014* @@ -155,8 +155,7 @@ Small optimisations release: (e.g. when using SELinux, or NFSv4); to enable this, define the attributes in the TEST_IGNORE_XATTRS environment variable -Version 0.5.2 -------------- +## Version 0.5.2 *released Thu, 03 Jan 2013* @@ -166,8 +165,7 @@ PyArg_ParseTuple use of et# (signed vs. unsigned, and lack of compiler warnings). This was fixed, and now the test suite passed with many CPython versions and PyPy (version 1.9). -Version 0.5.1 -------------- +## Version 0.5.1 *released Wed, 16 May 2012* @@ -185,21 +183,18 @@ Also, the project home page has changed from SourceForge to GitHub, and the documentation has been converted from epydoc-based to sphinx. -Version 0.5 ------------ +## Version 0.5 *released Sun, 27 Dec 2009* Implemented support for Python 3. This required a significant change to the C module, hence the new version number. -Version 0.4 ------------ +## Version 0.4 *released Mon, 30 Jun 2008* -API -~~~ +### API The old functions ({get,set,list,remove}xattr) are deprecated and replaced with a new API that is namespace-aware and hopefully will allow other OSes (e.g. @@ -208,25 +203,21 @@ FreeBSD) to be supported more naturally. Both the old and the new API are supported in the 0.4 versions, however users are encouraged to migrate to the new API. -New features -~~~~~~~~~~~~ +### New features A new bulk get function called get_all() has been added that should be somewhat faster in case of querying files which have many attributes. -License -~~~~~~~ +### License Since LGPLv3 is not compatible with GPLv2 (which unfortunately I didn't realize before), the license was changed to LGPLv2.1 or later. -Internals -~~~~~~~~~ +### Internals Unittest coverage was improved. -Version 0.3 ------------ +## Version 0.3 *released Sun, 09 Mar 2008* @@ -234,15 +225,13 @@ Version 0.3 * changed listxattr return type from tuple to a list * developer-related: added unittests -Version 0.2.2 -------------- +## Version 0.2.2 *released Sun, 01 Jul 2007* * fixed listing symlink xattrs -Version 0.2.1 -------------- +## Version 0.2.1 *released Sat, 11 Feb 2006* @@ -250,8 +239,3 @@ Version 0.2.1 do it, actually) * fixed a possible memory leak when the actual read of the EA failed but the call to get the length of the EA didn't - -.. Local Variables: -.. mode: rst -.. fill-column: 72 -.. End: diff --git a/doc/readme.md b/doc/readme.md index 59e5c0f..4cb49a1 100644 --- a/doc/readme.md +++ b/doc/readme.md @@ -4,9 +4,9 @@ This is the pyxattr module, a Python extension module which gives access to the extended attributes for filesystem objects available in some operating systems. -[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/iustin/pyxattr/CI)](https://github.com/iustin/pyxattr/actions/workflows/ci.yml) +[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/iustin/pyxattr/ci.yml?branch=main)](https://github.com/iustin/pyxattr/actions/workflows/ci.yml) [![Codecov](https://img.shields.io/codecov/c/github/iustin/pyxattr)](https://codecov.io/gh/iustin/pyxattr) -[![Read the Docs](https://img.shields.io/readthedocs/pyxattr)](http://pyxattr.readthedocs.io/en/latest/?badge=latest) +[![Read the Docs](https://img.shields.io/readthedocs/pyxattr)](https://pyxattr.readthedocs.io/en/latest/?badge=latest) [![GitHub issues](https://img.shields.io/github/issues/iustin/pyxattr)](https://github.com/iustin/pyxattr/issues) ![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/iustin/pyxattr) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/iustin/pyxattr)](https://github.com/iustin/pyxattr/releases) @@ -16,11 +16,14 @@ operating systems. ![GitHub Release Date](https://img.shields.io/github/release-date/iustin/pyxattr) ![GitHub commits since latest release](https://img.shields.io/github/commits-since/iustin/pyxattr/latest) ![GitHub last commit](https://img.shields.io/github/last-commit/iustin/pyxattr) +[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/7236/badge)](https://bestpractices.coreinfrastructure.org/projects/7236) Downloads: go to . The source -repository is either at or at +repository is either at or at . +See the `CONTRIBUTING.md` file for details on how to contribute. + ## Requirements The current supported Python versions are 3.7+ (tested up to 3.10), or @@ -49,6 +52,10 @@ e.g. in Debian: sudo apt install python3-pyxattr +## Security + +For reporting security vulnerabilities, please see `SECURITY.md`. + ## Basic example >>> import xattr diff --git a/doc/security.md b/doc/security.md new file mode 100644 index 0000000..dbd4a7c --- /dev/null +++ b/doc/security.md @@ -0,0 +1,16 @@ +# Security Policy + +To report a (potential or confirmed) security issue, please email + with a description of the issue, steps to reproduce +it, affected versions, and if known, mitigations for the issue. + +Since this is a small project, there's no list of supported +versions. I will attempt to reply to reports within a working week, +and to fix and disclose vulnerabilities within 90 days, but this is +not a guarantee. + +Optionally, you can encrypt the email with my GPG key, see for details +. + +Alternatively, you can use the GitHub "Private vulnerability +reporting" functionality (but note this is beta). diff --git a/pyxattr.egg-info/PKG-INFO b/pyxattr.egg-info/PKG-INFO index b088a2d..f1dc7c1 100644 --- a/pyxattr.egg-info/PKG-INFO +++ b/pyxattr.egg-info/PKG-INFO @@ -1,9 +1,9 @@ Metadata-Version: 2.1 Name: pyxattr -Version: 0.8.0 +Version: 0.8.1 Summary: Filesystem extended attributes for python -Home-page: http://pyxattr.k1024.org/ -Download-URL: http://pyxattr.k1024.org/downloads/ +Home-page: https://pyxattr.k1024.org/ +Download-URL: https://pyxattr.k1024.org/downloads/ Author: Iustin Pop Author-email: iustin@k1024.org License: LGPL @@ -19,7 +19,7 @@ Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: POSIX :: Linux Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: System :: Filesystems -Requires-Python: >=3.4 +Requires-Python: >=3.7 License-File: COPYING This is a C extension module for Python which diff --git a/pyxattr.egg-info/SOURCES.txt b/pyxattr.egg-info/SOURCES.txt index 14ef93e..7961cfa 100644 --- a/pyxattr.egg-info/SOURCES.txt +++ b/pyxattr.egg-info/SOURCES.txt @@ -1,16 +1,18 @@ COPYING MANIFEST.in Makefile -NEWS +NEWS.md README.md setup.cfg setup.py xattr.c doc/conf.py +doc/contributing.md doc/index.rst doc/module.rst -doc/news.rst +doc/news.md doc/readme.md +doc/security.md pyxattr.egg-info/PKG-INFO pyxattr.egg-info/SOURCES.txt pyxattr.egg-info/dependency_links.txt diff --git a/setup.py b/setup.py index d4b2c72..08247f7 100755 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ except ImportError: long_desc = """This is a C extension module for Python which implements extended attributes manipulation. It is a wrapper on top of the attr C library - see attr(5).""" -version = "0.8.0" +version = "0.8.1" author = "Iustin Pop" author_email = "iustin@k1024.org" libraries = [] @@ -24,8 +24,8 @@ setup(name = "pyxattr", long_description = long_desc, author = author, author_email = author_email, - url = "http://pyxattr.k1024.org/", - download_url = "http://pyxattr.k1024.org/downloads/", + url = "https://pyxattr.k1024.org/", + download_url = "https://pyxattr.k1024.org/downloads/", license = "LGPL", ext_modules = [Extension("xattr", ["xattr.c"], libraries=libraries, @@ -33,7 +33,7 @@ setup(name = "pyxattr", extra_compile_args=["-Wall", "-Werror", "-Wsign-compare"], )], platforms = ["Linux"], - python_requires = ">=3.4", + python_requires = ">=3.7", project_urls={ "Bug Tracker": "https://github.com/iustin/pyxattr/issues", }, -- 2.39.2