echoe 2.5 → 2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data.tar.gz.sig +0 -0
- data/CHANGELOG +2 -0
- data/Manifest +1 -2
- data/README +2 -1
- data/lib/echoe.rb +132 -82
- metadata +5 -6
- metadata.gz.sig +0 -0
- data/test/test_echoe.rb +0 -20
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
|
2
|
+
v2.6. Unify pattern handling; changelog accessor, version accessor, expand paths of keys and certificates; support verbose (Rails-style) changelogs.
|
3
|
+
|
2
4
|
v2.5. Add some extension building tasks; adjust clean behavior; rdoc inclusions definitely depend on Manifest now; ruby_version accessor; ignore_pattern for skipping files during the manifest build; bugfixes.
|
3
5
|
|
4
6
|
v2.4.1. Manifest doesn't require itself (willcodeforwork).
|
data/Manifest
CHANGED
data/README
CHANGED
@@ -47,7 +47,6 @@ This way Echoe can parse the latest version and changeset message automatically.
|
|
47
47
|
|
48
48
|
Your <tt>Rakefile</tt> needs the following minimal contents:
|
49
49
|
|
50
|
-
require 'rubygems'
|
51
50
|
require 'echoe'
|
52
51
|
Echoe.new('gem_name')
|
53
52
|
|
@@ -80,6 +79,8 @@ Packaging:
|
|
80
79
|
Testing:
|
81
80
|
|
82
81
|
* <tt>test</tt> - Run the test suite.
|
82
|
+
* <tt>compile</tt> - Compile C extensions, if available.
|
83
|
+
* <tt>clean</tt> - Clean up generated documentation, packaging, and build files.
|
83
84
|
* <tt>install</tt> - Install the gem locally.
|
84
85
|
* <tt>uninstall</tt> - Uninstall the gem.
|
85
86
|
|
data/lib/echoe.rb
CHANGED
@@ -18,6 +18,8 @@ Echoe includes some optional accessors for more advanced gem configuration.
|
|
18
18
|
|
19
19
|
For example, a simple <tt>Rakefile</tt> might look like this:
|
20
20
|
|
21
|
+
require 'echoe'
|
22
|
+
|
21
23
|
Echoe.new("uncapitalizer") do |p|
|
22
24
|
p.author = "Evan Weaver"
|
23
25
|
p.summary = "A library that uncapitalizes strings. It's awesome."
|
@@ -25,6 +27,8 @@ For example, a simple <tt>Rakefile</tt> might look like this:
|
|
25
27
|
p.docs_host = "uncapitalizer.com:~/www/files/doc/"
|
26
28
|
p.dependencies = ["string_tools >=1.4.0"]
|
27
29
|
end
|
30
|
+
|
31
|
+
See below for the full list.
|
28
32
|
|
29
33
|
== Signing gems
|
30
34
|
|
@@ -70,23 +74,24 @@ Versioning options:
|
|
70
74
|
|
71
75
|
Common packaging options:
|
72
76
|
|
73
|
-
* <tt>dependencies</tt> - An array of dependencies for this gem
|
74
|
-
* <tt>
|
77
|
+
* <tt>dependencies</tt> - An array of dependencies for this gem. For example, <tt>['mongrel', 'rake >=0.7.1']</tt>.
|
78
|
+
* <tt>extension_pattern</tt> - A filename array, glob array, or regex for extension files that need to be run at install time. Defaults to <tt>"ext/**/extconf.rb"</tt>.
|
75
79
|
* <tt>clean_pattern</tt> - A filename array, glob array, or regex for files that should be removed when <tt>rake clean</tt> is run.
|
76
|
-
* <tt>test_pattern</tt> - A filename array, glob array, or regex for test runners.
|
80
|
+
* <tt>test_pattern</tt> - A filename array, glob array, or regex for test runners. Overridden by <tt>"test/test_all.rb"</tt>, if it exists.
|
77
81
|
|
78
82
|
Uncommon packaging options:
|
79
83
|
* <tt>platform</tt> - What platform this gem is for.
|
80
|
-
* <tt>manifest_name</tt> - The name of the manifest file
|
81
|
-
* <tt>need_gem</tt> - Whether to generate a gem package
|
82
|
-
* <tt>need_tar_gz</tt> - Whether to generate a <tt>.tar.gz</tt> package
|
83
|
-
* <tt>need_tgz</tt> - Whether to generate a <tt>.tgz</tt> package
|
84
|
-
* <tt>need_zip</tt> - Whether to generate a <tt>.zip</tt> package
|
85
|
-
* <tt>include_rakefile</tt> - Include the Rakefile directly within the package.
|
86
|
-
* <tt>include_gemspec</tt> - Include the generated gemspec file within the package.
|
87
|
-
* <tt>ruby_version</tt> - Version string for which Ruby to require (for example, <tt>'>= 1.8.4'</tt
|
84
|
+
* <tt>manifest_name</tt> - The name of the manifest file. Defaults to <tt>Manifest</tt>.
|
85
|
+
* <tt>need_gem</tt> - Whether to generate a gem package. Defaults to <tt>true</tt>.
|
86
|
+
* <tt>need_tar_gz</tt> - Whether to generate a <tt>.tar.gz</tt> package. Defaults to <tt>true</tt>.
|
87
|
+
* <tt>need_tgz</tt> - Whether to generate a <tt>.tgz</tt> package. Defaults to <tt>false</tt>.
|
88
|
+
* <tt>need_zip</tt> - Whether to generate a <tt>.zip</tt> package. Defaults to <tt>false</tt>.
|
89
|
+
* <tt>include_rakefile</tt> - Include the Rakefile directly within the package. Defaults to <tt>false</tt>.
|
90
|
+
* <tt>include_gemspec</tt> - Include the generated gemspec file within the package. Defaults to <tt>true</tt>.
|
91
|
+
* <tt>ruby_version</tt> - Version string for which Ruby to require (for example, <tt>'>= 1.8.4'</tt>.
|
88
92
|
* <tt>eval</tt> - Accepts a proc to be evaluated in the context of the Gem::Specification object. This allows you to set more unusual gemspec options.
|
89
|
-
* <tt>ignore_pattern</tt> - A regex for pathnames that should be ignored when building the manifest.
|
93
|
+
* <tt>ignore_pattern</tt> - A filename array, glob array, or regex for pathnames that should be ignored when building the manifest.
|
94
|
+
* <tt>executable_pattern</tt> - A filename array, glob array, or regex for files that should be installed as wrapped executables.
|
90
95
|
|
91
96
|
Security options:
|
92
97
|
|
@@ -96,13 +101,13 @@ Security options:
|
|
96
101
|
|
97
102
|
Publishing options:
|
98
103
|
|
99
|
-
* <tt>project</tt> - The name of the Rubyforge project to upload to
|
100
|
-
* <tt>docs_host</tt> - A host and filesystem path to publish the documentation to
|
104
|
+
* <tt>project</tt> - The name of the Rubyforge project to upload to. Defaults to the name of the gem.
|
105
|
+
* <tt>docs_host</tt> - A host and filesystem path to publish the documentation to. Defaults to the Rubyforge project.
|
101
106
|
|
102
107
|
Documentation options:
|
103
108
|
|
104
|
-
* <tt>
|
105
|
-
* <tt>rdoc_template</tt> - A path to an RDoc template
|
109
|
+
* <tt>rdoc_pattern</tt> - A filename array, glob array, or regex for filenames that should be passed to RDoc.
|
110
|
+
* <tt>rdoc_template</tt> - A path to an RDoc template. Defaults to the generic template.
|
106
111
|
|
107
112
|
=end
|
108
113
|
|
@@ -124,48 +129,47 @@ class Echoe
|
|
124
129
|
FILTER = ENV['FILTER'] # for tests (eg FILTER="-n test_blah")
|
125
130
|
|
126
131
|
# user-configurable
|
127
|
-
attr_accessor :author, :changes, :clean_pattern, :description, :email, :dependencies, :need_tgz, :need_tar_gz, :need_gem, :need_zip, :
|
132
|
+
attr_accessor :author, :changes, :clean_pattern, :description, :email, :dependencies, :need_tgz, :need_tar_gz, :need_gem, :need_zip, :rdoc_pattern, :project, :summary, :test_pattern, :url, :version, :docs_host, :rdoc_template, :manifest_name, :install_message, :extension_pattern, :private_key, :certificate_chain, :require_signed, :ruby_version, :platform, :ignore_pattern, :executable_pattern, :changelog
|
128
133
|
|
129
134
|
# best left alone
|
130
|
-
attr_accessor :name, :lib_files, :test_files, :bin_files, :spec, :rdoc_options, :rubyforge_name, :has_rdoc, :include_gemspec, :include_rakefile, :gemspec_name, :eval
|
135
|
+
attr_accessor :name, :lib_files, :test_files, :bin_files, :spec, :rdoc_options, :rubyforge_name, :has_rdoc, :include_gemspec, :include_rakefile, :gemspec_name, :eval, :files, :changelog_patterns
|
131
136
|
|
132
137
|
# legacy
|
133
|
-
attr_accessor :extra_deps, :
|
138
|
+
attr_accessor :extra_deps, :rdoc_files, :extensions
|
134
139
|
|
135
|
-
def initialize(name,
|
140
|
+
def initialize(name, _version = nil)
|
136
141
|
# Defaults
|
137
142
|
|
138
143
|
self.name = name
|
139
144
|
self.project = name.downcase
|
145
|
+
self.changelog = "CHANGELOG"
|
140
146
|
self.url = ""
|
141
147
|
self.author = ""
|
142
148
|
self.email = ""
|
143
|
-
self.clean_pattern = ["pkg", "doc",
|
149
|
+
self.clean_pattern = ["pkg", "doc", 'build/*', '**/*.o', '**/*.so', '**/*.a', 'lib/*-*', '**/*.log', "ext/*.{bundle,so,obj,pdb,lib,def,exp}", "ext/Makefile", "ext/**/*.{bundle,so,obj,pdb,lib,def,exp}", "ext/**/Makefile", "pkg", "lib/*.bundle", "*.gem", ".config"]
|
144
150
|
self.test_pattern = ['test/**/test_*.rb']
|
145
151
|
|
146
|
-
self.
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
""
|
158
|
-
end
|
159
|
-
|
152
|
+
self.changelog_patterns = {
|
153
|
+
:version => [
|
154
|
+
/^\s*v([\d\.]+)(\.|\s|$)/,
|
155
|
+
/\s*\*\s*([\d\.]+)\s*\*\s*$/
|
156
|
+
],
|
157
|
+
:changes => [
|
158
|
+
/^\s*v([\d\.]+\. .*)/,
|
159
|
+
/\*\s*[\d\.]+\s*\*\s*(.*)\*\s*[\d\.]+\s*\*$/m
|
160
|
+
]
|
161
|
+
}
|
162
|
+
|
160
163
|
self.description = ""
|
161
164
|
self.summary = ""
|
162
165
|
self.install_message = nil
|
163
166
|
self.has_rdoc = true
|
164
|
-
self.
|
167
|
+
self.rdoc_pattern = /^(lib|bin|tasks|ext)|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/
|
168
|
+
self.executable_pattern = /^bin\//
|
165
169
|
self.rdoc_options = ['--line-numbers', '--inline-source']
|
166
170
|
self.dependencies = []
|
167
171
|
self.manifest_name = "Manifest"
|
168
|
-
self.
|
172
|
+
self.extension_pattern = ["ext/**/extconf.rb", "ext/extconf.rb"]
|
169
173
|
self.private_key = ENV['GEM_PRIVATE_KEY']
|
170
174
|
self.require_signed = false
|
171
175
|
self.certificate_chain = ENV['GEM_CERTIFICATE_CHAIN'].to_s.split(/\,\s*/).compact
|
@@ -178,23 +182,80 @@ class Echoe
|
|
178
182
|
self.include_rakefile = false
|
179
183
|
self.include_gemspec = true
|
180
184
|
self.gemspec_name = "#{name}.gemspec"
|
181
|
-
|
185
|
+
|
182
186
|
yield self if block_given?
|
187
|
+
|
188
|
+
# legacy compatibility
|
189
|
+
self.dependencies = extra_deps if extra_deps and dependencies.empty?
|
190
|
+
self.project = rubyforge_name if rubyforge_name
|
191
|
+
self.rdoc_pattern = rdoc_files if rdoc_files
|
192
|
+
self.extension_pattern = extensions if extensions
|
193
|
+
|
194
|
+
# read manifest
|
195
|
+
begin
|
196
|
+
self.files = File.read(manifest_name).split +
|
197
|
+
[(gemspec_name if include_gemspec)] +
|
198
|
+
[("Rakefile" if include_rakefile)]
|
199
|
+
self.files = files.compact.uniq
|
200
|
+
rescue Errno::ENOENT
|
201
|
+
unless ARGV.include? "manifest"
|
202
|
+
puts "Missing manifest. You can build one with 'rake manifest'."
|
203
|
+
exit
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
# snag version and changeset
|
208
|
+
self.version ||= _version
|
209
|
+
unless version
|
210
|
+
if File.exist? changelog
|
211
|
+
parsed = Array(changelog_patterns[:version]).map do |pattern|
|
212
|
+
open(changelog).read[pattern, 1]
|
213
|
+
end.compact.first
|
214
|
+
raise "Could not parse version from #{changelog}" unless parsed
|
215
|
+
self.version = parsed.chomp(".").strip
|
216
|
+
else
|
217
|
+
raise "No #{changelog} found, and no version supplied in Rakefile."
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
self.changes = if File.exist? changelog
|
222
|
+
Array(changelog_patterns[:changes]).map do |pattern|
|
223
|
+
open(changelog).read[pattern, 1]
|
224
|
+
end.compact.first or ""
|
225
|
+
else
|
226
|
+
""
|
227
|
+
end
|
183
228
|
|
184
229
|
# set some post-defaults
|
185
|
-
self.certificate_chain = Array(certificate_chain)
|
230
|
+
self.certificate_chain = Array(certificate_chain).map {|file| File.expand_path(file)}
|
231
|
+
self.private_key = File.expand_path(private_key) if private_key
|
186
232
|
self.description = summary if description.empty?
|
187
233
|
self.summary = description if summary.empty?
|
188
|
-
self.clean_pattern =
|
189
|
-
self.
|
190
|
-
|
191
|
-
|
192
|
-
self.
|
193
|
-
|
194
|
-
self.rdoc_files = rdoc_pattern if rdoc_pattern
|
234
|
+
self.clean_pattern = apply_pattern(clean_pattern)
|
235
|
+
self.extension_pattern = apply_pattern(extension_pattern, files)
|
236
|
+
self.ignore_pattern = apply_pattern(ignore_pattern)
|
237
|
+
self.rdoc_pattern = apply_pattern(rdoc_pattern, files)
|
238
|
+
self.executable_pattern = apply_pattern(executable_pattern, files)
|
239
|
+
|
195
240
|
|
196
241
|
define_tasks
|
197
242
|
end
|
243
|
+
|
244
|
+
def apply_pattern(pattern, files = nil)
|
245
|
+
files ||= Dir['**/**']
|
246
|
+
case pattern
|
247
|
+
when String, Array
|
248
|
+
files & (Array(pattern).map do |p|
|
249
|
+
Dir.glob(p)
|
250
|
+
end.flatten)
|
251
|
+
when Regexp
|
252
|
+
files.select do |file|
|
253
|
+
file =~ pattern
|
254
|
+
end
|
255
|
+
else
|
256
|
+
[]
|
257
|
+
end
|
258
|
+
end
|
198
259
|
|
199
260
|
def define_tasks
|
200
261
|
|
@@ -223,22 +284,20 @@ class Echoe
|
|
223
284
|
s.add_dependency(*dep)
|
224
285
|
end
|
225
286
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
unless ARGV.include? "manifest"
|
233
|
-
puts "Missing manifest. You can build one with 'rake manifest'."
|
234
|
-
exit
|
235
|
-
end
|
287
|
+
s.files = files
|
288
|
+
|
289
|
+
s.bindir = if executable_pattern.any?
|
290
|
+
executable_pattern[0].split("/")[0]
|
291
|
+
else
|
292
|
+
"bin"
|
236
293
|
end
|
237
|
-
|
238
|
-
|
239
|
-
|
294
|
+
|
295
|
+
s.executables = executable_pattern.map do |file|
|
296
|
+
file[(s.bindir.length)..-1]
|
297
|
+
end
|
298
|
+
|
240
299
|
dirs = Dir['{lib,ext}']
|
241
|
-
s.extensions =
|
300
|
+
s.extensions = extension_pattern if extension_pattern.any?
|
242
301
|
s.require_paths = dirs unless dirs.empty?
|
243
302
|
s.has_rdoc = has_rdoc
|
244
303
|
|
@@ -356,10 +415,10 @@ class Echoe
|
|
356
415
|
directory "lib"
|
357
416
|
end
|
358
417
|
|
359
|
-
if
|
418
|
+
if extension_pattern.any?
|
360
419
|
|
361
420
|
task :compile => [:lib] do
|
362
|
-
|
421
|
+
extension_pattern.each do |extension|
|
363
422
|
directory = File.dirname(extension)
|
364
423
|
Dir.chdir(directory) do
|
365
424
|
ruby File.basename(extension)
|
@@ -383,17 +442,7 @@ class Echoe
|
|
383
442
|
|
384
443
|
rd.rdoc_dir = 'doc'
|
385
444
|
|
386
|
-
files =
|
387
|
-
when Array
|
388
|
-
rdoc_files.map do |pattern|
|
389
|
-
Dir[pattern].select { |file| spec.files.include? file }
|
390
|
-
end.flatten
|
391
|
-
when Regexp
|
392
|
-
spec.files.grep(rdoc_files).uniq
|
393
|
-
else
|
394
|
-
[]
|
395
|
-
end
|
396
|
-
|
445
|
+
files = rdoc_pattern
|
397
446
|
files -= [manifest_name]
|
398
447
|
|
399
448
|
rd.rdoc_files.push(*files)
|
@@ -489,13 +538,10 @@ class Echoe
|
|
489
538
|
desc 'Clean up auto-generated files'
|
490
539
|
task :clean do
|
491
540
|
puts "Cleaning"
|
492
|
-
clean_pattern.each do |
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
puts "- #{file}"
|
497
|
-
rm_rf file
|
498
|
-
end
|
541
|
+
clean_pattern.each do |file|
|
542
|
+
if File.exist?(file)
|
543
|
+
puts "- #{file}"
|
544
|
+
rm_rf file
|
499
545
|
end
|
500
546
|
end
|
501
547
|
end
|
@@ -504,6 +550,8 @@ class Echoe
|
|
504
550
|
|
505
551
|
desc "Build a Manifest list"
|
506
552
|
task :manifest => [:clean] do
|
553
|
+
puts "Building Manifest"
|
554
|
+
old_files = files
|
507
555
|
files = []
|
508
556
|
Find.find '.' do |file|
|
509
557
|
file = file[2..-1]
|
@@ -520,7 +568,9 @@ class Echoe
|
|
520
568
|
files.uniq!
|
521
569
|
|
522
570
|
File.open(manifest_name, 'w').puts(files)
|
523
|
-
puts(files
|
571
|
+
puts(files.map do |file|
|
572
|
+
(old_files.include?(file) ? " " : "+") + " " + file
|
573
|
+
end)
|
524
574
|
end
|
525
575
|
|
526
576
|
task :build_manifest => [:manifest]
|
@@ -533,7 +583,7 @@ class Echoe
|
|
533
583
|
ruby(if File.exist? 'test/test_all.rb'
|
534
584
|
"#{RUBY_FLAGS} test/test_all.rb #{FILTER}"
|
535
585
|
else
|
536
|
-
tests = test_pattern
|
586
|
+
tests = apply_pattern(test_pattern) << 'test/unit'
|
537
587
|
tests.map! {|f| %Q(require "#{f}")}
|
538
588
|
"#{RUBY_FLAGS} -e '#{tests.join("; ")}' #{FILTER}"
|
539
589
|
end)
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: echoe
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "2.
|
7
|
-
date: 2007-09-
|
6
|
+
version: "2.6"
|
7
|
+
date: 2007-09-24 00:00:00 -04:00
|
8
8
|
summary: A tool for packaging Ruby gems.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -52,16 +52,15 @@ authors:
|
|
52
52
|
- Evan Weaver
|
53
53
|
files:
|
54
54
|
- TODO
|
55
|
-
- test/test_echoe.rb
|
56
55
|
- README
|
57
56
|
- Rakefile
|
58
57
|
- MIT-LICENSE
|
58
|
+
- Manifest
|
59
59
|
- LICENSE
|
60
60
|
- lib/echoe.rb
|
61
61
|
- CHANGELOG
|
62
|
-
|
63
|
-
|
64
|
-
- test/test_echoe.rb
|
62
|
+
test_files: []
|
63
|
+
|
65
64
|
rdoc_options: []
|
66
65
|
|
67
66
|
extra_rdoc_files: []
|
metadata.gz.sig
CHANGED
Binary file
|
data/test/test_echoe.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'test/unit/testcase'
|
3
|
-
require 'echoe'
|
4
|
-
|
5
|
-
$rakefile = nil # Avoids a warning in rdoctask.rb
|
6
|
-
|
7
|
-
class TestEchoe < Test::Unit::TestCase
|
8
|
-
def setup
|
9
|
-
Rake.application.clear
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_basics
|
13
|
-
expected = ["announce", "blah.gemspec", "build_gemspec", "build_manifest", "clean", "clobber", "clobber_docs", "clobber_package", "default", "doc", "doc/index.html", "docs", "gem", "install", "manifest", "package", "pkg", "pkg/blah-1.0.0", "pkg/blah-1.0.0.gem", "pkg/blah-1.0.0.tar.gz", "publish_docs", "redocs", "release", "repackage", "test", "uninstall"]
|
14
|
-
|
15
|
-
Echoe.new('blah', '1.0.0')
|
16
|
-
tasks = Rake.application.tasks.map { |t| t.name }
|
17
|
-
assert((expected - tasks).empty?)
|
18
|
-
assert((tasks - expected).empty?)
|
19
|
-
end
|
20
|
-
end
|