From 4a3e68951976c08a6b59d95d252cec5acb38f1b4 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Thu, 22 Jan 2015 23:44:04 -0500 Subject: [PATCH] nix-prefetch-zip: support single files and recuring directories See #5851 --- pkgs/build-support/fetchzip/nix-prefetch-zip | 30 ++++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/pkgs/build-support/fetchzip/nix-prefetch-zip b/pkgs/build-support/fetchzip/nix-prefetch-zip index ed643c8e76db..ccc03e087e52 100755 --- a/pkgs/build-support/fetchzip/nix-prefetch-zip +++ b/pkgs/build-support/fetchzip/nix-prefetch-zip @@ -67,8 +67,12 @@ hashFormat="--base32" tmp=$(mktemp -d 2>/dev/null || mktemp -d -t "$$") trap "rm -rf '$tmp'" EXIT +unpackDirTmp=$tmp/unpacked-tmp/$name +mkdir -p $unpackDirTmp + unpackDir=$tmp/unpacked/$name mkdir -p $unpackDir + downloadedFile=$tmp/$name unpackFile() { @@ -117,19 +121,27 @@ if test -z "$finalPath"; then exit 1 fi - cd $unpackDir - unpackFile "$downloadedFile" - - # FIXME: handle zip files that contain a single regular file. if [ -z "$leaveRoot" ]; then shopt -s dotglob - if [ $(ls -d $unpackDir/* | wc -l) != 1 ]; then - echo "error: zip file must contain a single directory." + + cd "$unpackDirTmp" + unpackFile "$downloadedFile" + + if [ $(ls "$unpackDirTmp" | wc -l) != 1 ]; then + echo "error: zip file must contain a single file or directory." exit 1 fi - fn=$(cd "$unpackDir" && echo *) - mv $unpackDir/$fn/* "$unpackDir/" - rmdir "$unpackDir/$fn" + + fn=$(cd "$unpackDirTmp" && echo *) + + if [ -f "$unpackDirTmp/$fn" ]; then + mv "$unpackDirTmp/$fn" "$unpackDir" + else + mv "$unpackDirTmp/$fn/"* "$unpackDir/" + fi + else + cd $unpackDir + unpackFile "$downloadedFile" fi # Compute the hash.