7e47f3658e
GitOrigin-RevId: 1925c603f17fc89f4c8f6bf6f631a802ad85d784
158 lines
3.5 KiB
Nix
158 lines
3.5 KiB
Nix
{ lib
|
|
, stdenv
|
|
, fetchFromGitLab
|
|
, python3
|
|
, librsync
|
|
, glib
|
|
, ncftp
|
|
, gnupg
|
|
, gnutar
|
|
, par2cmdline
|
|
, util-linux
|
|
, rsync
|
|
, makeWrapper
|
|
, wrapGAppsNoGuiHook
|
|
, gettext
|
|
, getconf
|
|
, testers
|
|
, nix-update-script
|
|
}:
|
|
|
|
let self = python3.pkgs.buildPythonApplication rec {
|
|
pname = "duplicity";
|
|
version = "3.0.2";
|
|
|
|
src = fetchFromGitLab {
|
|
owner = "duplicity";
|
|
repo = "duplicity";
|
|
rev = "rel.${version}";
|
|
hash = "sha256-qY6J0t6mgrbEojlKxpVFfsVhffjrAxc8R9Z/Klrp7wE=";
|
|
};
|
|
|
|
patches = [
|
|
./keep-pythonpath-in-testing.patch
|
|
];
|
|
|
|
postPatch = ''
|
|
patchShebangs duplicity/__main__.py
|
|
|
|
# don't try to use gtar on darwin/bsd
|
|
substituteInPlace testing/functional/test_restart.py \
|
|
--replace-fail 'tarcmd = "gtar"' 'tarcmd = "tar"'
|
|
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
|
|
# tests try to access these files in the sandbox, but can't deal with EPERM
|
|
substituteInPlace testing/unit/test_globmatch.py \
|
|
--replace-fail /var/log /test/log
|
|
substituteInPlace testing/unit/test_selection.py \
|
|
--replace-fail /usr/bin /dev
|
|
# don't use /tmp/ in tests
|
|
substituteInPlace duplicity/backends/_testbackend.py \
|
|
--replace-fail '"/tmp/' 'os.environ.get("TMPDIR")+"/'
|
|
'';
|
|
|
|
disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [
|
|
# uses /tmp/
|
|
"testing/unit/test_cli_main.py::CommandlineTest::test_intermixed_args"
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
makeWrapper
|
|
gettext
|
|
python3.pkgs.wrapPython
|
|
wrapGAppsNoGuiHook
|
|
python3.pkgs.setuptools-scm
|
|
];
|
|
|
|
buildInputs = [
|
|
librsync
|
|
# For Gio typelib
|
|
glib
|
|
];
|
|
|
|
pythonPath = with python3.pkgs; [
|
|
b2sdk
|
|
boto3
|
|
cffi
|
|
cryptography
|
|
ecdsa
|
|
idna
|
|
pygobject3
|
|
fasteners
|
|
lockfile
|
|
paramiko
|
|
pyasn1
|
|
pycrypto
|
|
pydrive2
|
|
future
|
|
] ++ paramiko.optional-dependencies.invoke;
|
|
|
|
nativeCheckInputs = [
|
|
gnupg # Add 'gpg' to PATH.
|
|
gnutar # Add 'tar' to PATH.
|
|
librsync # Add 'rdiff' to PATH.
|
|
par2cmdline # Add 'par2' to PATH.
|
|
] ++ lib.optionals stdenv.hostPlatform.isLinux [
|
|
util-linux # Add 'setsid' to PATH.
|
|
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
|
|
getconf
|
|
] ++ (with python3.pkgs; [
|
|
lockfile
|
|
mock
|
|
pexpect
|
|
pytestCheckHook
|
|
fasteners
|
|
]);
|
|
|
|
# Prevent double wrapping, let the Python wrapper use the args in preFixup.
|
|
dontWrapGApps = true;
|
|
|
|
preFixup = let
|
|
binPath = lib.makeBinPath ([
|
|
gnupg
|
|
ncftp
|
|
rsync
|
|
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
|
|
getconf
|
|
]); in ''
|
|
makeWrapperArgsBak=("''${makeWrapperArgs[@]}")
|
|
makeWrapperArgs+=(
|
|
"''${gappsWrapperArgs[@]}"
|
|
--prefix PATH : "${binPath}"
|
|
)
|
|
'';
|
|
|
|
postFixup = ''
|
|
# Restore previous value for tests wrapping in preInstallCheck
|
|
makeWrapperArgs=("''${makeWrapperArgsBak[@]}")
|
|
'';
|
|
|
|
preCheck = ''
|
|
# tests need writable $HOME
|
|
HOME=$PWD/.home
|
|
|
|
wrapPythonProgramsIn "$PWD/testing/overrides/bin" "$pythonPath"
|
|
'';
|
|
|
|
doCheck = true;
|
|
|
|
passthru = {
|
|
updateScript = nix-update-script {
|
|
extraArgs = [ "--version-regex" "rel\.(.*)" ];
|
|
};
|
|
|
|
tests.version = testers.testVersion {
|
|
package = self;
|
|
};
|
|
};
|
|
|
|
meta = with lib; {
|
|
changelog = "https://gitlab.com/duplicity/duplicity/-/blob/${src.rev}/CHANGELOG.md";
|
|
description = "Encrypted bandwidth-efficient backup using the rsync algorithm";
|
|
homepage = "https://duplicity.gitlab.io/duplicity-web/";
|
|
license = licenses.gpl2Plus;
|
|
mainProgram = "duplicity";
|
|
maintainers = with maintainers; [ corngood ];
|
|
};
|
|
};
|
|
|
|
in self
|