webby 0.7.4 → 0.8.0
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/History.txt +19 -0
- data/Manifest.txt +19 -6
- data/README.txt +21 -5
- data/Rakefile +2 -3
- data/data/Rakefile +1 -1
- data/data/lib/breadcrumbs.rb +28 -0
- data/data/tasks/create.rake +0 -1
- data/data/tasks/deploy.rake +0 -1
- data/data/tasks/growl.rake +0 -1
- data/data/tasks/heel.rake +2 -3
- data/data/tasks/setup.rb +0 -1
- data/data/templates/_partial.erb +10 -0
- data/data/templates/atom_feed.erb +34 -0
- data/examples/webby/content/manual/index.txt +11 -13
- data/examples/webby/content/tutorial/index.txt +1 -1
- data/examples/webby/tasks/heel.rake +2 -2
- data/examples/webby/tasks/setup.rb +6 -1
- data/lib/webby.rb +50 -23
- data/lib/webby/auto_builder.rb +4 -2
- data/lib/webby/builder.rb +6 -5
- data/lib/webby/filters.rb +6 -7
- data/lib/webby/filters/outline.rb +4 -2
- data/lib/webby/filters/tidy.rb +4 -2
- data/lib/webby/helpers.rb +32 -0
- data/lib/webby/helpers/coderay_helper.rb +78 -0
- data/lib/webby/helpers/graphviz_helper.rb +158 -0
- data/lib/webby/helpers/tag_helper.rb +9 -4
- data/lib/webby/helpers/tex_img_helper.rb +181 -0
- data/lib/webby/helpers/url_helper.rb +12 -11
- data/lib/webby/renderer.rb +97 -18
- data/lib/webby/resources.rb +82 -0
- data/lib/webby/{pages_db.rb → resources/db.rb} +63 -33
- data/lib/webby/{file.rb → resources/file.rb} +27 -24
- data/lib/webby/resources/layout.rb +65 -0
- data/lib/webby/resources/page.rb +109 -0
- data/lib/webby/resources/partial.rb +81 -0
- data/lib/webby/resources/resource.rb +145 -0
- data/lib/webby/resources/static.rb +54 -0
- data/lib/webby/stelan/mktemp.rb +137 -0
- data/lib/webby/stelan/spawner.rb +5 -1
- data/lib/webby/utils.rb +3 -1
- data/lib/webby/webby_task.rb +43 -24
- data/spec/spec_helper.rb +12 -1
- data/spec/webby/{file_spec.rb → resources/file_spec.rb} +21 -22
- data/tasks/ann.rake +76 -0
- data/tasks/annotations.rake +6 -14
- data/tasks/bones.rake +40 -0
- data/tasks/doc.rake +1 -2
- data/tasks/gem.rake +29 -2
- data/tasks/manifest.rake +15 -21
- data/tasks/post_load.rake +22 -8
- data/tasks/setup.rb +53 -15
- data/tasks/spec.rake +13 -0
- metadata +22 -9
- data/lib/webby/filters/coderay.rb +0 -98
- data/lib/webby/filters/graphviz.rb +0 -189
- data/lib/webby/resource.rb +0 -293
data/lib/webby/webby_task.rb
CHANGED
@@ -1,15 +1,9 @@
|
|
1
|
-
# $Id: webby_task.rb
|
1
|
+
# $Id: webby_task.rb 173 2008-02-27 02:58:43Z tim_pease $
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
require 'rake/tasklib'
|
6
|
-
rescue LoadError
|
7
|
-
require 'rubygems'
|
8
|
-
raise unless gem 'rake'
|
9
|
-
retry
|
10
|
-
end
|
3
|
+
require 'rake'
|
4
|
+
require 'rake/tasklib'
|
11
5
|
|
12
|
-
module Rake
|
6
|
+
module Rake # :nodoc:
|
13
7
|
|
14
8
|
# The WebbyTask defines several rake tasks for working with Webby based
|
15
9
|
# websites:
|
@@ -80,6 +74,8 @@ class WebbyTask < TaskLib
|
|
80
74
|
end
|
81
75
|
end
|
82
76
|
|
77
|
+
# TODO: modify creation task to handle folders of pages/partials
|
78
|
+
|
83
79
|
# Scans the templates directory for any files, and creats a corresponding
|
84
80
|
# task for creating a new page based on that template.
|
85
81
|
#
|
@@ -87,25 +83,48 @@ class WebbyTask < TaskLib
|
|
87
83
|
FileList["#{::Webby.site.template_dir}/*"].each do |template|
|
88
84
|
name = template.pathmap '%n'
|
89
85
|
|
90
|
-
|
91
|
-
|
92
|
-
|
86
|
+
# if the file is a partial template
|
87
|
+
if name =~ %r/^_(.*)/
|
88
|
+
name = $1
|
89
|
+
desc "create a new #{name}"
|
90
|
+
task name do |t|
|
91
|
+
raise "Usage: rake #{t.name} path" unless ARGV.length == 2
|
93
92
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
93
|
+
page = t.application.top_level_tasks.pop
|
94
|
+
name = '_' + ::Webby::Resources::File.basename(page)
|
95
|
+
ext = ::Webby::Resources::File.extname(page)
|
96
|
+
dir = ::File.dirname(page)
|
97
|
+
dir = '' if dir == '.'
|
98
98
|
|
99
|
-
|
100
|
-
page = ::File.join(::Webby.site.content_dir, name, 'index')
|
99
|
+
page = ::File.join(::Webby.site.content_dir, dir, name)
|
101
100
|
page << '.' << (ext.empty? ? 'txt' : ext)
|
102
|
-
|
103
|
-
|
104
|
-
page << '.txt' if ext.empty?
|
101
|
+
|
102
|
+
::Webby::Builder.create page, :from => template
|
105
103
|
end
|
106
104
|
|
107
|
-
|
108
|
-
|
105
|
+
# otherwise it's a normal file
|
106
|
+
else
|
107
|
+
desc "create a new #{name}"
|
108
|
+
task name do |t|
|
109
|
+
raise "Usage: rake #{t.name} path" unless ARGV.length == 2
|
110
|
+
|
111
|
+
page = t.application.top_level_tasks.pop
|
112
|
+
name = ::Webby::Resources::File.basename(page)
|
113
|
+
ext = ::Webby::Resources::File.extname(page)
|
114
|
+
dir = ::File.dirname(page)
|
115
|
+
dir = '' if dir == '.'
|
116
|
+
|
117
|
+
if ::Webby.site.create_mode == 'directory'
|
118
|
+
page = ::File.join(::Webby.site.content_dir, dir, name, 'index')
|
119
|
+
page << '.' << (ext.empty? ? 'txt' : ext)
|
120
|
+
else
|
121
|
+
page = ::File.join(::Webby.site.content_dir, page)
|
122
|
+
page << '.txt' if ext.empty?
|
123
|
+
end
|
124
|
+
|
125
|
+
::Webby::Builder.create page, :from => template
|
126
|
+
end # task
|
127
|
+
end
|
109
128
|
end # each
|
110
129
|
end
|
111
130
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,17 @@
|
|
1
|
-
# $Id: spec_helper.rb
|
1
|
+
# $Id: spec_helper.rb 155 2008-02-17 00:48:30Z tim_pease $
|
2
|
+
|
3
|
+
# Equivalent to a header guard in C/C++
|
4
|
+
# Used to prevent the spec helper from being loaded more than once
|
5
|
+
unless defined? WEBBY_SPEC_HELPER
|
6
|
+
WEBBY_SPEC_HELPER = true
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'fileutils'
|
2
10
|
|
3
11
|
require File.expand_path(
|
4
12
|
File.join(File.dirname(__FILE__), '..', 'lib', 'webby'))
|
5
13
|
|
14
|
+
|
15
|
+
end # unless defined?
|
16
|
+
|
6
17
|
# EOF
|
@@ -1,11 +1,11 @@
|
|
1
|
-
# $Id: file_spec.rb
|
1
|
+
# $Id: file_spec.rb 167 2008-02-24 00:59:54Z tim_pease $
|
2
2
|
|
3
|
-
require
|
4
|
-
require 'fileutils'
|
3
|
+
require ::File.join(::File.dirname(__FILE__), %w[.. .. spec_helper])
|
5
4
|
|
6
|
-
|
5
|
+
# ---------------------------------------------------------------------------
|
6
|
+
describe Webby::Resources::File do
|
7
7
|
|
8
|
-
FN = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lorem_ipsum.txt'))
|
8
|
+
FN = ::File.expand_path(::File.join(::File.dirname(__FILE__), '..', '..', 'lorem_ipsum.txt'))
|
9
9
|
FN_YAML = FN.gsub %r/\.txt\z/, '_yaml.txt'
|
10
10
|
LINES = [
|
11
11
|
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla orci\n",
|
@@ -21,22 +21,22 @@ describe Webby::File do
|
|
21
21
|
]
|
22
22
|
|
23
23
|
before do
|
24
|
-
File.open(FN,'w') {|fd| fd.write LINES}
|
25
|
-
File.open(FN_YAML,'w') do |fd|
|
24
|
+
::File.open(FN,'w') {|fd| fd.write LINES}
|
25
|
+
::File.open(FN_YAML,'w') do |fd|
|
26
26
|
fd.write "--- \n- one\n- two\n- three\n--- \n"
|
27
27
|
fd.write LINES
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
after do
|
32
|
-
|
33
|
-
|
32
|
+
::FileUtils.rm_f(FN)
|
33
|
+
::FileUtils.rm_f(FN_YAML)
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'should return nil for meta-data on regular files' do
|
37
37
|
begin
|
38
|
-
fd = Webby::File.new FN, 'r'
|
39
|
-
fd.meta_data.should
|
38
|
+
fd = Webby::Resources::File.new FN, 'r'
|
39
|
+
fd.meta_data.should be_nil
|
40
40
|
|
41
41
|
fd.readlines.should == LINES
|
42
42
|
ensure
|
@@ -45,16 +45,16 @@ describe Webby::File do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'should add meta-data to the top of a file' do
|
48
|
-
Webby::File.open(FN,'a+') do |fd|
|
49
|
-
fd.meta_data.should
|
48
|
+
Webby::Resources::File.open(FN,'a+') do |fd|
|
49
|
+
fd.meta_data.should be_nil
|
50
50
|
fd.meta_data = %w(one two three)
|
51
51
|
end
|
52
52
|
|
53
|
-
Webby::File.open(FN,'r') do |fd|
|
53
|
+
Webby::Resources::File.open(FN,'r') do |fd|
|
54
54
|
fd.meta_data.should == %w(one two three)
|
55
55
|
end
|
56
56
|
|
57
|
-
File.open(FN_YAML, 'r') do |fd|
|
57
|
+
::File.open(FN_YAML, 'r') do |fd|
|
58
58
|
ary = LINES.dup
|
59
59
|
ary.insert 0, [
|
60
60
|
"--- \n",
|
@@ -68,23 +68,23 @@ describe Webby::File do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'should remove the meta-data when set to nil' do
|
71
|
-
Webby::File.open(FN_YAML,'a+') do |fd|
|
71
|
+
Webby::Resources::File.open(FN_YAML,'a+') do |fd|
|
72
72
|
fd.meta_data.should == %w(one two three)
|
73
73
|
fd.meta_data = nil
|
74
74
|
end
|
75
75
|
|
76
|
-
Webby::File.open(FN_YAML,'r') do |fd|
|
77
|
-
fd.meta_data.should
|
76
|
+
Webby::Resources::File.open(FN_YAML,'r') do |fd|
|
77
|
+
fd.meta_data.should be_nil
|
78
78
|
end
|
79
79
|
|
80
|
-
File.open(FN_YAML, 'r') do |fd|
|
80
|
+
::File.open(FN_YAML, 'r') do |fd|
|
81
81
|
fd.readlines.should == LINES
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'should skip the meta-data when reading from the file' do
|
86
86
|
begin
|
87
|
-
fd = Webby::File.new FN_YAML, 'r'
|
87
|
+
fd = Webby::Resources::File.new FN_YAML, 'r'
|
88
88
|
fd.meta_data.should == %w(one two three)
|
89
89
|
|
90
90
|
fd.getc.should == ?L; fd.seek 0
|
@@ -100,7 +100,6 @@ describe Webby::File do
|
|
100
100
|
fd.close
|
101
101
|
end
|
102
102
|
end
|
103
|
-
|
104
|
-
end # describe Webby::File
|
103
|
+
end # describe Webby::Resources::File
|
105
104
|
|
106
105
|
# EOF
|
data/tasks/ann.rake
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'bones/smtp_tls'
|
5
|
+
rescue LoadError
|
6
|
+
require 'net/smtp'
|
7
|
+
end
|
8
|
+
require 'time'
|
9
|
+
|
10
|
+
namespace :ann do
|
11
|
+
|
12
|
+
file PROJ.ann_file do
|
13
|
+
puts "Generating #{PROJ.ann_file}"
|
14
|
+
File.open(PROJ.ann_file,'w') do |fd|
|
15
|
+
fd.puts("#{PROJ.name} version #{PROJ.version}")
|
16
|
+
fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
|
17
|
+
fd.puts(" #{PROJ.url}") if PROJ.url
|
18
|
+
fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
|
19
|
+
fd.puts
|
20
|
+
fd.puts("== DESCRIPTION")
|
21
|
+
fd.puts
|
22
|
+
fd.puts(PROJ.description)
|
23
|
+
fd.puts
|
24
|
+
fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
|
25
|
+
fd.puts
|
26
|
+
PROJ.ann_paragraphs.each do |p|
|
27
|
+
fd.puts "== #{p.upcase}"
|
28
|
+
fd.puts
|
29
|
+
fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
|
30
|
+
fd.puts
|
31
|
+
end
|
32
|
+
fd.puts PROJ.ann_text if PROJ.ann_text
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "Create an announcement file"
|
37
|
+
task :announcement => PROJ.ann_file
|
38
|
+
|
39
|
+
desc "Send an email announcement"
|
40
|
+
task :email => PROJ.ann_file do
|
41
|
+
from = PROJ.ann_email[:from] || PROJ.email
|
42
|
+
to = Array(PROJ.ann_email[:to])
|
43
|
+
|
44
|
+
### build a mail header for RFC 822
|
45
|
+
rfc822msg = "From: #{from}\n"
|
46
|
+
rfc822msg << "To: #{to.join(',')}\n"
|
47
|
+
rfc822msg << "Subject: [ANN] #{PROJ.name} #{PROJ.version}"
|
48
|
+
rfc822msg << " (#{PROJ.release_name})" if PROJ.release_name
|
49
|
+
rfc822msg << "\n"
|
50
|
+
rfc822msg << "Date: #{Time.new.rfc822}\n"
|
51
|
+
rfc822msg << "Message-Id: "
|
52
|
+
rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{PROJ.ann_email[:domain]}>\n\n"
|
53
|
+
rfc822msg << File.read(PROJ.ann_file)
|
54
|
+
|
55
|
+
params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
|
56
|
+
PROJ.ann_email[key]
|
57
|
+
end
|
58
|
+
|
59
|
+
params[3] = PROJ.email if params[3].nil?
|
60
|
+
|
61
|
+
if params[4].nil?
|
62
|
+
STDOUT.write "Please enter your e-mail password (#{params[3]}): "
|
63
|
+
params[4] = STDIN.gets.chomp
|
64
|
+
end
|
65
|
+
|
66
|
+
### send email
|
67
|
+
Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
|
68
|
+
end
|
69
|
+
end # namespace :ann
|
70
|
+
|
71
|
+
desc 'Alias to ann:announcement'
|
72
|
+
task :ann => 'ann:announcement'
|
73
|
+
|
74
|
+
CLOBBER << PROJ.ann_file
|
75
|
+
|
76
|
+
# EOF
|
data/tasks/annotations.rake
CHANGED
@@ -5,23 +5,15 @@ if HAVE_BONES
|
|
5
5
|
desc "Enumerate all annotations"
|
6
6
|
task :notes do
|
7
7
|
Bones::AnnotationExtractor.enumerate(
|
8
|
-
PROJ,
|
8
|
+
PROJ, PROJ.annotation_tags.join('|'), :tag => true)
|
9
9
|
end
|
10
10
|
|
11
11
|
namespace :notes do
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
desc "Enumerate all FIXME annotations"
|
18
|
-
task :fixme do
|
19
|
-
Bones::AnnotationExtractor.enumerate(PROJ, "FIXME")
|
20
|
-
end
|
21
|
-
|
22
|
-
desc "Enumerate all TODO annotations"
|
23
|
-
task :todo do
|
24
|
-
Bones::AnnotationExtractor.enumerate(PROJ, "TODO")
|
12
|
+
PROJ.annotation_tags.each do |tag|
|
13
|
+
desc "Enumerate all #{tag} annotations"
|
14
|
+
task tag.downcase.to_sym do
|
15
|
+
Bones::AnnotationExtractor.enumerate(PROJ, tag)
|
16
|
+
end
|
25
17
|
end
|
26
18
|
end
|
27
19
|
|
data/tasks/bones.rake
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
require 'pp'
|
4
|
+
require 'stringio'
|
5
|
+
|
6
|
+
namespace :bones do
|
7
|
+
|
8
|
+
desc 'Show the PROJ open struct'
|
9
|
+
task :debug do |t|
|
10
|
+
atr = if ARGV.length == 2
|
11
|
+
t.application.top_level_tasks.pop
|
12
|
+
end
|
13
|
+
sio = StringIO.new
|
14
|
+
sep = "\n" + ' '*27
|
15
|
+
fmt = "%23s => %s"
|
16
|
+
|
17
|
+
if atr
|
18
|
+
PP.pp(PROJ.send(atr.to_sym), sio, 49)
|
19
|
+
sio.seek 0
|
20
|
+
val = sio.read
|
21
|
+
val = val.split("\n").join(sep)
|
22
|
+
|
23
|
+
puts fmt % [atr, val]
|
24
|
+
else
|
25
|
+
h = PROJ.instance_variable_get(:@table)
|
26
|
+
h.keys.map {|k| k.to_s}.sort.each do |k|
|
27
|
+
sio.truncate 0
|
28
|
+
PP.pp(h[k.to_sym], sio, 49)
|
29
|
+
sio.seek 0
|
30
|
+
val = sio.read
|
31
|
+
val = val.split("\n").join(sep)
|
32
|
+
|
33
|
+
puts fmt % [k, val]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end # namespace :bones
|
39
|
+
|
40
|
+
# EOF
|
data/tasks/doc.rake
CHANGED
@@ -31,7 +31,6 @@ namespace :doc do
|
|
31
31
|
sh "#{RDOC} --ri -o ri ."
|
32
32
|
end
|
33
33
|
|
34
|
-
desc 'Remove ri products'
|
35
34
|
task :clobber_ri do
|
36
35
|
rm_r 'ri' rescue nil
|
37
36
|
end
|
@@ -44,6 +43,6 @@ task :doc => 'doc:rdoc'
|
|
44
43
|
desc 'Remove all build products'
|
45
44
|
task :clobber => %w(doc:clobber_rdoc doc:clobber_ri)
|
46
45
|
|
47
|
-
remove_desc_for_task %w(doc:clobber_rdoc
|
46
|
+
remove_desc_for_task %w(doc:clobber_rdoc)
|
48
47
|
|
49
48
|
# EOF
|
data/tasks/gem.rake
CHANGED
@@ -12,6 +12,7 @@ namespace :gem do
|
|
12
12
|
s.email = PROJ.email
|
13
13
|
s.homepage = Array(PROJ.url).first
|
14
14
|
s.rubyforge_project = PROJ.rubyforge_name
|
15
|
+
s.post_install_message = PROJ.post_install_message
|
15
16
|
|
16
17
|
s.description = PROJ.description
|
17
18
|
|
@@ -62,9 +63,29 @@ namespace :gem do
|
|
62
63
|
puts PROJ.spec.to_ruby
|
63
64
|
end
|
64
65
|
|
65
|
-
Rake::
|
66
|
+
pkg = Rake::PackageTask.new(PROJ.name, PROJ.version) do |pkg|
|
66
67
|
pkg.need_tar = PROJ.need_tar
|
67
68
|
pkg.need_zip = PROJ.need_zip
|
69
|
+
pkg.package_files += PROJ.spec.files
|
70
|
+
end
|
71
|
+
Rake::Task['gem:package'].instance_variable_set(:@full_comment, nil)
|
72
|
+
|
73
|
+
gem_file = if PROJ.spec.platform == Gem::Platform::RUBY
|
74
|
+
"#{pkg.package_name}.gem"
|
75
|
+
else
|
76
|
+
"#{pkg.package_name}-#{PROJ.spec.platform}.gem"
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "Build the gem file #{gem_file}"
|
80
|
+
task :package => "#{pkg.package_dir}/#{gem_file}"
|
81
|
+
|
82
|
+
file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.spec.files do
|
83
|
+
when_writing("Creating GEM") {
|
84
|
+
Gem::Builder.new(PROJ.spec).build
|
85
|
+
verbose(true) {
|
86
|
+
mv gem_file, "#{pkg.package_dir}/#{gem_file}"
|
87
|
+
}
|
88
|
+
}
|
68
89
|
end
|
69
90
|
|
70
91
|
desc 'Install the gem'
|
@@ -74,9 +95,15 @@ namespace :gem do
|
|
74
95
|
|
75
96
|
desc 'Uninstall the gem'
|
76
97
|
task :uninstall do
|
77
|
-
|
98
|
+
installed_list = Gem.source_index.find_name(PROJ.name)
|
99
|
+
if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
|
100
|
+
sh "#{SUDO} #{GEM} uninstall -v '#{PROJ.version}' -i -x #{PROJ.name}"
|
101
|
+
end
|
78
102
|
end
|
79
103
|
|
104
|
+
desc 'Reinstall the gem'
|
105
|
+
task :reinstall => [:uninstall, :install]
|
106
|
+
|
80
107
|
end # namespace :gem
|
81
108
|
|
82
109
|
desc 'Alias to gem:package'
|
data/tasks/manifest.rake
CHANGED
@@ -6,18 +6,11 @@ namespace :manifest do
|
|
6
6
|
|
7
7
|
desc 'Verify the manifest'
|
8
8
|
task :check do
|
9
|
-
fn = '
|
10
|
-
files =
|
11
|
-
exclude = Regexp.new(PROJ.exclude.join('|'))
|
12
|
-
Find.find '.' do |path|
|
13
|
-
path.sub! %r/^(\.\/|\/)/o, ''
|
14
|
-
next unless test ?f, path
|
15
|
-
next if path =~ exclude
|
16
|
-
files << path
|
17
|
-
end
|
9
|
+
fn = PROJ.manifest_file + '.tmp'
|
10
|
+
files = manifest_files
|
18
11
|
|
19
|
-
File.open(fn, 'w') {|fp| fp.puts files
|
20
|
-
lines = %x(#{DIFF} -du
|
12
|
+
File.open(fn, 'w') {|fp| fp.puts files}
|
13
|
+
lines = %x(#{DIFF} -du #{PROJ.manifest_file} #{fn}).split("\n")
|
21
14
|
if HAVE_FACETS_ANSICODE and ENV.has_key?('TERM')
|
22
15
|
lines.map! do |line|
|
23
16
|
case line
|
@@ -34,19 +27,20 @@ namespace :manifest do
|
|
34
27
|
|
35
28
|
desc 'Create a new manifest'
|
36
29
|
task :create do
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
path.sub! %r/^(\.\/|\/)/o, ''
|
42
|
-
next unless test ?f, path
|
43
|
-
next if path =~ exclude
|
44
|
-
files << path
|
30
|
+
files = manifest_files
|
31
|
+
unless test(?f, PROJ.manifest_file)
|
32
|
+
files << PROJ.manifest_file
|
33
|
+
files.sort!
|
45
34
|
end
|
35
|
+
File.open(PROJ.manifest_file, 'w') {|fp| fp.puts files}
|
36
|
+
end
|
46
37
|
|
47
|
-
|
48
|
-
|
38
|
+
task :assert do
|
39
|
+
files = manifest_files
|
40
|
+
manifest = File.read(PROJ.manifest_file).split($/)
|
41
|
+
raise "ERROR: #{PROJ.manifest_file} is out of date" unless files == manifest
|
49
42
|
end
|
43
|
+
|
50
44
|
end # namespace :manifest
|
51
45
|
|
52
46
|
desc 'Alias to manifest:check'
|