diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 5a44d5442..9a58ab443 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -19,8 +19,8 @@ jobs: include: # A representative subset of environments - os: ubuntu-22.04 - python-version: '3.10' - toxenv: py310-llfuse + python-version: '3.11' + toxenv: py311-llfuse - os: ubuntu-24.04 python-version: '3.12' toxenv: py312-pyfuse3 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f7d449984..4cf7d6726 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,7 +48,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v6 with: - python-version: '3.10' + python-version: '3.11' - name: Install dependencies run: | python -m pip install --upgrade pip @@ -141,9 +141,9 @@ jobs: ${{ fromJSON( github.event_name == 'pull_request' && '{ "include": [ - {"os": "ubuntu-22.04", "python-version": "3.10", "toxenv": "mypy"}, + {"os": "ubuntu-22.04", "python-version": "3.11", "toxenv": "mypy"}, {"os": "ubuntu-22.04", "python-version": "3.11", "toxenv": "docs"}, - {"os": "ubuntu-22.04", "python-version": "3.10", "toxenv": "py310-llfuse"}, + {"os": "ubuntu-22.04", "python-version": "3.11", "toxenv": "py311-llfuse"}, {"os": "ubuntu-24.04", "python-version": "3.12", "toxenv": "py312-pyfuse3"}, {"os": "ubuntu-24.04", "python-version": "3.15-dev", "toxenv": "py315-mfusepy"} ] @@ -449,7 +449,6 @@ jobs: sudo -E pkg install -y rust sudo -E pkg install -y gmake sudo -E pkg install -y git - sudo -E pkg install -y python310 py310-sqlite3 sudo -E pkg install -y python311 py311-sqlite3 py311-pip py311-virtualenv sudo ln -sf /usr/local/bin/python3.11 /usr/local/bin/python3 sudo ln -sf /usr/local/bin/python3.11 /usr/local/bin/python @@ -563,7 +562,7 @@ jobs: pkgman install -y git pkgconfig lz4 pkgman install -y openssl3 pkgman install -y rust_bin - pkgman install -y python3.10 + pkgman install -y python3.11 pkgman install -y cffi pkgman install -y lz4_devel openssl3_devel libffi_devel diff --git a/Vagrantfile b/Vagrantfile index b79bb1869..efed7895b 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -43,7 +43,6 @@ def packages_freebsd pkg install -y fusefs-libs3 || true pkg install -y rust pkg install -y git bash # fakeroot causes lots of troubles on freebsd - pkg install -y python310 py310-sqlite3 pkg install -y python311 py311-sqlite3 py311-pip py311-virtualenv # make sure there is a python3/pip3/virtualenv command ln -sf /usr/local/bin/python3.11 /usr/local/bin/python3 diff --git a/docs/installation.rst b/docs/installation.rst index f37609534..62c326098 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -161,7 +161,7 @@ To install Borg from a source package (including pip), you have to install the following dependencies first. For the libraries you will also need their development header files (sometimes in a separate `-dev` or `-devel` package). -* `Python 3`_ >= 3.10.0 +* `Python 3`_ >= 3.11.0 * OpenSSL_ >= 1.1.1 (LibreSSL will not work) * libacl_ (which depends on libattr_) * liblz4_ >= 1.7.0 (r129) @@ -493,9 +493,9 @@ If you need to use a different version of Python you can install this using ``py ... # create a virtual environment - pyenv install 3.10.0 # minimum, preferably use something more recent! - pyenv global 3.10.0 - pyenv local 3.10.0 + pyenv install 3.11.0 # minimum, preferably use something more recent! + pyenv global 3.11.0 + pyenv local 3.11.0 virtualenv --python=${pyenv which python} borg-env source borg-env/bin/activate # always before using! ... diff --git a/pyproject.toml b/pyproject.toml index a4323abf5..f524033cf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ maintainers = [ {name="Thomas Waldmann", email="tw@waldmann-edv.de"}, ] description = "Deduplicated, encrypted, authenticated, and compressed backups" -requires-python = ">=3.10" +requires-python = ">=3.11" keywords = ["backup", "borgbackup"] classifiers = [ "Development Status :: 4 - Beta", @@ -19,7 +19,6 @@ classifiers = [ "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", @@ -97,7 +96,7 @@ skip-magic-trailing-comma = true [tool.ruff] line-length = 120 -target-version = "py310" +target-version = "py311" # Exclude a variety of commonly ignored directories. exclude = [ @@ -154,7 +153,7 @@ dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" markers = [] [tool.mypy] -python_version = "3.10" +python_version = "3.11" strict_optional = false local_partial_types = true show_error_codes = true @@ -176,7 +175,7 @@ ignore_missing_imports = true requires = ["tox>=4.19", "pkgconfig", "cython", "wheel", "setuptools_scm"] # Important: when adding/removing Python versions here, # also update the section "Test environments with different FUSE implementations" accordingly. -env_list = ["py{310,311,312,313,314,315}-{none,llfuse,pyfuse3,mfusepy}", "docs", "ruff", "mypy", "bandit"] +env_list = ["py{311,312,313,314,315}-{none,llfuse,pyfuse3,mfusepy}", "docs", "ruff", "mypy", "bandit"] [tool.tox.env_run_base] package = "editable-legacy" # without this it does not find setup_docs when running under fakeroot @@ -188,20 +187,6 @@ pass_env = ["*"] # fakeroot -u needs some env vars pass_env = ["*"] # needed by tox4, so env vars are visible for building borg # Test environments with different FUSE implementations -[tool.tox.env.py310-none] - -[tool.tox.env.py310-llfuse] -set_env = {BORG_FUSE_IMPL = "llfuse"} -extras = ["llfuse", "sftp", "s3", "rclone"] - -[tool.tox.env.py310-pyfuse3] -set_env = {BORG_FUSE_IMPL = "pyfuse3"} -extras = ["pyfuse3", "sftp", "s3", "rclone"] - -[tool.tox.env.py310-mfusepy] -set_env = {BORG_FUSE_IMPL = "mfusepy"} -extras = ["mfusepy", "sftp", "s3", "rclone"] - [tool.tox.env.py311-none] [tool.tox.env.py311-llfuse] diff --git a/src/borg/archiver/diff_cmd.py b/src/borg/archiver/diff_cmd.py index 22d424375..f7d82a593 100644 --- a/src/borg/archiver/diff_cmd.py +++ b/src/borg/archiver/diff_cmd.py @@ -187,7 +187,7 @@ class DiffMixIn: +++++++++++++++++++++++++++ The ``--format`` option uses Python's `format string syntax - `_. + `_. Examples: :: diff --git a/src/borg/archiver/help_cmd.py b/src/borg/archiver/help_cmd.py index b9cb05ff5..69612d514 100644 --- a/src/borg/archiver/help_cmd.py +++ b/src/borg/archiver/help_cmd.py @@ -368,11 +368,11 @@ class HelpMixIn: {now} The current local date and time, by default in ISO-8601 format. - You can also supply your own `format string `_, e.g. {now:%Y-%m-%d_%H:%M:%S} + You can also supply your own `format string `_, e.g. {now:%Y-%m-%d_%H:%M:%S} {utcnow} The current UTC date and time, by default in ISO-8601 format. - You can also supply your own `format string `_, e.g. {utcnow:%Y-%m-%d_%H:%M:%S} + You can also supply your own `format string `_, e.g. {utcnow:%Y-%m-%d_%H:%M:%S} {user} The user name (or UID, if no name is available) of the user running borg. diff --git a/src/borg/archiver/list_cmd.py b/src/borg/archiver/list_cmd.py index 98abd18c3..6fbae8dd6 100644 --- a/src/borg/archiver/list_cmd.py +++ b/src/borg/archiver/list_cmd.py @@ -73,7 +73,7 @@ class ListMixIn: +++++++++++++++++++++++++++ The ``--format`` option uses Python's `format string syntax - `_. + `_. Examples: :: diff --git a/src/borg/archiver/repo_list_cmd.py b/src/borg/archiver/repo_list_cmd.py index 64399288b..3eb228e6d 100644 --- a/src/borg/archiver/repo_list_cmd.py +++ b/src/borg/archiver/repo_list_cmd.py @@ -53,7 +53,7 @@ class RepoListMixIn: +++++++++++++++++++++++++++ The ``--format`` option uses Python's `format string syntax - `_. + `_. Examples: ::