commit: 4e8d5935c6645419765bcfc2e651d54d0d2bb925 Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Sun Aug 3 19:51:33 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Sun Aug 3 19:51:33 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4e8d5935
app-backup/duplicity: fix log output w/ --concurrency; fix build w/ lld Closes: https://bugs.gentoo.org/946846 Closes: https://bugs.gentoo.org/960239 Signed-off-by: Sam James <sam <AT> gentoo.org> app-backup/duplicity/duplicity-3.0.5-r1.ebuild | 60 ++++++++++++++++++++++ ....5-TotalDestinationSizeChange-concurrency.patch | 57 ++++++++++++++++++++ ...uplicity-3.0.5-dont-repeat-standard-paths.patch | 20 ++++++++ 3 files changed, 137 insertions(+) diff --git a/app-backup/duplicity/duplicity-3.0.5-r1.ebuild b/app-backup/duplicity/duplicity-3.0.5-r1.ebuild new file mode 100644 index 000000000000..4f5a50ccfd1e --- /dev/null +++ b/app-backup/duplicity/duplicity-3.0.5-r1.ebuild @@ -0,0 +1,60 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{11..13} ) +DISTUTILS_USE_PEP517=setuptools +DISTUTILS_EXT=1 + +inherit distutils-r1 + +DESCRIPTION="Secure backup system using gnupg to encrypt data" +HOMEPAGE="https://duplicity.gitlab.io/" +SRC_URI="https://gitlab.com/duplicity/duplicity/-/archive/rel.${PV}/${PN}-rel.${PV}.tar.bz2" +S="${WORKDIR}"/${PN}-rel.${PV} + +LICENSE="GPL-3" +SLOT="0" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux ~x64-macos" +IUSE="s3 test" + +COMMON_DEPEND=" + net-libs/librsync + app-crypt/gnupg + dev-python/fasteners[${PYTHON_USEDEP}] +" +DEPEND=" + ${COMMON_DEPEND} + dev-python/setuptools[${PYTHON_USEDEP}] + dev-python/setuptools-scm[${PYTHON_USEDEP}] + test? ( + || ( app-arch/par2cmdline app-arch/par2cmdline-turbo ) + dev-python/pexpect[${PYTHON_USEDEP}] + ) +" +RDEPEND=" + ${COMMON_DEPEND} + dev-python/paramiko[${PYTHON_USEDEP}] + s3? ( dev-python/boto3[${PYTHON_USEDEP}] ) +" + +EPYTEST_DESELECT=( + # Linting tests (black, pylint, etc); not relevant for us + testing/test_code.py::CodeTest::test_black + testing/test_code.py::CodeTest::test_pep8 + testing/test_code.py::CodeTest::test_pylint +) + +PATCHES=( + "${FILESDIR}"/${PN}-3.0.4.0-fix-docs-cmd.patch + "${FILESDIR}"/${PN}-3.0.5-dont-repeat-standard-paths.patch + "${FILESDIR}"/${PN}-3.0.5-TotalDestinationSizeChange-concurrency.patch +) + +distutils_enable_tests pytest + +pkg_postinst() { + elog "Duplicity has many optional dependencies to support various backends." + elog "Currently it's up to you to install them as necessary." +} diff --git a/app-backup/duplicity/files/duplicity-3.0.5-TotalDestinationSizeChange-concurrency.patch b/app-backup/duplicity/files/duplicity-3.0.5-TotalDestinationSizeChange-concurrency.patch new file mode 100644 index 000000000000..be9e539ebeec --- /dev/null +++ b/app-backup/duplicity/files/duplicity-3.0.5-TotalDestinationSizeChange-concurrency.patch @@ -0,0 +1,57 @@ +https://bugs.gentoo.org/960239 +https://gitlab.com/duplicity/duplicity/-/commit/3bc1bb974c252ceb170b8e3edd8f791af30c719f + +From 3bc1bb974c252ceb170b8e3edd8f791af30c719f Mon Sep 17 00:00:00 2001 +From: Martin Wilck <[email protected]> +Date: Fri, 27 Jun 2025 14:53:12 +0000 +Subject: [PATCH] fix:usr: fix TotalDestinationSizeChange with concurrency. + +With --concurrency n (n \> 1), duplicity always prints TotalDestinationSizeChange 0 (0 bytes). + +Fix it by returning bytes_written from collect_put_results(). Fixes #880. +--- + duplicity/dup_main.py | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/duplicity/dup_main.py b/duplicity/dup_main.py +index b98dd7a4..b6f08984 100644 +--- a/duplicity/dup_main.py ++++ b/duplicity/dup_main.py +@@ -376,7 +376,8 @@ def write_multivol(backup_type, tarblock_iter, man_outfp, sig_outfp, backend): + transfer_success = False + manifest_written = False + +- def collect_put_results(bytes_written: int, backend_pooler, command2vol_map: Dict[int, CommandMetaData]): ++ def collect_put_results(backend_pooler, command2vol_map: Dict[int, CommandMetaData]): ++ bytes_written = 0 + for result in backend_pooler.results_since_last_call(): + track_id = result.track_id + size = result.result +@@ -392,6 +393,7 @@ def write_multivol(backup_type, tarblock_iter, man_outfp, sig_outfp, backend): + f"Transfer of {command2vol_map[track_id].path_obj.get_filename()} with id {track_id} and size " + f"{size} took {result.get_runtime()}" + ) ++ return bytes_written + + def write_manifest_in_sequence(mf, mf_file, command2vol_map: Dict[int, CommandMetaData]): + """ +@@ -499,7 +501,7 @@ def write_multivol(backup_type, tarblock_iter, man_outfp, sig_outfp, backend): + progress.report_transfer(0, tdp.getsize()) + track_id = backend_pooler.command_throttled(backend.put_validated.__name__, args=(tdp, dest_filename)) + command2vol_map[track_id] = CommandMetaData(vol_num, tdp, vi) +- collect_put_results(bytes_written, backend_pooler, command2vol_map) ++ bytes_written += collect_put_results(backend_pooler, command2vol_map) + write_manifest_in_sequence(mf, man_outfp, command2vol_map) + except (Exception, SystemExit) as e: + # ensure pool processes terminate clean +@@ -529,7 +531,7 @@ def write_multivol(backup_type, tarblock_iter, man_outfp, sig_outfp, backend): + # wait for background commands, collect some stats and shutdown clean. + log.Debug("Collecting remaining results from backend pool.") + while True and backend_pooler: +- collect_put_results(bytes_written, backend_pooler, command2vol_map) ++ bytes_written += collect_put_results(backend_pooler, command2vol_map) + write_manifest_in_sequence(mf, man_outfp, command2vol_map) + if backend_pooler.get_queue_length() == 0: + break +-- +GitLab diff --git a/app-backup/duplicity/files/duplicity-3.0.5-dont-repeat-standard-paths.patch b/app-backup/duplicity/files/duplicity-3.0.5-dont-repeat-standard-paths.patch new file mode 100644 index 000000000000..faa6428c8ec7 --- /dev/null +++ b/app-backup/duplicity/files/duplicity-3.0.5-dont-repeat-standard-paths.patch @@ -0,0 +1,20 @@ +The toolchain will already search these locations by default if appropriate, +but /usr/lib isn't right on a 64-bit system where native objects are in /usr/lib64 +and /usr/lib has multilib 32-bit ones. bfd warns on this but lld rejects it. + +https://bugs.gentoo.org/946846 +--- a/setup.py ++++ b/setup.py +@@ -84,12 +84,6 @@ if os.environ.get("READTHEDOCS", None) is None: + ) + ) + +- # add standard locs +- incdir_list.append("/usr/local/include") +- libdir_list.append("/usr/local/lib") +- incdir_list.append("/usr/include") +- libdir_list.append("/usr/lib") +- + # build the librsync extension + ext_modules = [ + Extension(
