logging 0.9.4 → 0.9.5
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 +10 -0
- data/README.rdoc +8 -0
- data/Rakefile +12 -4
- data/lib/logging.rb +5 -1
- data/lib/logging/appender.rb +3 -0
- data/lib/logging/appenders/buffering.rb +167 -0
- data/lib/logging/appenders/email.rb +18 -73
- data/lib/logging/appenders/io.rb +13 -24
- data/lib/logging/layout.rb +0 -3
- data/lib/logging/layouts/pattern.rb +5 -0
- data/lib/logging/logger.rb +13 -13
- data/logging.gemspec +41 -0
- data/tasks/ann.rake +1 -1
- data/tasks/gem.rake +104 -28
- data/tasks/post_load.rake +4 -8
- data/tasks/rubyforge.rake +2 -4
- data/tasks/setup.rb +36 -7
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +3 -0
- data/test/appenders/test_buffered_io.rb +183 -0
- data/test/appenders/test_email.rb +27 -22
- data/test/appenders/test_io.rb +2 -0
- data/test/layouts/test_pattern.rb +5 -0
- data/test/test_layout.rb +9 -9
- metadata +19 -5
- data/Manifest.txt +0 -62
- data/tasks/manifest.rake +0 -48
data/lib/logging/layout.rb
CHANGED
@@ -56,6 +56,10 @@ module Layouts
|
|
56
56
|
# construction of the Layout until creation of the log event.
|
57
57
|
# [t] Used to output the object ID of the thread that generated the
|
58
58
|
# log event.
|
59
|
+
# [T] Used to output the name of the thread that generated the log event.
|
60
|
+
# Name can be specified using Thread.current[:name] notation. Output empty
|
61
|
+
# string if name not specified. This options helps to create more human
|
62
|
+
# readable output for multithread application log.
|
59
63
|
# [%] The sequence '%%' outputs a single percent sign.
|
60
64
|
#
|
61
65
|
# The directives F, L, and M will only work if the Logger generating the
|
@@ -125,6 +129,7 @@ module Layouts
|
|
125
129
|
'p' => 'Process.pid',
|
126
130
|
'r' => 'Integer((Time.now-@created_at)*1000).to_s',
|
127
131
|
't' => 'Thread.current.object_id.to_s',
|
132
|
+
'T' => 'Thread.current[:name]',
|
128
133
|
'%' => :placeholder
|
129
134
|
}
|
130
135
|
|
data/lib/logging/logger.rb
CHANGED
@@ -449,8 +449,8 @@ module Logging
|
|
449
449
|
str << spacer
|
450
450
|
str << '.' * (base - str.length)
|
451
451
|
end
|
452
|
-
io.
|
453
|
-
io.
|
452
|
+
io.write(str.ljust(base))
|
453
|
+
io.write(spacer)
|
454
454
|
|
455
455
|
level_str = @level.nil? ? '' : '*'
|
456
456
|
level_str << if level < ::Logging::LEVELS.length
|
@@ -460,24 +460,24 @@ module Logging
|
|
460
460
|
end
|
461
461
|
level_len = ::Logging::MAX_LEVEL_LENGTH + 1
|
462
462
|
|
463
|
-
io.
|
464
|
-
io.
|
463
|
+
io.write("%#{level_len}s" % level_str)
|
464
|
+
io.write(spacer)
|
465
465
|
|
466
466
|
if self.respond_to?(:additive)
|
467
|
-
io.
|
467
|
+
io.write(additive ? '+A' : '-A')
|
468
468
|
else
|
469
|
-
io.
|
469
|
+
io.write(' ')
|
470
470
|
end
|
471
471
|
|
472
|
-
io.
|
473
|
-
io.
|
474
|
-
io.
|
472
|
+
io.write(spacer)
|
473
|
+
io.write(trace ? '+T' : '-T')
|
474
|
+
io.write("\n")
|
475
475
|
|
476
476
|
@appenders.each do |appender|
|
477
|
-
io.
|
478
|
-
io.
|
479
|
-
io.
|
480
|
-
io.
|
477
|
+
io.write(indent_str)
|
478
|
+
io.write('- ')
|
479
|
+
io.write(appender.inspect)
|
480
|
+
io.write("\n")
|
481
481
|
end
|
482
482
|
|
483
483
|
return io
|
data/logging.gemspec
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{logging}
|
5
|
+
s.version = "0.9.5"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Tim Pease"]
|
9
|
+
s.date = %q{2009-01-25}
|
10
|
+
s.description = %q{Logging is a flexible logging library for use in Ruby programs based on the design of Java's log4j library. It features a hierarchical logging system, custom level names, multiple output destinations per log event, custom formatting, and more.}
|
11
|
+
s.email = %q{tim.pease@gmail.com}
|
12
|
+
s.extra_rdoc_files = ["History.txt", "README.rdoc"]
|
13
|
+
s.files = ["History.txt", "README.rdoc", "Rakefile", "data/bad_logging_1.rb", "data/bad_logging_2.rb", "data/logging.rb", "data/logging.yaml", "data/simple_logging.rb", "lib/logging.rb", "lib/logging/appender.rb", "lib/logging/appenders/buffering.rb", "lib/logging/appenders/console.rb", "lib/logging/appenders/email.rb", "lib/logging/appenders/file.rb", "lib/logging/appenders/growl.rb", "lib/logging/appenders/io.rb", "lib/logging/appenders/rolling_file.rb", "lib/logging/appenders/syslog.rb", "lib/logging/config/configurator.rb", "lib/logging/config/yaml_configurator.rb", "lib/logging/layout.rb", "lib/logging/layouts/basic.rb", "lib/logging/layouts/pattern.rb", "lib/logging/log_event.rb", "lib/logging/logger.rb", "lib/logging/repository.rb", "lib/logging/root_logger.rb", "lib/logging/stats.rb", "lib/logging/utils.rb", "test/appenders/test_buffered_io.rb", "test/appenders/test_console.rb", "test/appenders/test_email.rb", "test/appenders/test_file.rb", "test/appenders/test_growl.rb", "test/appenders/test_io.rb", "test/appenders/test_rolling_file.rb", "test/appenders/test_syslog.rb", "test/benchmark.rb", "test/config/test_configurator.rb", "test/config/test_yaml_configurator.rb", "test/layouts/test_basic.rb", "test/layouts/test_pattern.rb", "test/setup.rb", "test/test_appender.rb", "test/test_layout.rb", "test/test_log_event.rb", "test/test_logger.rb", "test/test_logging.rb", "test/test_repository.rb", "test/test_root_logger.rb", "test/test_stats.rb", "test/test_utils.rb"]
|
14
|
+
s.has_rdoc = true
|
15
|
+
s.homepage = %q{http://logging.rubyforge.org/}
|
16
|
+
s.rdoc_options = ["--main", "README.rdoc"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.rubyforge_project = %q{logging}
|
19
|
+
s.rubygems_version = %q{1.3.1}
|
20
|
+
s.summary = %q{A flexible and extendable logging library for Ruby}
|
21
|
+
s.test_files = ["test/appenders/test_buffered_io.rb", "test/appenders/test_console.rb", "test/appenders/test_email.rb", "test/appenders/test_file.rb", "test/appenders/test_growl.rb", "test/appenders/test_io.rb", "test/appenders/test_rolling_file.rb", "test/appenders/test_syslog.rb", "test/config/test_configurator.rb", "test/config/test_yaml_configurator.rb", "test/layouts/test_basic.rb", "test/layouts/test_pattern.rb", "test/test_appender.rb", "test/test_layout.rb", "test/test_log_event.rb", "test/test_logger.rb", "test/test_logging.rb", "test/test_repository.rb", "test/test_root_logger.rb", "test/test_stats.rb", "test/test_utils.rb"]
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
+
s.specification_version = 2
|
26
|
+
|
27
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
|
+
s.add_runtime_dependency(%q<flexmock>, [">= 0.8.2"])
|
29
|
+
s.add_runtime_dependency(%q<lockfile>, [">= 1.4.3"])
|
30
|
+
s.add_development_dependency(%q<bones>, [">= 2.3.0"])
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<flexmock>, [">= 0.8.2"])
|
33
|
+
s.add_dependency(%q<lockfile>, [">= 1.4.3"])
|
34
|
+
s.add_dependency(%q<bones>, [">= 2.3.0"])
|
35
|
+
end
|
36
|
+
else
|
37
|
+
s.add_dependency(%q<flexmock>, [">= 0.8.2"])
|
38
|
+
s.add_dependency(%q<lockfile>, [">= 1.4.3"])
|
39
|
+
s.add_dependency(%q<bones>, [">= 2.3.0"])
|
40
|
+
end
|
41
|
+
end
|
data/tasks/ann.rake
CHANGED
@@ -42,7 +42,7 @@ namespace :ann do
|
|
42
42
|
desc "Send an email announcement"
|
43
43
|
task :email => ['ann:prereqs', PROJ.ann.file] do
|
44
44
|
ann = PROJ.ann
|
45
|
-
from = ann.email[:from] || PROJ.email
|
45
|
+
from = ann.email[:from] || Array(PROJ.authors).first || PROJ.email
|
46
46
|
to = Array(ann.email[:to])
|
47
47
|
|
48
48
|
### build a mail header for RFC 822
|
data/tasks/gem.rake
CHANGED
@@ -1,5 +1,94 @@
|
|
1
1
|
|
2
|
-
require '
|
2
|
+
require 'find'
|
3
|
+
require 'rake/packagetask'
|
4
|
+
require 'rubygems/user_interaction'
|
5
|
+
require 'rubygems/builder'
|
6
|
+
|
7
|
+
module Bones
|
8
|
+
class GemPackageTask < Rake::PackageTask
|
9
|
+
# Ruby GEM spec containing the metadata for this package. The
|
10
|
+
# name, version and package_files are automatically determined
|
11
|
+
# from the GEM spec and don't need to be explicitly provided.
|
12
|
+
#
|
13
|
+
attr_accessor :gem_spec
|
14
|
+
|
15
|
+
# Tasks from the Bones gem directory
|
16
|
+
attr_reader :bones_files
|
17
|
+
|
18
|
+
# Create a GEM Package task library. Automatically define the gem
|
19
|
+
# if a block is given. If no block is supplied, then +define+
|
20
|
+
# needs to be called to define the task.
|
21
|
+
#
|
22
|
+
def initialize(gem_spec)
|
23
|
+
init(gem_spec)
|
24
|
+
yield self if block_given?
|
25
|
+
define if block_given?
|
26
|
+
end
|
27
|
+
|
28
|
+
# Initialization tasks without the "yield self" or define
|
29
|
+
# operations.
|
30
|
+
#
|
31
|
+
def init(gem)
|
32
|
+
super(gem.name, gem.version)
|
33
|
+
@gem_spec = gem
|
34
|
+
@package_files += gem_spec.files if gem_spec.files
|
35
|
+
@bones_files = []
|
36
|
+
|
37
|
+
local_setup = File.join(Dir.pwd, %w[tasks setup.rb])
|
38
|
+
if !test(?e, local_setup)
|
39
|
+
Dir.glob(::Bones.path(%w[lib bones tasks *])).each {|fn| bones_files << fn}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Create the Rake tasks and actions specified by this
|
44
|
+
# GemPackageTask. (+define+ is automatically called if a block is
|
45
|
+
# given to +new+).
|
46
|
+
#
|
47
|
+
def define
|
48
|
+
super
|
49
|
+
task :prereqs
|
50
|
+
task :package => ['gem:prereqs', "#{package_dir_path}/#{gem_file}"]
|
51
|
+
file "#{package_dir_path}/#{gem_file}" => [package_dir_path] + package_files + bones_files do
|
52
|
+
when_writing("Creating GEM") {
|
53
|
+
chdir(package_dir_path) do
|
54
|
+
Gem::Builder.new(gem_spec).build
|
55
|
+
verbose(true) {
|
56
|
+
mv gem_file, "../#{gem_file}"
|
57
|
+
}
|
58
|
+
end
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
file package_dir_path => bones_files do
|
63
|
+
mkdir_p package_dir rescue nil
|
64
|
+
|
65
|
+
gem_spec.files = (gem_spec.files +
|
66
|
+
bones_files.map {|fn| File.join('tasks', File.basename(fn))}).sort
|
67
|
+
|
68
|
+
bones_files.each do |fn|
|
69
|
+
base_fn = File.join('tasks', File.basename(fn))
|
70
|
+
f = File.join(package_dir_path, base_fn)
|
71
|
+
fdir = File.dirname(f)
|
72
|
+
mkdir_p(fdir) if !File.exist?(fdir)
|
73
|
+
if File.directory?(fn)
|
74
|
+
mkdir_p(f)
|
75
|
+
else
|
76
|
+
raise "file name conflict for '#{base_fn}' (conflicts with '#{fn}')" if test(?e, f)
|
77
|
+
safe_ln(fn, f)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def gem_file
|
84
|
+
if @gem_spec.platform == Gem::Platform::RUBY
|
85
|
+
"#{package_name}.gem"
|
86
|
+
else
|
87
|
+
"#{package_name}-#{@gem_spec.platform}.gem"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end # class GemPackageTask
|
91
|
+
end # module Bones
|
3
92
|
|
4
93
|
namespace :gem do
|
5
94
|
|
@@ -18,6 +107,10 @@ namespace :gem do
|
|
18
107
|
s.add_dependency(*dep)
|
19
108
|
end
|
20
109
|
|
110
|
+
PROJ.gem.development_dependencies.each do |dep|
|
111
|
+
s.add_development_dependency(*dep)
|
112
|
+
end
|
113
|
+
|
21
114
|
s.files = PROJ.gem.files
|
22
115
|
s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
|
23
116
|
s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
|
@@ -56,37 +149,21 @@ namespace :gem do
|
|
56
149
|
end
|
57
150
|
end # Gem::Specification.new
|
58
151
|
|
59
|
-
|
60
|
-
|
152
|
+
Bones::GemPackageTask.new(PROJ.gem._spec) do |pkg|
|
153
|
+
pkg.need_tar = PROJ.gem.need_tar
|
154
|
+
pkg.need_zip = PROJ.gem.need_zip
|
155
|
+
end
|
61
156
|
|
62
157
|
desc 'Show information about the gem'
|
63
158
|
task :debug => 'gem:prereqs' do
|
64
159
|
puts PROJ.gem._spec.to_ruby
|
65
160
|
end
|
66
161
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
72
|
-
Rake::Task['gem:package'].instance_variable_set(:@full_comment, nil)
|
73
|
-
|
74
|
-
gem_file = if PROJ.gem._spec.platform == Gem::Platform::RUBY
|
75
|
-
"#{pkg.package_name}.gem"
|
76
|
-
else
|
77
|
-
"#{pkg.package_name}-#{PROJ.gem._spec.platform}.gem"
|
162
|
+
desc 'Write the gemspec '
|
163
|
+
task :spec => 'gem:prereqs' do
|
164
|
+
File.open("#{PROJ.name}.gemspec", 'w') do |f|
|
165
|
+
f.write PROJ.gem._spec.to_ruby
|
78
166
|
end
|
79
|
-
|
80
|
-
desc "Build the gem file #{gem_file}"
|
81
|
-
task :package => ['gem:prereqs', "#{pkg.package_dir}/#{gem_file}"]
|
82
|
-
|
83
|
-
file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.gem._spec.files do
|
84
|
-
when_writing("Creating GEM") {
|
85
|
-
Gem::Builder.new(PROJ.gem._spec).build
|
86
|
-
verbose(true) {
|
87
|
-
mv gem_file, "#{pkg.package_dir}/#{gem_file}"
|
88
|
-
}
|
89
|
-
}
|
90
167
|
end
|
91
168
|
|
92
169
|
desc 'Install the gem'
|
@@ -112,14 +189,13 @@ namespace :gem do
|
|
112
189
|
task :cleanup do
|
113
190
|
sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
|
114
191
|
end
|
115
|
-
|
116
192
|
end # namespace :gem
|
117
193
|
|
194
|
+
|
118
195
|
desc 'Alias to gem:package'
|
119
196
|
task :gem => 'gem:package'
|
120
197
|
|
121
198
|
task :clobber => 'gem:clobber_package'
|
122
|
-
|
123
|
-
remove_desc_for_task %w(gem:clobber_package)
|
199
|
+
remove_desc_for_task 'gem:clobber_package'
|
124
200
|
|
125
201
|
# EOF
|
data/tasks/post_load.rake
CHANGED
@@ -2,14 +2,15 @@
|
|
2
2
|
# This file does not define any rake tasks. It is used to load some project
|
3
3
|
# settings if they are not defined by the user.
|
4
4
|
|
5
|
-
PROJ.rdoc.exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
|
6
5
|
PROJ.exclude << ["^#{Regexp.escape(PROJ.ann.file)}$",
|
6
|
+
"^#{Regexp.escape(PROJ.ignore_file)}$",
|
7
7
|
"^#{Regexp.escape(PROJ.rdoc.dir)}/",
|
8
8
|
"^#{Regexp.escape(PROJ.rcov.dir)}/"]
|
9
9
|
|
10
10
|
flatten_arrays = lambda do |this,os|
|
11
11
|
os.instance_variable_get(:@table).each do |key,val|
|
12
|
-
next if key == :dependencies
|
12
|
+
next if key == :dependencies \
|
13
|
+
or key == :development_dependencies
|
13
14
|
case val
|
14
15
|
when Array; val.flatten!
|
15
16
|
when OpenStruct; this.call(this,val)
|
@@ -24,12 +25,7 @@ PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join("\n\n")
|
|
24
25
|
|
25
26
|
PROJ.summary ||= PROJ.description.split('.').first
|
26
27
|
|
27
|
-
PROJ.gem.files ||=
|
28
|
-
if test(?f, PROJ.manifest_file)
|
29
|
-
files = File.readlines(PROJ.manifest_file).map {|fn| fn.chomp.strip}
|
30
|
-
files.delete ''
|
31
|
-
files
|
32
|
-
else [] end
|
28
|
+
PROJ.gem.files ||= manifest
|
33
29
|
|
34
30
|
PROJ.gem.executables ||= PROJ.gem.files.find_all {|fn| fn =~ %r/^bin/}
|
35
31
|
|
data/tasks/rubyforge.rake
CHANGED
@@ -6,7 +6,7 @@ require 'rake/contrib/sshpublisher'
|
|
6
6
|
|
7
7
|
namespace :gem do
|
8
8
|
desc 'Package and upload to RubyForge'
|
9
|
-
task :release => [:clobber, 'gem
|
9
|
+
task :release => [:clobber, 'gem'] do |t|
|
10
10
|
v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
|
11
11
|
abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
|
12
12
|
pkg = "pkg/#{PROJ.gem._spec.full_name}"
|
@@ -26,9 +26,7 @@ namespace :gem do
|
|
26
26
|
c['release_changes'] = PROJ.changes if PROJ.changes
|
27
27
|
c['preformatted'] = true
|
28
28
|
|
29
|
-
files =
|
30
|
-
(PROJ.gem.need_zip ? "#{pkg}.zip" : nil),
|
31
|
-
"#{pkg}.gem"].compact
|
29
|
+
files = Dir.glob("#{pkg}*.*")
|
32
30
|
|
33
31
|
puts "Releasing #{PROJ.name} v. #{PROJ.version}"
|
34
32
|
rf.add_release PROJ.rubyforge.name, PROJ.name, PROJ.version, *files
|
data/tasks/setup.rb
CHANGED
@@ -4,9 +4,13 @@ require 'rake'
|
|
4
4
|
require 'rake/clean'
|
5
5
|
require 'fileutils'
|
6
6
|
require 'ostruct'
|
7
|
+
require 'find'
|
7
8
|
|
8
9
|
class OpenStruct; undef :gem; end
|
9
10
|
|
11
|
+
# TODO: make my own openstruct type object that includes descriptions
|
12
|
+
# TODO: use the descriptions to output help on the available bones options
|
13
|
+
|
10
14
|
PROJ = OpenStruct.new(
|
11
15
|
# Project Defaults
|
12
16
|
:name => nil,
|
@@ -24,8 +28,8 @@ PROJ = OpenStruct.new(
|
|
24
28
|
:ruby_opts => %w(-w),
|
25
29
|
:libs => [],
|
26
30
|
:history_file => 'History.txt',
|
27
|
-
:manifest_file => 'Manifest.txt',
|
28
31
|
:readme_file => 'README.txt',
|
32
|
+
:ignore_file => '.bnsignore',
|
29
33
|
|
30
34
|
# Announce
|
31
35
|
:ann => OpenStruct.new(
|
@@ -47,6 +51,7 @@ PROJ = OpenStruct.new(
|
|
47
51
|
# Gem Packaging
|
48
52
|
:gem => OpenStruct.new(
|
49
53
|
:dependencies => [],
|
54
|
+
:development_dependencies => [],
|
50
55
|
:executables => nil,
|
51
56
|
:extensions => FileList['ext/**/extconf.rb'],
|
52
57
|
:files => nil,
|
@@ -58,7 +63,7 @@ PROJ = OpenStruct.new(
|
|
58
63
|
# File Annotations
|
59
64
|
:notes => OpenStruct.new(
|
60
65
|
:exclude => %w(^tasks/setup\.rb$),
|
61
|
-
:extensions => %w(.txt .rb .erb) << '',
|
66
|
+
:extensions => %w(.txt .rb .erb .rdoc) << '',
|
62
67
|
:tags => %w(FIXME OPTIMIZE TODO)
|
63
68
|
),
|
64
69
|
|
@@ -73,7 +78,7 @@ PROJ = OpenStruct.new(
|
|
73
78
|
# Rdoc
|
74
79
|
:rdoc => OpenStruct.new(
|
75
80
|
:opts => [],
|
76
|
-
:include => %w(^lib/ ^bin/ ^ext/ \.txt$),
|
81
|
+
:include => %w(^lib/ ^bin/ ^ext/ \.txt$ \.rdoc$),
|
77
82
|
:exclude => %w(extconf\.rb$),
|
78
83
|
:main => nil,
|
79
84
|
:dir => 'doc',
|
@@ -109,8 +114,10 @@ PROJ = OpenStruct.new(
|
|
109
114
|
)
|
110
115
|
|
111
116
|
# Load the other rake files in the tasks folder
|
112
|
-
|
113
|
-
|
117
|
+
tasks_dir = File.expand_path(File.dirname(__FILE__))
|
118
|
+
post_load_fn = File.join(tasks_dir, 'post_load.rake')
|
119
|
+
rakefiles = Dir.glob(File.join(tasks_dir, '*.rake')).sort
|
120
|
+
rakefiles.unshift(rakefiles.delete(post_load_fn)).compact!
|
114
121
|
import(*rakefiles)
|
115
122
|
|
116
123
|
# Setup the project libraries
|
@@ -161,6 +168,12 @@ HAVE_SVN = (Dir.entries(Dir.pwd).include?('.svn') and
|
|
161
168
|
HAVE_GIT = (Dir.entries(Dir.pwd).include?('.git') and
|
162
169
|
system("git --version 2>&1 > #{DEV_NULL}"))
|
163
170
|
|
171
|
+
# Add bones as a development dependency
|
172
|
+
#
|
173
|
+
if HAVE_BONES
|
174
|
+
PROJ.gem.development_dependencies << ['bones', ">= #{Bones::VERSION}"]
|
175
|
+
end
|
176
|
+
|
164
177
|
# Reads a file at +path+ and spits out an array of the +paragraphs+
|
165
178
|
# specified.
|
166
179
|
#
|
@@ -242,9 +255,25 @@ end
|
|
242
255
|
# Scans the current working directory and creates a list of files that are
|
243
256
|
# candidates to be in the manifest.
|
244
257
|
#
|
245
|
-
def
|
258
|
+
def manifest
|
246
259
|
files = []
|
247
|
-
exclude =
|
260
|
+
exclude = PROJ.exclude.dup
|
261
|
+
comment = %r/^\s*#/
|
262
|
+
|
263
|
+
# process the ignore file and add the items there to the exclude list
|
264
|
+
if test(?f, PROJ.ignore_file)
|
265
|
+
ary = File.readlines(PROJ.ignore_file).map do |line|
|
266
|
+
next if line =~ comment
|
267
|
+
line.chomp.strip
|
268
|
+
end
|
269
|
+
ary.compact!
|
270
|
+
ary.delete ''
|
271
|
+
exclude.concat ary
|
272
|
+
end
|
273
|
+
|
274
|
+
# generate a regular expression from the exclude list
|
275
|
+
exclude = Regexp.new(exclude.join('|'))
|
276
|
+
|
248
277
|
Find.find '.' do |path|
|
249
278
|
path.sub! %r/^(\.\/|\/)/o, ''
|
250
279
|
next unless test ?f, path
|