about summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorCharles Strahan <charles.c.strahan@gmail.com>2015-01-22 23:44:04 -0500
committerCharles Strahan <charles.c.strahan@gmail.com>2015-01-23 17:10:40 -0500
commit4a3e68951976c08a6b59d95d252cec5acb38f1b4 (patch)
tree1cee03a201f859b58470e6710b903d56993f4717 /pkgs
parent56c970ae014a9f0dac752cbf6a5a6a365ff873b7 (diff)
downloadnixlib-4a3e68951976c08a6b59d95d252cec5acb38f1b4.tar
nixlib-4a3e68951976c08a6b59d95d252cec5acb38f1b4.tar.gz
nixlib-4a3e68951976c08a6b59d95d252cec5acb38f1b4.tar.bz2
nixlib-4a3e68951976c08a6b59d95d252cec5acb38f1b4.tar.lz
nixlib-4a3e68951976c08a6b59d95d252cec5acb38f1b4.tar.xz
nixlib-4a3e68951976c08a6b59d95d252cec5acb38f1b4.tar.zst
nixlib-4a3e68951976c08a6b59d95d252cec5acb38f1b4.zip
nix-prefetch-zip: support single files and recuring directories
See #5851
Diffstat (limited to 'pkgs')
-rwxr-xr-xpkgs/build-support/fetchzip/nix-prefetch-zip30
1 files 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.