Add an option to avoid duplicate entries when creating a zip file

Hi everyone,

While working on another issue, I stumbled across this issue: when you create a Zip file with the Zip task, you might end up with multiple identical entries in the Zip, e.g. the exact same file more than once in the same directory within the Zip. This is the case when multiple “from”'s are given which end up creating the same Filename at the same location within the resulting zip.

As the Zip spec doesn’t forbid this case (I think), these Zip files are, in theory, okay. However, depending on how and where you try to extract them, you’ll end up with a whole slue or problems and errors. This is why gradle should propose an option to ensure file uniqueness in Zip files.

imho, zip entry uniqueness should even be the default behavior for a couple of reasons: First, it would make the zip task behave the same as the copy task (when it comes to filesystem copies), which also only keeps the last file copied in case of a conflict. Lastly, having multiple identical zip entries is clearly the corner case that 99,99% of users and use cases do NOT want, so in accordance with gradle’s general philosophy, those who want the “special” behavior should be the ones having to customize the task.

For the history, please see: http://forums.gradle.org/gradle/topics/solution_for_copying_a_subdirectory_wihtin_a_zip_into_another_zip

best regards, Mike

Linked to GRADLE-2171.

Seems like Gradle Zip should provide the same options that Ant zip provides:

duplicate: behavior when a duplicate file is found. Valid values are “add”, “preserve”, and “fail”. The default value is “add”.