From 3ca9b9a8ad1b9dee2ec40eecca557f0578786b93 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Mon, 26 Sep 2022 20:32:33 +0200 Subject: [PATCH] fetchNextcloudApp: rewrite with fetchzip & applyPatches There are the following issues with the current implementation: * `fetchurl` with a tarball from GitHub appears to break occasionally because the tarballs are not necessarily reproducible. Because of that, `fetchFromGitHub` unpacks the tarball already because the contents are actually reproducible in contrast to the tarball. To have the same behavior here, we use `fetchzip` now (and `applyPatches` on top to apply additional patches if needed). * Fixes the way how patches are applied. Previously, when having patches for a git checkout of the app, these wouldn't apply because the `appname-version` prefix is missing. * Because all old hashes are broken with this, I added an evaluation check that breaks evaluation when using the old API (i.e. with `name`/`version` which are not needed anymore). --- .../fetchnextcloudapp/default.nix | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/pkgs/build-support/fetchnextcloudapp/default.nix b/pkgs/build-support/fetchnextcloudapp/default.nix index 1997c80c8a15..a7a3066ffab3 100644 --- a/pkgs/build-support/fetchnextcloudapp/default.nix +++ b/pkgs/build-support/fetchnextcloudapp/default.nix @@ -1,32 +1,27 @@ -{ stdenv, fetchurl, ... }: -{ name -, url -, version +{ stdenv, fetchzip, applyPatches, ... }: +{ url , sha256 , patches ? [ ] +, name ? null +, version ? null }: -stdenv.mkDerivation { - pname = "nc-app-${name}"; - inherit version patches; - - src = fetchurl { +if name != null || version != null then throw '' + `pkgs.fetchNextcloudApp` has been changed to use `fetchzip`. + To update, please + * remove `name`/`version` + * update the hash +'' +else applyPatches { + inherit patches; + src = fetchzip { inherit url sha256; + postFetch = '' + pushd $out &>/dev/null + if [ ! -f ./appinfo/info.xml ]; then + echo "appinfo/info.xml doesn't exist in $out, aborting!" + exit 1 + fi + popd &>/dev/null + ''; }; - - unpackPhase = '' - tar -xzpf $src - ''; - - installPhase = '' - approot="$(dirname $(dirname $(find -path '*/appinfo/info.xml' | head -n 1)))" - - if [ -d "$approot" ]; - then - mv "$approot/" $out - chmod -R a-w $out - else - echo "Could not find appinfo/info.xml" - exit 1; - fi - ''; }