[metadata]
name = borgbackup
author = The Borg Collective (see AUTHORS file)
description = Deduplicated, encrypted, authenticated and compressed backups
url = https://borgbackup.org
keywords =
  backup
  borgbackup
classifiers =
    Development Status :: 3 - Alpha
    Environment :: Console
    Intended Audience :: System Administrators
    License :: OSI Approved :: BSD License
    Operating System :: POSIX :: BSD :: FreeBSD
    Operating System :: POSIX :: BSD :: OpenBSD
    Operating System :: POSIX :: BSD :: NetBSD
    Operating System :: MacOS :: MacOS X
    Operating System :: POSIX :: Linux
    Programming Language :: Python
    Programming Language :: Python :: 3
    Programming Language :: Python :: 3.9
    Programming Language :: Python :: 3.10
    Topic :: Security :: Cryptography
    Topic :: System :: Archiving :: Backup
platforms = Linux, MacOS X, FreeBSD, OpenBSD, NetBSD
license = BSD
license_file = LICENSE
project_urls =
    Bug Tracker = https://github.com/borgbackup/borg/issues
    Documentation = https://borgbackup.readthedocs.io
    Source Code = https://github.com/borgbackup/borg

[options]
packages = find:
package_dir =
    =src
python_requires = >=3.9
setup_requires =
   setuptools_scm[toml] >= 6.2
install_requires =
  msgpack >=1.0.3, <=1.0.3
  packaging
  argon2-cffi
tests_require =
  pytest
zip_safe = False
# See also the MANIFEST.in file.
# We want to install all the files in the package directories...
include_package_data = true

# ...except the source files which have been compiled (C extensions):
[options.exclude_package_data]
* =
    *.c
    *.h
    *.pyx

[options.packages.find]
where = src

[options.entry_points]
console_scripts =
    borg = borg.archiver:main
    borgfs = borg.archiver:main

[options.extras_require]
llfuse = llfuse >= 1.3.8
pyfuse3 = pyfuse3 >= 3.1.1
nofuse =

[tool:pytest]
python_files = testsuite/*.py
markers =
    allow_cache_wipe

[flake8]
# for reference ...
#   E121 continuation line under-indented for hanging indent
#   E122 continuation line missing indentation or outdented
#   E123 closing bracket does not match indentation of opening bracket's line
#   E125 continuation line with same indent as next logical line
#   E126 continuation line over-indented for hanging indent
#   E127 continuation line over-indented for visual indent
#   E128 continuation line under-indented for visual indent
#   E221 multiple spaces before operator
#   E226 missing whitespace around arithmetic operator
#   E261 at least two spaces before inline comment
#   E265 block comment should start with '# '
#   E301 expected 1 blank line
#   E305 expected 2 blank lines after class or function definition
#   E401 multiple imports on one line
#   E402 module level import not at top
#   E501 line too long
#   E722 do not use bare except
#   E731 do not assign a lambda expression, use def
#   E741 ambiguous variable name
#   F401 import unused
#   F403 from ... import * used, unable to detect undefined names
#   F405 undefined or defined from star imports
#   F811 redef of unused var
#   F821 undefined name
#   W391 blank line at end of file
#   #### Pick either W503, or W504 - latest recommendation from pep8 is to ignore W503
#   W503 line break before binary operator
#   W504 line break after binary operator

# borg code style guidelines:
ignore = E226, W503

# Code style violation exceptions:
# please note that the values are adjusted so that they do not cause failures
# with existing code. if you want to change them, you should first fix all
# flake8 failures that appear with your change.
per_file_ignores =
    docs/conf.py:E121,E126,E265,E305,E401,E402
    src/borg/archive.py:E122,E125,E127,E402,E501,F401,F405,W504
    src/borg/archiver.py:E126,E127,E128,E501,E722,E731,E741,F401,F405,W504
    src/borg/cache.py:E127,E128,E402,E501,E722,W504
    src/borg/fuse.py:E402,E501,E722,W504
    src/borg/fuse_impl.py:F811
    src/borg/locking.py:E128,E501,E722
    src/borg/remote.py:E128,E501,F405
    src/borg/repository.py:E126,E128,E501,F401,F405,W504
    src/borg/shellpattern.py:E501
    src/borg/upgrader.py:E501
    src/borg/xattr.py:E402
    src/borg/crypto/key.py:E125,E128,E402,E501,F401,F405,W504
    src/borg/crypto/keymanager.py:E126,E128,E501,F401
    src/borg/crypto/nonces.py:E128,E501
    src/borg/helpers/__init__.py:F401,F405
    src/borg/helpers/checks.py:F401
    src/borg/helpers/errors.py:F405
    src/borg/helpers/fs.py:F405
    src/borg/helpers/manifest.py:E128,E402,E501,F405
    src/borg/helpers/misc.py:E402,E722,F401,F405
    src/borg/helpers/msgpack.py:E127,F405
    src/borg/helpers/parseformat.py:E402,E501,E741,F401,F405
    src/borg/helpers/process.py:E402,F401,W504
    src/borg/helpers/progress.py:E402
    src/borg/platform/__init__.py:F401,F811
    src/borg/platform/base.py:E402
    src/borg/testsuite/__init__.py:E501,F401
    src/borg/testsuite/archive.py:E128,W504
    src/borg/testsuite/archiver.py:E128,E501,E722,F401,F405,F811
    src/borg/testsuite/benchmark.py:F401,F811
    src/borg/testsuite/chunker.py:E501,F405
    src/borg/testsuite/chunker_pytest.py:F401
    src/borg/testsuite/chunker_slow.py:F405
    src/borg/testsuite/crypto.py:E126,E501,E741
    src/borg/testsuite/file_integrity.py:F401
    src/borg/testsuite/hashindex.py:F401
    src/borg/testsuite/helpers.py:E126,E127,E128,E501,F401
    src/borg/testsuite/key.py:E501,F401
    src/borg/testsuite/locking.py:E126,E128,E501,E722,F401
    src/borg/testsuite/patterns.py:E123
    src/borg/testsuite/platform.py:E128,E501,F401,F811
    src/borg/testsuite/repository.py:E128,E501,F401
    src/borg/testsuite/shellpattern.py:E123
    src/borg/testsuite/upgrader.py:F405

max_line_length = 120
exclude = build,dist,.git,.idea,.cache,.tox