Class: Reap::PackageTask

Inherits:
Task
  • Object
show all
Defined in:
lib/reap/tasks/package-task.rb

Overview

Package Task

This task allows on to create standard .zip, .tgz, or .tbz packages, plus create gem distributions.

Constant Summary

Constants inherited from Task

Task::DEFAULT_INCLUDE, Task::MUST_EXCLUDE, Task::RUBY

Instance Attribute Summary

Attributes inherited from Task

#config, #section

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Task

#[], inherited, #initialize, #package_name, registry, #ruby, #sh, tasks

Constructor Details

This class inherits a constructor from Reap::Task

Class Method Details

.descObject



16
# File 'lib/reap/tasks/package-task.rb', line 16

def self.desc ; "Build standard .tar.gz, .tar.bzip2 and .zip packages." ; end

.taskObject



14
# File 'lib/reap/tasks/package-task.rb', line 14

def self.task ; :package ; end

Instance Method Details

#runObject



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/reap/tasks/package-task.rb', line 52

def run
  # create package image
  if FileTest.directory?(@dir)
    print "Directory '#{@dir}' already exists. Clobber? [y/N] "
    until inp = $stdin.gets[0,1] ; sleep 1 ; end
    if (inp || 'y').downcase == 'y'
      puts "Removing old directory '#{File.expand_path(@dir)}'..."
      trash_dir = ".trash/#{File.basename(@dir)}"
      FileUtils.mkdir_p(".trash") unless FileTest.directory?(".trash")
      FileUtils.rm_r(trash_dir) if FileTest.exists?(trash_dir)
      FileUtils.mv(@dir, trash_dir)
    else
      puts "Reap package task canceled."
      exit 0
    end
  end
  package_dir_path = "#{@dir}/#{@package_name}"
  package_files = FileList.new
  package_files.include(*@include)
  package_files.exclude(*@exclude) if @exclude and not @exclude.empty?
  FileUtils.mkdir_p @dir #rescue nil
  package_files.each do |fn|
    f = File.join(package_dir_path, fn)
    fdir = File.dirname(f)
    FileUtils.mkdir_p(fdir) if not File.exist?(fdir)
    if File.directory?(fn)
      FileUtils.mkdir_p(f)
    else
      FileUtils.rm_f(f)
      FileUtils.safe_ln(fn, f)
    end
  end
  
  # create standard package files
  FileUtils.chdir(@dir) do
    # tar bzip2 for unix
    if @bzip2
      puts "\nReap is shelling out work to tar and bzip2..."
      sh %{tar --bzip2 -cvf #{@package_name}.tbz #{@package_name}}
    end
    # tar gzip for unix
    if @gzip
      puts "\nReap is shelling out work to tar and gzip..."
      sh %{tar --gzip -cvf #{@package_name}.tgz #{@package_name}}
    end
    # zip for windows
    if @zip
      puts "\nReap is shelling out work to zip..."
      sh %{zip -r #{@package_name}.zip #{@package_name}}
    end
    puts
  end

  # create gem package
  if @gem
    run_gem
  end
  return true
end

#set(section) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/reap/tasks/package-task.rb', line 19

def set( section )
  @dir = section['dir'] || 'pkg'
  
  @name = section['name'] || @config['name']
  @version = section['version'] || @config['version'] || '0.0.1'
  @package_name = @name + '--' + @version

  @author = section['author'] || @config['author']
  @email = section['email'] || @config['email']
  @summary = section['summary'] || @config['summary']     
  @project = section['project'] || @config['rubyforge']['project']
  @homepage = section['homepage'] || @config['homepage'] || @config['rubyforge']['homepage']
  
  @include = section['include'] || DEFAULT_INCLUDE 
  @exclude = MUST_EXCLUDE + section['exclude']

  @zip = section['zip'].nil? ? true : section['zip']
  @gzip = section['gzip'].nil? ? true : section['zip']
  @bzip2 = section['bzip2'].nil? ? true : section['zip']
  @gem = section['gem'].nil? ? true : section['gem']
  
  # gem specific
  if self['platform']
    @platform = ::Gem.const_get(section['platform'])
  else 
    @platform = ::Gem::Platform::RUBY
  end
  @autorequire  = section['autorequire']
  @requirements = section['requirements'] || []
  @dependencies = section['dependencies'] || []
  @executables = section['executables'] || []
end