Merge pull request #8065 from ThomasWaldmann/less-setuppy-1.4

Use less setup.py (1.4-maint)
This commit is contained in:
TW 2024-01-30 00:36:25 +01:00 committed by GitHub
commit 206f90f56a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 62 additions and 56 deletions

View File

@ -220,8 +220,8 @@ for easier use by packagers downstream.
When a command is added, a command line flag changed, added or removed,
the usage docs need to be rebuilt as well::
python setup.py build_usage
python setup.py build_man
python scripts/gendocs.py build_usage
python scripts/gendocs.py build_man
However, we prefer to do this as part of our :ref:`releasing`
preparations, so it is generally not necessary to update these when
@ -311,7 +311,11 @@ Checklist:
- Check version number of upcoming release in ``CHANGES.rst``.
- Render ``CHANGES.rst`` via ``make html`` and check for markup errors.
- Verify that ``MANIFEST.in``, ``pyproject.toml`` and ``setup.py`` are complete.
- ``python setup.py build_usage ; python setup.py build_man`` and commit.
- Run these commands and commit::
python scripts/gendocs.py build_usage
python scripts/gendocs.py build_man
- Tag the release::
git tag -s -m "tagged/signed release X.Y.Z" X.Y.Z

View File

@ -180,7 +180,7 @@ following dependencies first:
- Either pyfuse3_ (preferably, newer and maintained) or llfuse_ (older,
unmaintained now). See also the BORG_FUSE_IMPL env variable.
- See setup.py about the version requirements.
- See pyproject.toml about the version requirements.
If you have troubles finding the right package names, have a look at the
distribution specific sections below or the Vagrantfile in the git repository,

View File

@ -59,6 +59,5 @@ borgfs
.. Note::
``borgfs`` will be automatically provided if you used a distribution
package, ``pip`` or ``setup.py`` to install Borg. Users of the
standalone binary will have to manually create a symlink (see
:ref:`pyinstaller-binary`).
package or ``pip`` to install Borg. Users of the standalone binary will have
to manually create a symlink (see :ref:`pyinstaller-binary`).

View File

@ -127,7 +127,7 @@ dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
# ruff failures that appear with your change.
[tool.ruff.per-file-ignores]
"setup.py" = ["E501"]
"setup_docs.py" = ["E501"]
"scripts/gendocs.py" = ["E501"]
"src/borg/archive.py" = ["E501", "F401"]
"src/borg/archiver.py" = ["E501", "F401", "E722", "E741"]
"src/borg/cache.py" = ["E501", "E722"]

View File

