cake-build/cake

Zip doesn't preserve file permissions on Linux

Open

#2,592 opened on 2019年8月5日

GitHub で見る
 (12 comments) (0 reactions) (0 assignees)C# (3,742 stars) (738 forks)batch import
BugHelp wantedUp-for-grabs

説明

What You Are Seeing?

Using something like:

Zip(Directory("d"), File("test.zip"));

The zip file contents are correct, but linux file permissions (ugoa rwx) are not preserved within the zip file, when run on Linux.

What is Expected?

I should be able to list the zip file contents using unzip -Zl and see the linux file permissions that were set before zipping.

What version of Cake are you using?

dotnet core cake.tool version '0.34.1'

Are you running on a 32 or 64 bit system?

64 bit

What environment are you running on? Windows? Linux? Mac?

Linux

Are you running on a CI Server? If so, which one?

Yes, but I see the same results running locally.

How Did You Get This To Happen? (Steps to Reproduce)

  1. Create a script file on Linux:
mkdir d
echo '#!/bin/bash' > d/test.sh 
echo "echo foo" >> d/test.sh 
chmod a+x d/test.sh
  1. Write a build.cake script to zip the directory:
Zip(Directory("d"), File("test.zip"));
  1. Install the cake.tool
dotnet tool install -g cake.tool
  1. Run the cake script
dotnet cake
  1. Check the contents of the zipped file:
$ unzip -Zl test.zip
Archive:  test.zip
Zip file size: 135 bytes, number of entries: 1
?---------  2.0 unx       21 b-       23 defN 19-Aug-05 14:13 test.sh
1 file, 21 bytes uncompressed, 23 bytes compressed:  -9.5%

In contrast, if the zip file is created with the linux zip command (infozip), the file contents are:

$ unzip -Zl linux-test.zip
Archive:  linux-test.zip
Zip file size: 185 bytes, number of entries: 1
-rwxrwxrwx  3.0 unx       21 tx       21 stor 19-Aug-05 14:13 test.sh
1 file, 21 bytes uncompressed, 21 bytes compressed:  0.0%

which shows that the file permissions are preserved in the zip file.

コントリビューターガイド