rake 0.9.6 → 10.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rake might be problematic. Click here for more details.
- data/README.rdoc +12 -0
- data/Rakefile +0 -1
- data/doc/command_line_usage.rdoc +17 -60
- data/doc/release_notes/rake-0.9.3.rdoc +23 -70
- data/lib/rake.rb +0 -1
- data/lib/rake/application.rb +23 -63
- data/lib/rake/backtrace.rb +2 -3
- data/lib/rake/contrib/ftptools.rb +2 -2
- data/lib/rake/dsl_definition.rb +0 -26
- data/lib/rake/ext/module.rb +0 -39
- data/lib/rake/ext/string.rb +1 -2
- data/lib/rake/ext/time.rb +1 -2
- data/lib/rake/file_list.rb +1 -8
- data/lib/rake/file_utils.rb +1 -1
- data/lib/rake/phony.rb +2 -4
- data/lib/rake/rake_module.rb +7 -0
- data/lib/rake/ruby182_test_unit_fix.rb +0 -0
- data/lib/rake/runtest.rb +1 -2
- data/lib/rake/task.rb +8 -9
- data/lib/rake/task_manager.rb +0 -11
- data/lib/rake/testtask.rb +1 -4
- data/lib/rake/thread_history_display.rb +4 -7
- data/lib/rake/thread_pool.rb +76 -42
- data/lib/rake/version.rb +6 -7
- data/test/helper.rb +4 -44
- data/test/test_rake_application.rb +0 -47
- data/test/test_rake_application_options.rb +6 -39
- data/test/test_rake_backtrace.rb +11 -33
- data/test/test_rake_dsl.rb +0 -37
- data/test/test_rake_file_task.rb +4 -4
- data/test/test_rake_functional.rb +8 -32
- data/test/test_rake_rake_test_loader.rb +1 -1
- data/test/test_rake_reduce_compat.rb +5 -33
- data/test/test_rake_task_manager_argument_resolution.rb +0 -5
- data/test/test_rake_task_with_arguments.rb +6 -17
- data/test/test_rake_thread_pool.rb +24 -1
- data/test/test_rake_top_level_functions.rb +0 -40
- data/test/test_thread_history_display.rb +14 -14
- metadata +3 -22
- data/doc/release_notes/rake-0.9.2.2.rdoc +0 -55
- data/doc/release_notes/rake-0.9.4.rdoc +0 -110
- data/doc/release_notes/rake-0.9.5.rdoc +0 -114
- data/doc/release_notes/rake-0.9.6.rdoc +0 -127
- data/lib/rake/classic_namespace.rb +0 -11
- data/lib/rake/contrib/sys.rb +0 -192
- data/lib/rake/gempackagetask.rb +0 -15
- data/lib/rake/private_reader.rb +0 -20
- data/lib/rake/promise.rb +0 -99
- data/lib/rake/rdoctask.rb +0 -234
- data/lib/rake/trace_output.rb +0 -19
- data/test/test_private_reader.rb +0 -42
- data/test/test_rake_rdoc_task.rb +0 -83
- data/test/test_sys.rb +0 -20
- data/test/test_trace_output.rb +0 -43
@@ -4,9 +4,9 @@ require 'open3'
|
|
4
4
|
class TestRakeReduceCompat < Rake::TestCase
|
5
5
|
# TODO: factor out similar code in test_rake_functional.rb
|
6
6
|
def rake(*args)
|
7
|
-
|
8
|
-
|
9
|
-
}
|
7
|
+
lib = File.join(@orig_PWD, "lib")
|
8
|
+
bin_rake = File.join(@orig_PWD, "bin", "rake")
|
9
|
+
Open3.popen3(RUBY, "-I", lib, bin_rake, *args) { |_, out, _, _| out.read }
|
10
10
|
end
|
11
11
|
|
12
12
|
def invoke_normal(task_name)
|
@@ -28,38 +28,10 @@ class TestRakeReduceCompat < Rake::TestCase
|
|
28
28
|
end
|
29
29
|
}
|
30
30
|
|
31
|
-
assert_equal
|
32
|
-
assert_equal
|
31
|
+
assert_equal "nil", invoke_normal(:check_task).chomp
|
32
|
+
assert_equal "nil", invoke_normal(:check_file).chomp
|
33
33
|
|
34
34
|
assert_equal "nil", invoke_reduce_compat(:check_task).chomp
|
35
35
|
assert_equal "nil", invoke_reduce_compat(:check_file).chomp
|
36
36
|
end
|
37
|
-
|
38
|
-
def test_no_classic_namespace
|
39
|
-
rakefile %q{
|
40
|
-
task :check_task do
|
41
|
-
begin
|
42
|
-
Task
|
43
|
-
print "present"
|
44
|
-
rescue NameError
|
45
|
-
print "absent"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
task :check_file_task do
|
50
|
-
begin
|
51
|
-
FileTask
|
52
|
-
print "present"
|
53
|
-
rescue NameError
|
54
|
-
print "absent"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
}
|
58
|
-
|
59
|
-
assert_equal "present", invoke_normal(:check_task)
|
60
|
-
assert_equal "present", invoke_normal(:check_file_task)
|
61
|
-
|
62
|
-
assert_equal "absent", invoke_reduce_compat(:check_task)
|
63
|
-
assert_equal "absent", invoke_reduce_compat(:check_file_task)
|
64
|
-
end
|
65
37
|
end
|
@@ -19,11 +19,6 @@ class TestRakeTaskManagerArgumentResolution < Rake::TestCase
|
|
19
19
|
assert_equal [:t, [], [:x]], task(:t => :x)
|
20
20
|
assert_equal [:t, [], [:x, :y]], task(:t => [:x, :y])
|
21
21
|
|
22
|
-
assert_equal [:t, [:a, :b], []], task(:t, :a, :b)
|
23
|
-
assert_equal [:t, [], [:x]], task(:t, :needs => :x)
|
24
|
-
assert_equal [:t, [:a, :b], [:x]], task(:t, :a, :b, :needs => :x)
|
25
|
-
assert_equal [:t, [:a, :b], [:x, :y]], task(:t, :a, :b, :needs => [:x, :y])
|
26
|
-
|
27
22
|
assert_equal [:t, [:a, :b], []], task(:t, [:a, :b])
|
28
23
|
assert_equal [:t, [:a, :b], [:x]], task(:t, [:a, :b] => :x)
|
29
24
|
assert_equal [:t, [:a, :b], [:x, :y]], task(:t, [:a, :b] => [:x, :y])
|
@@ -33,13 +33,11 @@ class TestRakeTaskWithArguments < Rake::TestCase
|
|
33
33
|
assert_equal ["pre"], t.prerequisites
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
assert_equal ["pre"], t.prerequisites
|
42
|
-
end
|
36
|
+
def test_name_args_and_prereqs
|
37
|
+
t = task(:t, [:x, :y] => [:pre])
|
38
|
+
assert_equal "t", t.name
|
39
|
+
assert_equal [:x, :y], t.arg_names
|
40
|
+
assert_equal ["pre"], t.prerequisites
|
43
41
|
end
|
44
42
|
|
45
43
|
def test_illegal_keys_in_task_name_hash
|
@@ -142,7 +140,7 @@ class TestRakeTaskWithArguments < Rake::TestCase
|
|
142
140
|
assert_equal "1.2", value
|
143
141
|
end
|
144
142
|
|
145
|
-
def
|
143
|
+
def test_args_not_passed_if_no_prereq_names
|
146
144
|
pre = task(:pre) { |t, args|
|
147
145
|
assert_equal({}, args.to_hash)
|
148
146
|
assert_equal "bill", args.name
|
@@ -151,15 +149,6 @@ class TestRakeTaskWithArguments < Rake::TestCase
|
|
151
149
|
t.invoke("bill", "1.2")
|
152
150
|
end
|
153
151
|
|
154
|
-
def test_args_not_passed_if_no_prereq_names_on_multitask
|
155
|
-
pre = task(:pre) { |t, args|
|
156
|
-
assert_equal({}, args.to_hash)
|
157
|
-
assert_equal "bill", args.name
|
158
|
-
}
|
159
|
-
t = multitask(:t, [:name, :rev] => [:pre])
|
160
|
-
t.invoke("bill", "1.2")
|
161
|
-
end
|
162
|
-
|
163
152
|
def test_args_not_passed_if_no_arg_names
|
164
153
|
pre = task(:pre, :rev) { |t, args|
|
165
154
|
assert_equal({}, args.to_hash)
|
@@ -69,7 +69,7 @@ class TestRakeTestThreadPool < Rake::TestCase
|
|
69
69
|
}
|
70
70
|
|
71
71
|
pool.join
|
72
|
-
assert_equal true, pool.__send__(:__queue__).empty
|
72
|
+
assert_equal true, pool.__send__(:__queue__).empty?
|
73
73
|
end
|
74
74
|
|
75
75
|
# test that throwing an exception way down in the blocks propagates
|
@@ -88,6 +88,29 @@ class TestRakeTestThreadPool < Rake::TestCase
|
|
88
88
|
|
89
89
|
end
|
90
90
|
|
91
|
+
def test_pool_always_has_max_threads_doing_work
|
92
|
+
# here we need to test that even if some threads are halted, there
|
93
|
+
# are always at least max_threads that are not sleeping.
|
94
|
+
pool = ThreadPool.new(2)
|
95
|
+
initial_sleep_time = 0.2
|
96
|
+
future1 = pool.future { sleep initial_sleep_time }
|
97
|
+
dependent_futures = 5.times.collect { pool.future{ future1.value } }
|
98
|
+
future2 = pool.future { sleep initial_sleep_time }
|
99
|
+
future3 = pool.future { sleep 0.01 }
|
100
|
+
|
101
|
+
sleep initial_sleep_time / 2.0 # wait for everything to queue up
|
102
|
+
|
103
|
+
# at this point, we should have 5 threads sleeping depending on future1, and
|
104
|
+
# two threads doing work on future1 and future 2.
|
105
|
+
assert_equal pool.__send__(:__threads__).count, 7
|
106
|
+
|
107
|
+
# future 3 is in the queue because there aren't enough active threads to work on it.
|
108
|
+
assert_equal pool.__send__(:__queue__).size, 1
|
109
|
+
|
110
|
+
[future1, dependent_futures, future2, future3].flatten.each { |f| f.value }
|
111
|
+
pool.join
|
112
|
+
end
|
113
|
+
|
91
114
|
def test_pool_prevents_deadlock
|
92
115
|
pool = ThreadPool.new(5)
|
93
116
|
|
@@ -65,46 +65,6 @@ class TestRakeTopLevelFunctions < Rake::TestCase
|
|
65
65
|
Rake::FileUtilsExt.nowrite_flag = false
|
66
66
|
end
|
67
67
|
|
68
|
-
def test_missing_constants_task
|
69
|
-
Object.const_missing(:Task)
|
70
|
-
|
71
|
-
expected = [
|
72
|
-
[[:const_warning, :Task], nil]
|
73
|
-
]
|
74
|
-
|
75
|
-
assert_equal expected, @app.called
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_missing_constants_file_task
|
79
|
-
Object.const_missing(:FileTask)
|
80
|
-
|
81
|
-
expected = [
|
82
|
-
[[:const_warning, :FileTask], nil]
|
83
|
-
]
|
84
|
-
|
85
|
-
assert_equal expected, @app.called
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_missing_constants_file_creation_task
|
89
|
-
Object.const_missing(:FileCreationTask)
|
90
|
-
|
91
|
-
expected = [
|
92
|
-
[[:const_warning, :FileCreationTask], nil]
|
93
|
-
]
|
94
|
-
|
95
|
-
assert_equal expected, @app.called
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_missing_constants_rake_app
|
99
|
-
Object.const_missing(:RakeApp)
|
100
|
-
|
101
|
-
expected = [
|
102
|
-
[[:const_warning, :RakeApp], nil]
|
103
|
-
]
|
104
|
-
|
105
|
-
assert_equal expected, @app.called
|
106
|
-
end
|
107
|
-
|
108
68
|
def test_missing_other_constant
|
109
69
|
assert_raises(NameError) do Object.const_missing(:Xyz) end
|
110
70
|
end
|
@@ -18,7 +18,7 @@ class TestThreadHistoryDisplay < Rake::TestCase
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_item_queued
|
21
|
-
@stats << event(:item_queued, :
|
21
|
+
@stats << event(:item_queued, item_id: 123)
|
22
22
|
out, _ = capture_io do
|
23
23
|
@display.show
|
24
24
|
end
|
@@ -26,7 +26,7 @@ class TestThreadHistoryDisplay < Rake::TestCase
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_item_dequeued
|
29
|
-
@stats << event(:item_dequeued, :
|
29
|
+
@stats << event(:item_dequeued, item_id: 123)
|
30
30
|
out, _ = capture_io do
|
31
31
|
@display.show
|
32
32
|
end
|
@@ -34,8 +34,8 @@ class TestThreadHistoryDisplay < Rake::TestCase
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_multiple_items
|
37
|
-
@stats << event(:item_queued, :
|
38
|
-
@stats << event(:item_queued, :
|
37
|
+
@stats << event(:item_queued, item_id: 123)
|
38
|
+
@stats << event(:item_queued, item_id: 124)
|
39
39
|
out, _ = capture_io do
|
40
40
|
@display.show
|
41
41
|
end
|
@@ -44,7 +44,7 @@ class TestThreadHistoryDisplay < Rake::TestCase
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_waiting
|
47
|
-
@stats << event(:waiting, :
|
47
|
+
@stats << event(:waiting, item_id: 123)
|
48
48
|
out, _ = capture_io do
|
49
49
|
@display.show
|
50
50
|
end
|
@@ -52,7 +52,7 @@ class TestThreadHistoryDisplay < Rake::TestCase
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def test_continue
|
55
|
-
@stats << event(:continue, :
|
55
|
+
@stats << event(:continue, item_id: 123)
|
56
56
|
out, _ = capture_io do
|
57
57
|
@display.show
|
58
58
|
end
|
@@ -60,29 +60,29 @@ class TestThreadHistoryDisplay < Rake::TestCase
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def test_thread_deleted
|
63
|
-
@stats << event(:thread_deleted, :
|
63
|
+
@stats << event(:thread_deleted, deleted_thread: 123456, thread_count: 12)
|
64
64
|
out, _ = capture_io do
|
65
65
|
@display.show
|
66
66
|
end
|
67
|
-
assert_match(/^ *1000000 +A +thread_deleted
|
67
|
+
assert_match(/^ *1000000 +A +thread_deleted +deleted_thread:B +thread_count:12$/, out)
|
68
68
|
end
|
69
69
|
|
70
70
|
def test_thread_created
|
71
|
-
@stats << event(:thread_created, :
|
71
|
+
@stats << event(:thread_created, new_thread: 123456, thread_count: 13)
|
72
72
|
out, _ = capture_io do
|
73
73
|
@display.show
|
74
74
|
end
|
75
|
-
assert_match(/^ *1000000 +A +thread_created
|
75
|
+
assert_match(/^ *1000000 +A +thread_created +new_thread:B +thread_count:13$/, out)
|
76
76
|
end
|
77
77
|
|
78
78
|
private
|
79
79
|
|
80
80
|
def event(type, data={})
|
81
81
|
result = {
|
82
|
-
:
|
83
|
-
:
|
84
|
-
:
|
85
|
-
:
|
82
|
+
event: type,
|
83
|
+
time: @time / 1_000_000.0,
|
84
|
+
data: data,
|
85
|
+
thread: Thread.current.object_id
|
86
86
|
}
|
87
87
|
@time += 1
|
88
88
|
result
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 10.0.0.beta.1
|
5
|
+
prerelease: 7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jim Weirich
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -62,12 +62,8 @@ extra_rdoc_files:
|
|
62
62
|
- doc/release_notes/rake-0.8.7.rdoc
|
63
63
|
- doc/release_notes/rake-0.9.0.rdoc
|
64
64
|
- doc/release_notes/rake-0.9.1.rdoc
|
65
|
-
- doc/release_notes/rake-0.9.2.2.rdoc
|
66
65
|
- doc/release_notes/rake-0.9.2.rdoc
|
67
66
|
- doc/release_notes/rake-0.9.3.rdoc
|
68
|
-
- doc/release_notes/rake-0.9.4.rdoc
|
69
|
-
- doc/release_notes/rake-0.9.5.rdoc
|
70
|
-
- doc/release_notes/rake-0.9.6.rdoc
|
71
67
|
files:
|
72
68
|
- .gemtest
|
73
69
|
- install.rb
|
@@ -81,7 +77,6 @@ files:
|
|
81
77
|
- lib/rake/alt_system.rb
|
82
78
|
- lib/rake/application.rb
|
83
79
|
- lib/rake/backtrace.rb
|
84
|
-
- lib/rake/classic_namespace.rb
|
85
80
|
- lib/rake/clean.rb
|
86
81
|
- lib/rake/cloneable.rb
|
87
82
|
- lib/rake/contrib/compositepublisher.rb
|
@@ -89,7 +84,6 @@ files:
|
|
89
84
|
- lib/rake/contrib/publisher.rb
|
90
85
|
- lib/rake/contrib/rubyforgepublisher.rb
|
91
86
|
- lib/rake/contrib/sshpublisher.rb
|
92
|
-
- lib/rake/contrib/sys.rb
|
93
87
|
- lib/rake/default_loader.rb
|
94
88
|
- lib/rake/dsl_definition.rb
|
95
89
|
- lib/rake/early_time.rb
|
@@ -102,7 +96,6 @@ files:
|
|
102
96
|
- lib/rake/file_task.rb
|
103
97
|
- lib/rake/file_utils.rb
|
104
98
|
- lib/rake/file_utils_ext.rb
|
105
|
-
- lib/rake/gempackagetask.rb
|
106
99
|
- lib/rake/invocation_chain.rb
|
107
100
|
- lib/rake/invocation_exception_mixin.rb
|
108
101
|
- lib/rake/loaders/makefile.rb
|
@@ -111,12 +104,9 @@ files:
|
|
111
104
|
- lib/rake/packagetask.rb
|
112
105
|
- lib/rake/pathmap.rb
|
113
106
|
- lib/rake/phony.rb
|
114
|
-
- lib/rake/private_reader.rb
|
115
|
-
- lib/rake/promise.rb
|
116
107
|
- lib/rake/pseudo_status.rb
|
117
108
|
- lib/rake/rake_module.rb
|
118
109
|
- lib/rake/rake_test_loader.rb
|
119
|
-
- lib/rake/rdoctask.rb
|
120
110
|
- lib/rake/ruby182_test_unit_fix.rb
|
121
111
|
- lib/rake/rule_recursion_overflow_error.rb
|
122
112
|
- lib/rake/runtest.rb
|
@@ -128,12 +118,10 @@ files:
|
|
128
118
|
- lib/rake/testtask.rb
|
129
119
|
- lib/rake/thread_history_display.rb
|
130
120
|
- lib/rake/thread_pool.rb
|
131
|
-
- lib/rake/trace_output.rb
|
132
121
|
- lib/rake/version.rb
|
133
122
|
- lib/rake/win32.rb
|
134
123
|
- test/file_creation.rb
|
135
124
|
- test/helper.rb
|
136
|
-
- test/test_private_reader.rb
|
137
125
|
- test/test_rake.rb
|
138
126
|
- test/test_rake_application.rb
|
139
127
|
- test/test_rake_application_options.rb
|
@@ -161,7 +149,6 @@ files:
|
|
161
149
|
- test/test_rake_path_map_partial.rb
|
162
150
|
- test/test_rake_pseudo_status.rb
|
163
151
|
- test/test_rake_rake_test_loader.rb
|
164
|
-
- test/test_rake_rdoc_task.rb
|
165
152
|
- test/test_rake_reduce_compat.rb
|
166
153
|
- test/test_rake_require.rb
|
167
154
|
- test/test_rake_rules.rb
|
@@ -176,9 +163,7 @@ files:
|
|
176
163
|
- test/test_rake_thread_pool.rb
|
177
164
|
- test/test_rake_top_level_functions.rb
|
178
165
|
- test/test_rake_win32.rb
|
179
|
-
- test/test_sys.rb
|
180
166
|
- test/test_thread_history_display.rb
|
181
|
-
- test/test_trace_output.rb
|
182
167
|
- doc/command_line_usage.rdoc
|
183
168
|
- doc/example/Rakefile1
|
184
169
|
- doc/example/Rakefile2
|
@@ -210,12 +195,8 @@ files:
|
|
210
195
|
- doc/release_notes/rake-0.8.7.rdoc
|
211
196
|
- doc/release_notes/rake-0.9.0.rdoc
|
212
197
|
- doc/release_notes/rake-0.9.1.rdoc
|
213
|
-
- doc/release_notes/rake-0.9.2.2.rdoc
|
214
198
|
- doc/release_notes/rake-0.9.2.rdoc
|
215
199
|
- doc/release_notes/rake-0.9.3.rdoc
|
216
|
-
- doc/release_notes/rake-0.9.4.rdoc
|
217
|
-
- doc/release_notes/rake-0.9.5.rdoc
|
218
|
-
- doc/release_notes/rake-0.9.6.rdoc
|
219
200
|
homepage: http://rake.rubyforge.org
|
220
201
|
licenses: []
|
221
202
|
post_install_message:
|
@@ -1,55 +0,0 @@
|
|
1
|
-
= Rake 0.9.3 Released
|
2
|
-
|
3
|
-
Rake version 0.9.3 is mainly bug fixes.
|
4
|
-
|
5
|
-
== Changes
|
6
|
-
|
7
|
-
* The rake test loader now removes arguments it has processed. Issue #51
|
8
|
-
* Rake::TaskArguments now responds to #values_at
|
9
|
-
* RakeFileUtils.verbose_flag = nil silences output the same as 0.8.7
|
10
|
-
* Rake tests are now directory-independent
|
11
|
-
* Rake tests are no longer require flexmock
|
12
|
-
* Commands constant is no longer polluting top level namespace.
|
13
|
-
* Show only the interesting portion of the backtrace by default (James M. Lawrence).
|
14
|
-
* Added --reduce-compat option to remove backward compatible DSL hacks (James M. Lawrence).
|
15
|
-
|
16
|
-
== What is Rake
|
17
|
-
|
18
|
-
Rake is a build tool similar to the make program in many ways. But
|
19
|
-
instead of cryptic make recipes, Rake uses standard Ruby code to
|
20
|
-
declare tasks and dependencies. You have the full power of a modern
|
21
|
-
scripting language built right into your build tool.
|
22
|
-
|
23
|
-
== Availability
|
24
|
-
|
25
|
-
The easiest way to get and install rake is via RubyGems ...
|
26
|
-
|
27
|
-
gem install rake (you may need root/admin privileges)
|
28
|
-
|
29
|
-
Otherwise, you can get it from the more traditional places:
|
30
|
-
|
31
|
-
Home Page:: http://rake.rubyforge.org/
|
32
|
-
Download:: http://rubyforge.org/project/showfiles.php?group_id=50
|
33
|
-
GitHub:: git://github.com/jimweirich/rake.git
|
34
|
-
|
35
|
-
== Thanks
|
36
|
-
|
37
|
-
As usual, it was input from users that drove a alot of these changes. The
|
38
|
-
following people either contributed patches, made suggestions or made
|
39
|
-
otherwise helpful comments. Thanks to ...
|
40
|
-
|
41
|
-
* James M. Lawrence (quix)
|
42
|
-
* Roger Pack
|
43
|
-
* Cezary Baginski
|
44
|
-
* Sean Scot August Moon
|
45
|
-
* R.T. Lechow
|
46
|
-
* Alex Chaffee
|
47
|
-
* James Tucker
|
48
|
-
* Matthias Lüdtke
|
49
|
-
* Santiago Pastorino
|
50
|
-
|
51
|
-
Also, bit thanks to Eric Hodel for assisting with getting this release
|
52
|
-
out the door (where "assisting" includes, but is not by any means
|
53
|
-
limited to, "pushing" me to get it done).
|
54
|
-
|
55
|
-
-- Jim Weirich
|