Making rake package zip on Windows by jgn on Monday, October 1, 2007 in Uncategorized

If you want to do rake package on Windows and specify need_zip = true, it's a bit of a problem because Windows doesn't come with a command-line zip program. To be sure, one could always install Cygwin.

I've seen blogs talking about hacking rake, but that seems really gross.

Another option is to clone as much of zip as rake needs (not much!) with the rubyzip gem. After doing gem install rubyzip, the following seems to be acceptable for rake (haven't tested this a lot; feel free to fix my code :-)). This little bit of code -- simulating what command-line zip does -- seems to be a sort of missing link in the documentation and tests for rubyzip. It's easy, but not super-obvious from the docs.

> require 'zip/zip'
> 
> recursive = false
> if ARGV[0] == '-r'
> recursive = true
> ARGV.shift
> end
> 
> archive = ARGV.shift
> ARGV.each do |arg|
> files = recursive ? Dir[arg + '/**/*.*'] : [arg]
> files.each do |f|
> Zip::ZipFile.open(archive, Zip::ZipFile::CREATE) do |z|
> z.add( f, f)
> puts " adding #{f}"
> end
> end
> end
> ```
 And then in your Rakefile.rb, something like:
>

```ruby
> desc "Zip up project"
> Rake::PackageTask.new("#{PROJECT}-#{USER}", "1.0.0") do |p|
> p.need_zip = true
> p.zip_command = 'ruby ../myzip.rb'
> p.package_files.include("./**/*")
> p.package_files.exclude("./**/*.svn")
> p.package_files.exclude("./doc")
> p.package_files.exclude("./pkg")
> end
> ```
comments powered by Disqus