detroit 0.3.0 → 0.4.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.
- checksums.yaml +7 -0
- data/.index +59 -0
- data/EXAMPLE.md +66 -64
- data/{HISTORY.rdoc → HISTORY.md} +32 -5
- data/{COPYING.rdoc → LICENSE.txt} +0 -0
- data/README.md +142 -0
- data/bin/detroit +1 -1
- data/lib/detroit.rb +112 -40
- data/lib/detroit.yml +44 -29
- data/lib/detroit/assembly.rb +49 -193
- data/lib/detroit/basic_tool.rb +200 -0
- data/lib/detroit/basic_utils.rb +66 -0
- data/lib/detroit/core_ext.rb +2 -136
- data/lib/detroit/{tool/core_ext → core_ext}/facets.rb +3 -0
- data/lib/detroit/{tool/core_ext → core_ext}/filetest.rb +0 -0
- data/lib/detroit/{tool/core_ext → core_ext}/shell_extensions.rb +0 -0
- data/lib/detroit/{tool/core_ext → core_ext}/to_actual_filename.rb +0 -0
- data/lib/detroit/{tool/core_ext → core_ext}/to_console.rb +1 -0
- data/lib/detroit/{tool/core_ext → core_ext}/to_list.rb +0 -0
- data/lib/detroit/{tool/core_ext → core_ext}/to_yamlfrag.rb +0 -0
- data/lib/detroit/{tool/core_ext → core_ext}/unfold_paragraphs.rb +0 -0
- data/lib/detroit/{tool/email_utils.rb → email_utils.rb} +3 -1
- data/lib/detroit/exec.rb +55 -0
- data/lib/detroit/project.rb +134 -0
- data/lib/detroit/ruby_utils.rb +29 -0
- data/lib/detroit/{tool/shell_utils.rb → shell_utils.rb} +10 -5
- data/lib/detroit/toolchain.rb +6 -0
- data/lib/detroit/toolchain/cli.rb +320 -0
- data/lib/detroit/toolchain/config.rb +223 -0
- data/lib/detroit/toolchain/runner.rb +678 -0
- data/lib/detroit/toolchain/script.rb +248 -0
- data/lib/detroit/toolchain/worker.rb +84 -0
- data/man/detroit.1 +116 -0
- data/man/detroit.1.html +171 -0
- data/man/detroit.1.ronn +99 -0
- metadata +90 -51
- data/.ruby +0 -44
- data/README.rdoc +0 -132
- data/lib/detroit/application.rb +0 -463
- data/lib/detroit/assembly_system.rb +0 -80
- data/lib/detroit/config.rb +0 -203
- data/lib/detroit/control.rb +0 -129
- data/lib/detroit/custom.rb +0 -102
- data/lib/detroit/dsl.rb +0 -55
- data/lib/detroit/service.rb +0 -78
- data/lib/detroit/standard_assembly.rb +0 -51
- data/lib/detroit/tool.rb +0 -295
- data/lib/detroit/tool/core_ext.rb +0 -3
- data/lib/detroit/tool/project_utils.rb +0 -41
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c01bd1c2e302f1b33ce1ba7b8bb1dca2642bb511
|
4
|
+
data.tar.gz: 5a228a2c40736081f686157d33e189b4c74e15a5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 660dc433b88953988335c2bee9f7d3ac141b1c139b2e63ac43fc0842ad3d8adc3b7cc6e097cb2217c8504a370176815c52487c216d324fb3fc46d34bd9d57d27
|
7
|
+
data.tar.gz: 832de78b8b278321c31196f13dc0540c4ed26c83360c47d92c84add56b6122074999041b17d6718d8a99c117a7e02658bd64b7ac414a712e3560ac0f349ae6e7
|
data/.index
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
---
|
2
|
+
revision: 2013
|
3
|
+
type: ruby
|
4
|
+
sources:
|
5
|
+
- var
|
6
|
+
authors:
|
7
|
+
- name: Trans
|
8
|
+
email: transfire@gmail.com
|
9
|
+
organizations: []
|
10
|
+
requirements:
|
11
|
+
- name: facets
|
12
|
+
- name: indexer
|
13
|
+
- groups:
|
14
|
+
- test
|
15
|
+
development: true
|
16
|
+
name: qed
|
17
|
+
- groups:
|
18
|
+
- build
|
19
|
+
development: true
|
20
|
+
name: detroit-yard
|
21
|
+
- groups:
|
22
|
+
- build
|
23
|
+
development: true
|
24
|
+
name: detroit-gem
|
25
|
+
conflicts: []
|
26
|
+
alternatives: []
|
27
|
+
resources:
|
28
|
+
- type: home
|
29
|
+
uri: http://rubyworks.github.com/detroit
|
30
|
+
label: Homepage
|
31
|
+
- type: code
|
32
|
+
uri: http://github.com/rubyworks/detroit
|
33
|
+
label: Source Code
|
34
|
+
- type: mail
|
35
|
+
uri: http://groups.google.com/rubyworks-mailinglist
|
36
|
+
label: Mailing List
|
37
|
+
repositories:
|
38
|
+
- name: upstream
|
39
|
+
scm: git
|
40
|
+
uri: http://github.com/proutils/detroit.git
|
41
|
+
categories: []
|
42
|
+
copyrights:
|
43
|
+
- holder: Rubyworks
|
44
|
+
year: '2007'
|
45
|
+
license: GPL-3.0
|
46
|
+
customs: []
|
47
|
+
paths:
|
48
|
+
lib:
|
49
|
+
- lib
|
50
|
+
name: detroit
|
51
|
+
title: Detroit
|
52
|
+
summary: Software Production Mangement
|
53
|
+
created: '2007-10-10'
|
54
|
+
description: Detroit is an advanced lifecycle build system. With Detroit, build tasks
|
55
|
+
are user defined service instances tied to stops along a track. Whenever the detroit
|
56
|
+
console command is run, a track is followed from beginning to designated destination.
|
57
|
+
suite: detroit
|
58
|
+
version: 0.4.0
|
59
|
+
date: '2014-01-13'
|
data/EXAMPLE.md
CHANGED
@@ -1,58 +1,60 @@
|
|
1
1
|
# Detroit
|
2
2
|
|
3
|
-
Detroit's main configuration file is called
|
4
|
-
|
3
|
+
Detroit's main configuration file is called *toolchain*. Toolchains define
|
4
|
+
the specific *tool instances* that a project will utilize. Toolchains can
|
5
|
+
be written in a few different formats thanks to the flexibility of Ruby. All
|
6
|
+
formats are equivalent. Which format you use is strictly a regard of your
|
7
|
+
personal preference.
|
5
8
|
|
6
|
-
|
7
|
-
of Ruby. All formats are equivalent. Which format you use is strictly a regard
|
8
|
-
of your personal preference.
|
9
|
+
## Ruby-based Toolchain Scripts
|
9
10
|
|
10
|
-
|
11
|
+
### Tool Method Notation
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
Traditionally a Ruby-based assembly file is dominated by calls to the `service`
|
15
|
-
method with an optional service instance name and a setter block.
|
13
|
+
Traditionally a Ruby-based toolchain script is dominated by calls to the `tool`
|
14
|
+
method with an optional instance name and a setter block.
|
16
15
|
|
17
16
|
```ruby
|
18
|
-
|
19
|
-
s.
|
20
|
-
s.mailto
|
21
|
-
s.active
|
17
|
+
tool :myself do |s|
|
18
|
+
s.class = :Announce
|
19
|
+
s.mailto = "transfire@gmail.com"
|
20
|
+
s.active = true
|
22
21
|
end
|
23
22
|
|
24
|
-
|
23
|
+
tool :rdoc do |r|
|
25
24
|
r.include = [ 'lib', '[A-Z]*' ]
|
26
|
-
r.exclude = [ '
|
25
|
+
r.exclude = [ 'Gemfile' ]
|
27
26
|
end
|
28
27
|
```
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
In the first example the tool is given an arbitrary *tool name* and the
|
30
|
+
*tool type* is given via the `class` setting. (This setting can also be
|
31
|
+
called just `tool`, they are synonymous, but `class` reads better when used
|
32
|
+
with the tool method.) If the tool type is not specified, it is assumed to
|
33
|
+
be same as the tool instance name. In the above example `rdoc` is taken to
|
34
|
+
be both the type of tool and the name of the particular instance.
|
33
35
|
|
34
|
-
A few years ago, Sinatra came along and popularized the use of the `#set`
|
35
|
-
A simple addition to Detroit's
|
36
|
-
cleaner notation:
|
36
|
+
A few years ago, Sinatra came along and popularized the use of the `#set`
|
37
|
+
method. A simple addition to Detroit's toolchain evaluator allows for this
|
38
|
+
arguably cleaner notation:
|
37
39
|
|
38
40
|
```ruby
|
39
|
-
|
40
|
-
set :
|
41
|
+
tool :myself do
|
42
|
+
set :tooltype, :Announce
|
41
43
|
set :mailto, "transfire@gmail.com"
|
42
44
|
set :priority, -1
|
43
45
|
set :active, true
|
44
46
|
end
|
45
47
|
|
46
|
-
|
48
|
+
tool :rdoc do
|
47
49
|
set :include, [ 'lib', '[A-Z]*' ]
|
48
|
-
set :exclude, [ '
|
50
|
+
set :exclude, [ 'Gemfile' ]
|
49
51
|
end
|
50
52
|
```
|
51
53
|
|
52
54
|
The `#set` method also allows for nested set blocks to define hash values.
|
53
55
|
|
54
56
|
```ruby
|
55
|
-
|
57
|
+
tool :rubyforge do
|
56
58
|
set :sitemap do
|
57
59
|
set :site, name
|
58
60
|
end
|
@@ -61,23 +63,23 @@ The `#set` method also allows for nested set blocks to define hash values.
|
|
61
63
|
```
|
62
64
|
|
63
65
|
The setting `active` defaults to `true` if not given, so is not strictly
|
64
|
-
needed in the above examples, but it is convenient to have
|
65
|
-
|
66
|
-
|
66
|
+
needed in the above examples, but it is convenient to have if a tool ever
|
67
|
+
needs to be deactivate temporarily --more convenient than remarking out a
|
68
|
+
whole tool entry.
|
67
69
|
|
68
|
-
Almost all options have standard defaults so it is
|
69
|
-
|
70
|
+
Almost all options have standard defaults so it is sometimes possible for
|
71
|
+
a tool entry to be written as simply as:
|
70
72
|
|
71
73
|
```ruby
|
72
|
-
|
74
|
+
tool :rdoc
|
73
75
|
```
|
74
76
|
|
75
|
-
###
|
77
|
+
### Tool Name Notation
|
76
78
|
|
77
|
-
Thanks to some straight-forward meta-programming, a Ruby-based
|
78
|
-
be written in a more concise notation by using the name of the
|
79
|
-
method. This can be followed by a settings block, as with the above examples,
|
80
|
-
or passed a
|
79
|
+
Thanks to some straight-forward meta-programming, a Ruby-based toolchain can
|
80
|
+
also be written in a more concise notation by using the name of the tool's class
|
81
|
+
as a method. This can be followed by a settings block, as with the above examples,
|
82
|
+
or passed a *settings hash*. In which case an toolchain script can look like:
|
81
83
|
|
82
84
|
```ruby
|
83
85
|
Announce :mailto => "ruby-talk@ruby-lang.org",
|
@@ -88,8 +90,7 @@ or passed a <i>settings hash</i>. In which case an assembly file can look like t
|
|
88
90
|
:priority => -1
|
89
91
|
:active => true
|
90
92
|
|
91
|
-
Gem :
|
92
|
-
:spec => false,
|
93
|
+
Gem :spec => false,
|
93
94
|
:active => true
|
94
95
|
|
95
96
|
DNote :priority => -1,
|
@@ -99,53 +100,50 @@ or passed a <i>settings hash</i>. In which case an assembly file can look like t
|
|
99
100
|
:active => true
|
100
101
|
|
101
102
|
RDoc :include => [ 'lib', '[A-Z]*' ],
|
102
|
-
:exclude => [ '
|
103
|
+
:exclude => [ 'Gemfile' ]
|
103
104
|
|
104
105
|
Testrb :active => true
|
105
106
|
|
106
107
|
Rubyforge :sitemap => {
|
107
108
|
:site => name
|
108
|
-
}
|
109
|
+
},
|
109
110
|
:active => false
|
110
111
|
```
|
111
112
|
|
112
|
-
This format is convenient in that it
|
113
|
-
|
113
|
+
This format is convenient in that it reduces the amount of extraneous syntax
|
114
|
+
needed to define tool instances. With Ruby 1.9+ it can be even more conisce
|
114
115
|
using the new Hash syntax.
|
115
116
|
|
116
117
|
```ruby
|
117
118
|
Announce :myself,
|
118
|
-
mailto:
|
119
|
-
priority: -1
|
120
|
-
active:
|
119
|
+
mailto: "transfire@gmail.com",
|
120
|
+
priority: -1,
|
121
|
+
active: true
|
121
122
|
```
|
122
123
|
|
123
|
-
But you might want to hold off on that a couple of years until Ruby 1.8 is pretty
|
124
|
-
much shot and buried ;)
|
125
124
|
|
126
|
-
## YAML-based
|
125
|
+
## YAML-based Toolchain Scripts
|
127
126
|
|
128
127
|
We have saved the most concise notation for last. The YAML format is
|
129
|
-
essentially the same as the traditional Ruby format except that
|
130
|
-
|
131
|
-
|
132
|
-
(
|
133
|
-
|
128
|
+
essentially the same as the traditional Ruby format except that the
|
129
|
+
main key provides the tool instance name and the type is a setting
|
130
|
+
which defaults to the name. Also, notice the start document indicator
|
131
|
+
(`---`). This indicator MUST BE USED for the file to be recognized
|
132
|
+
as YAML, rather than Ruby.
|
134
133
|
|
135
134
|
```yaml
|
136
135
|
---
|
137
136
|
|
138
137
|
announce:
|
139
|
-
mailto:
|
138
|
+
mailto: transfire@gmail.com
|
140
139
|
active: true
|
141
140
|
|
142
141
|
myself:
|
143
|
-
|
144
|
-
mailto:
|
145
|
-
active:
|
142
|
+
tool: Announce
|
143
|
+
mailto: transfire@gmail.com
|
144
|
+
active: true
|
146
145
|
|
147
146
|
gem:
|
148
|
-
types: ['gem']
|
149
147
|
autospec: false
|
150
148
|
active: true
|
151
149
|
|
@@ -154,8 +152,8 @@ recognized as YAML, rather than Ruby.
|
|
154
152
|
active: true
|
155
153
|
|
156
154
|
rdoc:
|
157
|
-
include: [ lib,
|
158
|
-
exclude: [
|
155
|
+
include: [ "lib", "[A-Z]*" ]
|
156
|
+
exclude: [ "Gemfile" ]
|
159
157
|
|
160
158
|
ri:
|
161
159
|
exclude: []
|
@@ -169,12 +167,16 @@ recognized as YAML, rather than Ruby.
|
|
169
167
|
active: true
|
170
168
|
|
171
169
|
rubyforge:
|
172
|
-
|
170
|
+
type: forge
|
173
171
|
sitemap:
|
174
172
|
site: <% name %>
|
175
173
|
active: false
|
174
|
+
```
|
175
|
+
|
176
|
+
Notice we used the the alternate setting `tool` instead of `class` for the
|
177
|
+
`myself` announce tool instance. The effect is exactly the same.
|
176
178
|
|
177
|
-
|
179
|
+
Also notice the last entry, the YAML format supports ERB and provides
|
178
180
|
access to project metadata via the ERB's binding.
|
179
181
|
|
180
182
|
With the Ruby format it is easy enough to load external library using
|
data/{HISTORY.rdoc → HISTORY.md}
RENAMED
@@ -1,6 +1,33 @@
|
|
1
|
-
|
1
|
+
# RELEASE HISTORY
|
2
2
|
|
3
|
-
|
3
|
+
## 0.4.0 / 2014-01-14
|
4
|
+
|
5
|
+
The big change of this release is the swapping of terminology of
|
6
|
+
`assembly` and `toolchain`. What was once called an "Assembly" is
|
7
|
+
now called a "Toolchain" and vice-versa. This, when thought through,
|
8
|
+
makes much more sense. But it has a big effect on every project that
|
9
|
+
uses Detroit in that a project's `Assembly` file must be renamed
|
10
|
+
to `Toolchain`.
|
11
|
+
|
12
|
+
This release also modifies the interface change of the previous release
|
13
|
+
slightly, such that the `assemble` methods do not have to be manually
|
14
|
+
defined, although it is still recommended. By default the base class
|
15
|
+
definition will look to see if a method of the same name as a station
|
16
|
+
is defined in the tool class. Note this differs from using `respond_to?`
|
17
|
+
which will return `true` if the method was defined in any part of the
|
18
|
+
class hierarchy. Instead the method must be defined directly in the class.
|
19
|
+
This helps ensure there are no accidental name clashes between support
|
20
|
+
code and assembly stations (which was the purpose of the original
|
21
|
+
`station_` that was deprecated in the last release).
|
22
|
+
|
23
|
+
Changes:
|
24
|
+
|
25
|
+
* Rename `assembly` to `toolchain` and vice-versa.
|
26
|
+
* No longer *requires* custom `assemble` methods for each tool.
|
27
|
+
* Improved code organization and plenty of bug fixes.
|
28
|
+
|
29
|
+
|
30
|
+
## 0.3.0 / 2012-04-02
|
4
31
|
|
5
32
|
This significant release changes the interface for tools to tap
|
6
33
|
into the assembly line. Where as before specially named methods
|
@@ -13,10 +40,10 @@ Changes:
|
|
13
40
|
|
14
41
|
* Simplify the assembly interface for tools.
|
15
42
|
* Tool classes ending in Base are abstract base class.
|
16
|
-
* Add #on as alias
|
43
|
+
* Add #on as alias for #track.
|
17
44
|
|
18
45
|
|
19
|
-
|
46
|
+
## 0.2.0 / 2011-10-19
|
20
47
|
|
21
48
|
The big news here is that Detroit configuration files are now
|
22
49
|
called _assembly_ files, and no longer _schedule_ files. The
|
@@ -36,7 +63,7 @@ Changes:
|
|
36
63
|
* Fix --config output.
|
37
64
|
|
38
65
|
|
39
|
-
|
66
|
+
## 0.1.0 / 2011-06-29
|
40
67
|
|
41
68
|
Detroit is a lifecycle build system for Ruby. Detroit was originally
|
42
69
|
called Syckle, and was developed and used in house for Rubyworks projects
|
File without changes
|
data/README.md
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
# Detroit
|
2
|
+
|
3
|
+
[Website](http://rubyworks.github.io/detroit) /
|
4
|
+
[Report Issue](http://github.com/rubyworks/detroit/issues) /
|
5
|
+
[Development](http://github.com/rubyworks/detroit)
|
6
|
+
|
7
|
+
[](http://travis-ci.org/rubyworks/detroit)
|
8
|
+
[](http://badge.fury.io/rb/detroit)
|
9
|
+
[](http://flattr.com/thing/324911/Rubyworks-Ruby-Development-Fund)
|
10
|
+
|
11
|
+
|
12
|
+
## About
|
13
|
+
|
14
|
+
Detroit is a software production management aid, aka a *build tool*.
|
15
|
+
Detroit utilizes a life-cycle methodology to help developers
|
16
|
+
prepare and release software in a clear, repeatable, and linear fashion.
|
17
|
+
While written in, and therefore well-suited to Ruby development, Detroit
|
18
|
+
can be used for any language and production requirements.
|
19
|
+
|
20
|
+
|
21
|
+
## How It Works
|
22
|
+
|
23
|
+
Detroit defines development processions call *assemblies* which consist of
|
24
|
+
a set of production *lines* each with a series of named *stations*, or *stops*.
|
25
|
+
Developers attach work elements to stations by creating configuring tool
|
26
|
+
instances in a project's Toolchain file. Toolchain files are written
|
27
|
+
in either YAML or a Ruby DSL.
|
28
|
+
|
29
|
+
For example, a RubyForge tool can be configured:
|
30
|
+
|
31
|
+
rubyforge:
|
32
|
+
tool: Rubyforge
|
33
|
+
sitemap:
|
34
|
+
site: <%= name %>
|
35
|
+
active: true
|
36
|
+
|
37
|
+
As this example demonstrates, tool configurations can draw on project
|
38
|
+
metadata via ERB embedded tags. Detroit gathers this information using
|
39
|
+
[.index](http://dotruby.github.com/indexer) file, but the data source
|
40
|
+
can be customized to meet the needs of different projects. (For instance,
|
41
|
+
for Ruby projects, if no .index file is found, Detroit will attempt get the
|
42
|
+
information from a .gemspec file.)
|
43
|
+
|
44
|
+
With tool configuration and metadata in place, using Detroit is simply
|
45
|
+
a matter of passing a stop to the `detroit` command.
|
46
|
+
|
47
|
+
$ detroit document
|
48
|
+
|
49
|
+
The use of lines may seem constrictive to users of tools like Rake, but
|
50
|
+
there is a benefit to this approach. It helps ensure a project is
|
51
|
+
always up-to-date and in-sync --that no necessary steps are missed.
|
52
|
+
Detroit standard asembly has two lines. The most significant of which is
|
53
|
+
main line which entails a route with ordred stops:
|
54
|
+
|
55
|
+
prepare # prepare services and ensure requirements
|
56
|
+
generate # code generation
|
57
|
+
compile # compile source code
|
58
|
+
test # run tests and/or specifications
|
59
|
+
analyze # run code analysis
|
60
|
+
document # generate documentation
|
61
|
+
package # create packages
|
62
|
+
verify # post package verification (eg. integration tests)
|
63
|
+
install # install package locally
|
64
|
+
publish # publish website/documentation
|
65
|
+
release # release packages
|
66
|
+
deploy # deply system to servers
|
67
|
+
promote # tell the world about you awesome work
|
68
|
+
|
69
|
+
The second line is maintainence line which consits of three stops:
|
70
|
+
|
71
|
+
reset # mark build files as out-of-date
|
72
|
+
clean # remove minor build files
|
73
|
+
purge # remove all build files
|
74
|
+
|
75
|
+
Where reset marks generated files out-of-date, clean removes temporary
|
76
|
+
products and purge removes all generated prodcuts.
|
77
|
+
|
78
|
+
To refine control over the build process, tool instances can be grouped into
|
79
|
+
different *tracks*. For example, a Github gh-pages tool might be configured
|
80
|
+
to be on a `site` track, so publishing a project's website only occurs if
|
81
|
+
the `site` track is specified along with `publish` stop.
|
82
|
+
|
83
|
+
$ detroit site:publish
|
84
|
+
|
85
|
+
Please see http://rubyworks.github.com/detroit for more details on how to
|
86
|
+
use Detroit, including the creation of tracks, stops and tool plugins.
|
87
|
+
Also try the `--help` option to see the detroit command's help
|
88
|
+
information.
|
89
|
+
|
90
|
+
|
91
|
+
## Install
|
92
|
+
|
93
|
+
Detroit can, of course, be installed via RubyGems:
|
94
|
+
|
95
|
+
$ gem install detroit
|
96
|
+
|
97
|
+
Once installed, developers need to also install the specific plugins
|
98
|
+
for the tools to be used. For example,
|
99
|
+
|
100
|
+
$ gem install detroit-github
|
101
|
+
$ gem install detroit-minitest
|
102
|
+
$ gem install detroit-yard
|
103
|
+
|
104
|
+
If using Bundler, just add these to the project's Gemfile instead.
|
105
|
+
|
106
|
+
|
107
|
+
## Issues
|
108
|
+
|
109
|
+
All in all, Detroit works well. There are some rough edges with regards
|
110
|
+
to the plugins, so from time to time you might run into an odd error.
|
111
|
+
Ususally it just means a tool confirguraiton needs adjustment.
|
112
|
+
|
113
|
+
Please note, Windows support has not been considered at all. While we see
|
114
|
+
no specific reason it should not work, there may well be issues we have not
|
115
|
+
considered since we do not use Windows. If you are Windows user and give
|
116
|
+
Detroit a try please let us know of any issues you encounter.
|
117
|
+
|
118
|
+
|
119
|
+
## History
|
120
|
+
|
121
|
+
Detroit is actaully a fork of Reap v10, and was called Syckle for a number
|
122
|
+
of years as it matured. It represents many years of design considerations
|
123
|
+
(and reconsiderations) that evolved Reap from its simple Rake extension
|
124
|
+
origins (which pre-date Hoe) to the life-cycle system it is today.
|
125
|
+
|
126
|
+
|
127
|
+
## Legal
|
128
|
+
|
129
|
+
Copyright (c) 2007 Rubyworks (GPL-3.0 License)
|
130
|
+
|
131
|
+
This program is free software: you can redistribute it and/or modify
|
132
|
+
it under the terms of the GNU General Public License as published by
|
133
|
+
the Free Software Foundation, either version 3 of the License, or
|
134
|
+
(at your option) any later version.
|
135
|
+
|
136
|
+
This program is distributed in the hope that it will be useful,
|
137
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
138
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
139
|
+
GNU General Public License for more details.
|
140
|
+
|
141
|
+
See LICENSE.txt for details.
|
142
|
+
|