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.

[View source]

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.

[View source]

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.

[View source]

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.

[View source]

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

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

#prerelease_versionObject

:nodoc:

[View source]

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