2021-01-15 22:18:51 +00:00
|
|
|
{ lib, stdenv
|
2021-07-21 07:28:18 +00:00
|
|
|
, fetchFromGitLab
|
|
|
|
, fetchpatch
|
2021-07-24 12:14:16 +00:00
|
|
|
, python3
|
2020-04-24 23:36:52 +00:00
|
|
|
, librsync
|
|
|
|
, ncftp
|
|
|
|
, gnupg
|
|
|
|
, gnutar
|
|
|
|
, par2cmdline
|
2020-11-24 20:58:05 +00:00
|
|
|
, util-linux
|
2020-04-24 23:36:52 +00:00
|
|
|
, rsync
|
|
|
|
, makeWrapper
|
|
|
|
, gettext
|
|
|
|
}:
|
|
|
|
let
|
2021-07-24 12:14:16 +00:00
|
|
|
pythonPackages = python3.pkgs;
|
2021-01-15 22:18:51 +00:00
|
|
|
inherit (lib.versions) majorMinor splitVersion;
|
|
|
|
majorMinorPatch = v: builtins.concatStringsSep "." (lib.take 3 (splitVersion v));
|
2020-04-24 23:36:52 +00:00
|
|
|
in
|
|
|
|
pythonPackages.buildPythonApplication rec {
|
|
|
|
pname = "duplicity";
|
2022-08-12 12:06:08 +00:00
|
|
|
version = "0.8.23";
|
2020-04-24 23:36:52 +00:00
|
|
|
|
2021-07-21 07:28:18 +00:00
|
|
|
src = fetchFromGitLab {
|
|
|
|
owner = "duplicity";
|
|
|
|
repo = "duplicity";
|
|
|
|
rev = "rel.${version}";
|
2022-08-12 12:06:08 +00:00
|
|
|
sha256 = "0my015zc8751smjgbsysmca7hvdm96cjw5zilqn3zq971nmmrksb";
|
2020-04-24 23:36:52 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
patches = [
|
|
|
|
# We use the tar binary on all platforms.
|
|
|
|
./gnutar-in-test.patch
|
|
|
|
|
|
|
|
# Our Python infrastructure runs test in installCheckPhase so we need
|
|
|
|
# to make the testing code stop assuming it is run from the source directory.
|
|
|
|
./use-installed-scripts-in-test.patch
|
2021-01-15 22:18:51 +00:00
|
|
|
] ++ lib.optionals stdenv.isLinux [
|
2021-04-05 15:23:46 +00:00
|
|
|
# Broken on Linux in Nix' build environment
|
2020-04-24 23:36:52 +00:00
|
|
|
./linux-disable-timezone-test.patch
|
|
|
|
];
|
|
|
|
|
2021-04-05 15:23:46 +00:00
|
|
|
SETUPTOOLS_SCM_PRETEND_VERSION = version;
|
|
|
|
|
2021-07-21 07:28:18 +00:00
|
|
|
preConfigure = ''
|
|
|
|
# fix version displayed by duplicity --version
|
|
|
|
# see SourceCopy in setup.py
|
|
|
|
ls
|
|
|
|
for i in bin/*.1 duplicity/__init__.py; do
|
|
|
|
substituteInPlace "$i" --replace '$version' "${version}"
|
|
|
|
done
|
|
|
|
'';
|
|
|
|
|
2020-04-24 23:36:52 +00:00
|
|
|
nativeBuildInputs = [
|
|
|
|
makeWrapper
|
|
|
|
gettext
|
|
|
|
pythonPackages.wrapPython
|
2021-04-05 15:23:46 +00:00
|
|
|
pythonPackages.setuptools-scm
|
2020-04-24 23:36:52 +00:00
|
|
|
];
|
|
|
|
buildInputs = [
|
|
|
|
librsync
|
|
|
|
];
|
|
|
|
|
2021-04-05 15:23:46 +00:00
|
|
|
pythonPath = with pythonPackages; [
|
2020-09-25 04:45:31 +00:00
|
|
|
b2sdk
|
2021-01-05 17:05:55 +00:00
|
|
|
boto3
|
2020-04-24 23:36:52 +00:00
|
|
|
cffi
|
|
|
|
cryptography
|
|
|
|
ecdsa
|
|
|
|
idna
|
|
|
|
pygobject3
|
|
|
|
fasteners
|
|
|
|
lockfile
|
|
|
|
paramiko
|
|
|
|
pyasn1
|
|
|
|
pycrypto
|
2022-06-16 17:23:12 +00:00
|
|
|
pydrive2
|
2020-04-24 23:36:52 +00:00
|
|
|
future
|
2020-09-25 04:45:31 +00:00
|
|
|
];
|
2020-04-24 23:36:52 +00:00
|
|
|
|
|
|
|
checkInputs = [
|
|
|
|
gnupg # Add 'gpg' to PATH.
|
|
|
|
gnutar # Add 'tar' to PATH.
|
|
|
|
librsync # Add 'rdiff' to PATH.
|
|
|
|
par2cmdline # Add 'par2' to PATH.
|
2021-01-15 22:18:51 +00:00
|
|
|
] ++ lib.optionals stdenv.isLinux [
|
2020-11-24 20:58:05 +00:00
|
|
|
util-linux # Add 'setsid' to PATH.
|
2020-04-24 23:36:52 +00:00
|
|
|
] ++ (with pythonPackages; [
|
|
|
|
lockfile
|
|
|
|
mock
|
|
|
|
pexpect
|
|
|
|
pytest
|
2021-07-24 12:14:16 +00:00
|
|
|
pytest-runner
|
2020-04-24 23:36:52 +00:00
|
|
|
]);
|
|
|
|
|
|
|
|
postInstall = ''
|
|
|
|
wrapProgram $out/bin/duplicity \
|
2021-01-15 22:18:51 +00:00
|
|
|
--prefix PATH : "${lib.makeBinPath [ gnupg ncftp rsync ]}"
|
2020-04-24 23:36:52 +00:00
|
|
|
'';
|
|
|
|
|
|
|
|
preCheck = ''
|
|
|
|
wrapPythonProgramsIn "$PWD/testing/overrides/bin" "$pythonPath"
|
|
|
|
|
|
|
|
# Add 'duplicity' to PATH for tests.
|
|
|
|
# Normally, 'setup.py test' adds 'build/scripts-2.7/' to PATH before running
|
|
|
|
# tests. However, 'build/scripts-2.7/duplicity' is not wrapped, so its
|
|
|
|
# shebang is incorrect and it fails to run inside Nix' sandbox.
|
|
|
|
# In combination with use-installed-scripts-in-test.patch, make 'setup.py
|
|
|
|
# test' use the installed 'duplicity' instead.
|
|
|
|
PATH="$out/bin:$PATH"
|
|
|
|
|
|
|
|
# Don't run developer-only checks (pep8, etc.).
|
|
|
|
export RUN_CODE_TESTS=0
|
2021-07-21 07:28:18 +00:00
|
|
|
|
|
|
|
# check version string
|
|
|
|
duplicity --version | grep ${version}
|
2021-01-15 22:18:51 +00:00
|
|
|
'' + lib.optionalString stdenv.isDarwin ''
|
2020-04-24 23:36:52 +00:00
|
|
|
# Work around the following error when running tests:
|
|
|
|
# > Max open files of 256 is too low, should be >= 1024.
|
|
|
|
# > Use 'ulimit -n 1024' or higher to correct.
|
|
|
|
ulimit -n 1024
|
|
|
|
'';
|
|
|
|
|
|
|
|
# TODO: Fix test failures on macOS 10.13:
|
|
|
|
#
|
|
|
|
# > OSError: out of pty devices
|
|
|
|
doCheck = !stdenv.isDarwin;
|
|
|
|
|
2021-01-15 22:18:51 +00:00
|
|
|
meta = with lib; {
|
2020-04-24 23:36:52 +00:00
|
|
|
description = "Encrypted bandwidth-efficient backup using the rsync algorithm";
|
2021-12-06 16:07:01 +00:00
|
|
|
homepage = "https://duplicity.gitlab.io/duplicity-web/";
|
2020-04-24 23:36:52 +00:00
|
|
|
license = licenses.gpl2Plus;
|
|
|
|
platforms = platforms.unix;
|
|
|
|
};
|
|
|
|
}
|