blob: 1c33fd8f5c51f6a3bf2b4b1559b27bab5810a398 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
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
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
111
112
113
114
115
116
117
118
119
120
|
begin
require "rubygems/package_task"
rescue LoadError
# rake/gempackagetask will go away some day
require "rake/gempackagetask"
Gem::PackageTask = Rake::GemPackageTask
end
##
# 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.
module Hoe::Package
##
# Optional: Should package create a tarball? [default: true]
attr_accessor :need_tar
##
# Optional: Should package create a zipfile? [default: false]
attr_accessor :need_zip
##
# Initialize variables for plugin.
def initialize_package
self.need_tar ||= false
self.need_zip ||= false
end
##
# Define tasks for plugin.
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 =~ /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
abort "Versions don't match #{v} vs #{version}" if v != version
end
end
##
# Returns the path used for packaging. Convenience method for those
# that need to write a package hook.
def pkg_path
"pkg/#{spec.full_name}"
end
##
# Install the named gem.
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"
gem_cmd = Gem.default_exec_format % "gem"
sudo = "sudo " unless should_not_sudo
local = "--local" unless version
version = "--version '#{version}'" if version
cmd = "#{sudo}#{gem_cmd} install #{local} #{name} #{version}"
cmd += " --no-document" unless rdoc
cmd += " #{null_dev}" unless Rake.application.options.trace
puts cmd if Rake.application.options.trace
result = system cmd
Gem::Specification.reset
result
end
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
end
|