diff options
author | Charles Strahan <charles.c.strahan@gmail.com> | 2015-01-22 23:44:04 -0500 |
---|---|---|
committer | Charles Strahan <charles.c.strahan@gmail.com> | 2015-01-23 17:10:40 -0500 |
commit | 4a3e68951976c08a6b59d95d252cec5acb38f1b4 (patch) | |
tree | 1cee03a201f859b58470e6710b903d56993f4717 /pkgs | |
parent | 56c970ae014a9f0dac752cbf6a5a6a365ff873b7 (diff) | |
download | nixlib-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-x | pkgs/build-support/fetchzip/nix-prefetch-zip | 30 |
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. |