@ -9,22 +9,6 @@ from collections import OrderedDict
from datetime import datetime, timezone
import time
from setuptools import Command
def long_desc_from_readme():
with open('README.rst') as fd:
long_description = fd.read()
# remove header, but have one \n before first headline
start = long_description.find('What is BorgBackup?')
assert start >= 0
long_description = '\n' + long_description[start:]
# remove badges
long_description = re.compile(r'^\.\. start-badges.*^\.\. end-badges', re.M | re.S).sub('', long_description)
# remove unknown directives
long_description = re.compile(r'^\.\. highlight:: \w+$', re.M).sub('', long_description)
return long_description
def format_metavar(option):
if option.nargs in ('*', '...'):
@ -37,18 +21,8 @@ def format_metavar(option):
raise ValueError(f'Can\'t format metavar {option.metavar}, unknown nargs {option.nargs}!')
class build_usage(Command):
description = "generate usage for each command"
user_options = [
('output=', 'O', 'output directory'),
]
def initialize_options(self):
pass
def finalize_options(self):
pass
class BuildUsage:
"""generate usage docs for each command"""
def run(self):
print('generating usage docs')
@ -64,6 +38,7 @@ class build_usage(Command):
#borgfs_parser = Archiver(prog='borgfs').build_parser()
self.generate_level("", parser, Archiver)
return 0
def generate_level(self, prefix, parser, Archiver, extra_choices=None):
is_subcommand = False
@ -133,10 +108,6 @@ class build_usage(Command):
# HTML output:
# A table using some column-spans
def html_write(s):
for line in s.splitlines():
fp.write(' ' + line + '\n')
rows = []
for group in parser._action_groups:
if group.title == 'Common options':
@ -271,10 +242,8 @@ class build_usage(Command):
fp.write(indent + option.ljust(padding) + desc + '\n')
class build_man(Command):
description = 'build man pages'
user_options = []
class BuildMan:
"""build man pages"""
see_also = {
'create': ('delete', 'prune', 'check', 'patterns', 'placeholders', 'compression'),
@ -315,12 +284,6 @@ class build_man(Command):
'umount': 'mount',
}
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
print('building man pages (in docs/man)', file=sys.stderr)
import borg
@ -334,6 +297,7 @@ class build_man(Command):
self.generate_level('', parser, Archiver, {'borgfs': borgfs_parser})
self.build_topic_pages(Archiver)
self.build_intro_page()
return 0
def generate_level(self, prefix, parser, Archiver, extra_choices=None):
is_subcommand = False
@ -552,3 +516,29 @@ class build_man(Command):
for option, desc in opts.items():
write(option.ljust(padding), desc)
def usage():
print(textwrap.dedent("""
Usage:
python scripts/gendocs.py build_usage # build usage documentation
python scripts/gendocs.py build_man # build man pages
"""))
def main(argv):
if len(argv) < 2 or len(argv) == 2 and argv[1] in ("-h", "--help"):
usage()
return 0
command = argv[1]
if command == "build_usage":
return BuildUsage().run()
if command == "build_man":
return BuildMan().run()
usage()
return 1
if __name__ == '__main__':
rc = main(sys.argv)
sys.exit(rc)

View File

@ -1,6 +1,7 @@
# borgbackup - main setup code (see also pyproject.toml and other setup_*.py files)
import os
import re
import sys
from collections import defaultdict
from glob import glob
@ -23,7 +24,6 @@ sys.path += [os.path.dirname(__file__)]
import setup_checksums
import setup_compress
import setup_crypto
import setup_docs
is_win32 = sys.platform.startswith('win32')
@ -141,8 +141,6 @@ class Clean(Command):
cmdclass = {
'build_ext': build_ext,
'build_usage': setup_docs.build_usage,
'build_man': setup_docs.build_man,
'sdist': Sdist,
'clean2': Clean,
}
@ -233,4 +231,19 @@ if not on_rtd:
# generate C code from Cython for THIS platform (and for all platform-independent Cython parts).
ext_modules = cythonize(ext_modules, **cython_opts)
setup(cmdclass=cmdclass, ext_modules=ext_modules, long_description=setup_docs.long_desc_from_readme())
def long_desc_from_readme():
with open('README.rst') as fd:
long_description = fd.read()
# remove header, but have one \n before first headline
start = long_description.find('What is BorgBackup?')
assert start >= 0
long_description = '\n' + long_description[start:]
# remove badges
long_description = re.compile(r'^\.\. start-badges.*^\.\. end-badges', re.M | re.S).sub('', long_description)
# remove unknown directives
long_description = re.compile(r'^\.\. highlight:: \w+$', re.M).sub('', long_description)
return long_description
setup(cmdclass=cmdclass, ext_modules=ext_modules, long_description=long_desc_from_readme())

View File

@ -5198,7 +5198,7 @@ class Archiver:
self.prerun_checks(logger, is_serve)
if not is_supported_msgpack():
logger.error("You do not have a supported version of the msgpack python package installed. Terminating.")
logger.error("This should never happen as specific, supported versions are required by our setup.py.")
logger.error("This should never happen as specific, supported versions are required by our pyproject.toml.")
logger.error("Do not contact borgbackup support about this.")
raise Error("unsupported msgpack version")
if is_slow_msgpack():

View File

@ -135,7 +135,7 @@ def is_slow_msgpack():
def is_supported_msgpack():
# DO NOT CHANGE OR REMOVE! See also requirements and comments in setup.py.
# DO NOT CHANGE OR REMOVE! See also requirements and comments in pyproject.toml.
import msgpack
return (1, 0, 3) <= msgpack.version <= (1, 0, 7) and \
msgpack.version not in [] # < add bad releases here to deny list