Bug 47168 - Zipfileset does not include empty directories
Summary: Zipfileset does not include empty directories
Status: NEW
Alias: None
Product: Ant
Classification: Unclassified
Component: Core tasks (show other bugs)
Version: 1.7.1
Hardware: PC Windows XP
: P2 minor (vote)
Target Milestone: ---
Assignee: Ant Notifications List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-05-08 02:30 UTC by martineigenbrodt
Modified: 2009-07-05 02:47 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description martineigenbrodt 2009-05-08 02:30:24 UTC
The doc says the includeEmptyDirs value defaults to true.
I've tried unzipping a zip containing empty dirs using copy and the zipfileset and needed to explicitly set includeEmptyDirs to true.
So either the implementation or the doc is wrong.
Comment 1 Stefan Bodewig 2009-05-11 07:05:36 UTC
what you see is not related to the includeemptydirs attribute at all, which does default to true.

This test here 

  <target name="testIncludeEmptyDirsDefaultsToTrue"
          description="https://issues.apache.org/bugzilla/show_bug.cgi?id=47168">
    <mkdir dir="${input}/foo"/>
    <mkdir dir="${output}"/>
    <copy todir="${output}">
      <fileset dir="${input}"/>
    </copy>
    <au:assertFileExists file="${output}/foo"/>
  </target>

passes.

If you change the target to use a zipfileset (this is what I understand from your description)

  <target name="XtestIncludeEmptyDirsAndZipfileset"
          description="https://issues.apache.org/bugzilla/show_bug.cgi?id=47168">
    <mkdir dir="${input}/foo"/>
    <mkdir dir="${output}/final"/>
    <zip destfile="${output}/zipfile.zip">
      <fileset dir="${input}"/>
    </zip>
    <copy todir="${output}/final">
      <zipfileset src="${output}/zipfile.zip"/>
    </copy>
    <au:assertFileExists file="${output}/final/foo"/>
  </target>

it fails.

The reason that it fails lies in zipfileset, though.  Or more exactly in AbstractFileSet's implementation of the iterator() method which only returns non-directory resources at all.
Comment 2 martineigenbrodt 2009-05-12 04:46:28 UTC
Your right. Thanks for pointing the right direction. I've changed the summary.
Comment 3 Adam Bryzak 2009-07-05 02:47:09 UTC
(In reply to comment #1)
> The reason that it fails lies in zipfileset, though.  Or more exactly in
> AbstractFileSet's implementation of the iterator() method which only returns
> non-directory resources at all.

Unfortunately it's also not quite as simple as that either. Updating ArchiveFileSet to return both file and directory entries doesn't quite work. The copy task will still ignore the directories as they get filtered out of the resources to copy by the SourceFileScanner in the buildMap method.