diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 8a8cd838ce5d..29eb36ab1f28 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -240,6 +240,7 @@ in { custom-ca = handleTest ./custom-ca.nix {}; croc = handleTest ./croc.nix {}; darling = handleTest ./darling.nix {}; + darling-dmg = runTest ./darling-dmg.nix; dae = handleTest ./dae.nix {}; davis = handleTest ./davis.nix {}; db-rest = handleTest ./db-rest.nix {}; diff --git a/nixos/tests/darling-dmg.nix b/nixos/tests/darling-dmg.nix new file mode 100644 index 000000000000..0a2ec8298122 --- /dev/null +++ b/nixos/tests/darling-dmg.nix @@ -0,0 +1,34 @@ +{ lib, pkgs, ... }: +# This needs to be a VM test because the FUSE kernel module can't be used inside of a derivation in the Nix sandbox. +# This test also exercises the LZFSE support in darling-dmg. +let + # The last kitty release which is stored on an HFS+ filesystem inside the disk image + test-dmg-file = pkgs.fetchurl { + url = "https://github.com/kovidgoyal/kitty/releases/download/v0.17.4/kitty-0.17.4.dmg"; + hash = "sha256-m+c5s8fFrgUc0xQNI196WplYBZq9+lNgems5haZUdvA="; + }; +in +{ + name = "darling-dmg"; + meta.maintainers = with lib.maintainers; [ Luflosi ]; + + nodes.machine = {}; + + testScript = '' + start_all() + + machine.succeed("mkdir mount-point") + machine.succeed("'${pkgs.darling-dmg}/bin/darling-dmg' '${test-dmg-file}' mount-point") + + # Crude way to verify the contents + # Taken from https://stackoverflow.com/questions/545387/linux-compute-a-single-hash-for-a-given-folder-contents + # This could be improved. It does not check symlinks for example. + hash = machine.succeed(""" + (find mount-point -type f -print0 | sort -z | xargs -0 sha256sum; \ + find mount-point \( -type f -o -type d \) -print0 | sort -z | \ + xargs -0 stat -c '%n %a') \ + | sha256sum + """).strip() + assert hash == "00e61c2ef171093fbf194e420c17bb84bcdb823238d70eb46e375bab2427cc21 -", f"The disk image contents differ from what was expected (was {hash})" + ''; +} diff --git a/pkgs/tools/filesystems/darling-dmg/default.nix b/pkgs/by-name/da/darling-dmg/package.nix similarity index 61% rename from pkgs/tools/filesystems/darling-dmg/default.nix rename to pkgs/by-name/da/darling-dmg/package.nix index 8884ef2f63d5..4fca75a45bc8 100644 --- a/pkgs/tools/filesystems/darling-dmg/default.nix +++ b/pkgs/by-name/da/darling-dmg/package.nix @@ -1,14 +1,16 @@ -{ lib, stdenv, fetchFromGitHub, cmake, fuse, zlib, bzip2, openssl, libxml2, icu, lzfse, libiconv }: +{ lib, stdenv, fetchFromGitHub, cmake, fuse, zlib, bzip2, openssl, libxml2, icu, lzfse, libiconv +, nixosTests +}: -stdenv.mkDerivation rec { +stdenv.mkDerivation { pname = "darling-dmg"; - version = "1.0.4+git20200427"; + version = "1.0.4-unstable-2023-07-26"; src = fetchFromGitHub { owner = "darlinghq"; repo = "darling-dmg"; - rev = "71cc76c792db30328663272788c0b64aca27fdb0"; - sha256 = "08iphkxlmjddrxpbm13gxyqwcrd0k65z3l1944n4pccb6qbyj8gv"; + rev = "a36bf0c07b16675b446377890c5f6f74563f84dd"; + hash = "sha256-QM75GuFHl2gRlRw1BmTexUE1d9YNnhG0qmTqmE9kMX4="; }; nativeBuildInputs = [ cmake ]; @@ -20,9 +22,13 @@ stdenv.mkDerivation rec { "-llzfse" ]; + passthru.tests = { + inherit (nixosTests) darling-dmg; + }; + meta = with lib; { homepage = "https://www.darlinghq.org/"; - description = "Darling lets you open macOS dmgs on Linux"; + description = "FUSE module for .dmg files (containing an HFS+ filesystem)"; mainProgram = "darling-dmg"; platforms = platforms.unix; license = licenses.gpl3Only; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8e1c0e799088..6b35e4a69c67 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -38699,8 +38699,6 @@ with pkgs; cnijfilter2 = callPackage ../misc/cups/drivers/cnijfilter2 { }; - darling-dmg = callPackage ../tools/filesystems/darling-dmg { }; - depotdownloader = callPackage ../tools/misc/depotdownloader { }; dbacl = callPackage ../tools/misc/dbacl { };