Module: Hoe::Package

Defined in:
lib/hoe/package.rb

Overview

Package plugin for hoe.

Tasks Provided:

install_gem

Install the package as a gem.

prerelease

Hook for pre-release actions like sanity checks.

postrelease

Hook for post-release actions like release announcements.

release

Package and upload the release.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#need_tarObject

Optional: Should package create a tarball? [default: true]



24
25
26
# File 'lib/hoe/package.rb', line 24

def need_tar
  @need_tar
end

#need_zipObject

Optional: Should package create a zipfile? [default: false]



29
30
31
# File 'lib/hoe/package.rb', line 29

def need_zip
  @need_zip
end

Instance Method Details

#define_package_tasksObject

Define tasks for plugin.



42
43
44
45
46
47
48
49
50
51
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
# File 'lib/hoe/package.rb', line 42

def define_package_tasks
  prerelease_version

  Gem::PackageTask.new spec do |pkg|
    pkg.need_tar = @need_tar
    pkg.need_zip = @need_zip
  end

  desc "Install the package as a gem. (opt. NOSUDO=1)"
  task :install_gem => [:clean, :package, :check_extra_deps] do
    install_gem Dir["pkg/*.gem"].first
  end

  desc "Package and upload; Requires VERSION=x.y.z (optional PRE=a.1)"
  task :release => [:prerelease, :release_to, :postrelease]

  # no doco, invisible hook
  task :prerelease do
    abort "Fix your version before you release" if spec.version.to_s =~ /borked/
  end

  # no doco, invisible hook
  task :release_to

  # no doco, invisible hook
  task :postrelease

  desc "Sanity checks for release"
  task :release_sanity do
    v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"

    pre = ENV["PRERELEASE"] || ENV["PRE"]
    v += ".#{pre}" if pre

    c = changes[/\d\S+/]

    abort "Versions don't match: %s vs %s" % [v, version] if v != version
    abort "Versions don't match %s: %s vs %s" % [history_file, v, c] if v != c
  end
end

#initialize_packageObject

Initialize variables for plugin.



34
35
36
37
# File 'lib/hoe/package.rb', line 34

def initialize_package
  self.need_tar ||= false
  self.need_zip ||= false
end

#install_gem(name, version = nil, rdoc = true) ⇒ Object

Install the named gem.



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/hoe/package.rb', line 94

def install_gem name, version = nil, rdoc = true
  should_not_sudo = Hoe::WINDOZE || ENV["NOSUDO"] || File.writable?(Gem.dir)
  null_dev = Hoe::WINDOZE ? "> NUL 2>&1" : "> /dev/null 2>&1"

  sudo    = "sudo "                  unless should_not_sudo
  local   = "--local"                unless version
  version = "--version '#{version}'" if     version

  cmd  = "#{sudo}gem install #{local} #{name} #{version}"
  cmd += " --no-document" unless rdoc
  cmd += " #{null_dev}" unless Rake.application.options.trace

  result = sh cmd
  Gem::Specification.reset
  result
end

#pkg_pathObject

Returns the path used for packaging. Convenience method for those that need to write a package hook.



87
88
89
# File 'lib/hoe/package.rb', line 87

def pkg_path
  "pkg/#{spec.full_name}"
end

#prerelease_versionObject

:nodoc:



111
112
113
114
115
116
117
118
119
120
121
# File 'lib/hoe/package.rb', line 111

def prerelease_version # :nodoc:
  pre = ENV["PRERELEASE"] || ENV["PRE"]

  return unless pre

  spec.version = "#{spec.version}.#{pre}"

  abort "ERROR: You should format PRE like pre or alpha.1 or something" if
    (Gem::VERSION < "1.4"  and pre !~ /^[a-z]+(\.\d+)?$/) or
    (Gem::VERSION >= "1.4" and pre !~ /^[a-z]+(\.?\d+)?$/)
end