logging 0.9.4 → 0.9.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|