nandoc 0.0.2 → 0.0.3
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/lib/nandoc/commands/create-nandoc-site.rb +105 -25
- data/lib/nandoc/commands/diff.rb +3 -1
- data/lib/nandoc/config.rb +23 -0
- data/lib/nandoc/erb/agent.rb +95 -0
- data/lib/nandoc/support/treebis-extlib.rb +83 -0
- data/lib/nandoc/support-modules.rb +4 -1
- data/lib/nandoc/tasks/nandoc/deploy.rake +1 -1
- data/proto/README.md +4 -2
- data/proto/default/config.yaml +6 -3
- data/proto/default/treebis-task.rb +1 -0
- data/proto/rubyforge-redirect/Rakefile +2 -0
- data/proto/rubyforge-redirect/config.yaml +4 -0
- data/proto/rubyforge-redirect/output/index.html +5 -0
- data/proto/rubyforge-redirect/treebis-task.rb +10 -0
- metadata +8 -2
@@ -13,11 +13,14 @@ module NanDoc
|
|
13
13
|
|
14
14
|
def aliases; [ 'cnds', 'cns', 'cs' ] end # override create_site short!
|
15
15
|
|
16
|
-
def short_desc
|
16
|
+
def short_desc
|
17
|
+
"#{NanDoc::Config.option_prefix}create a nandoc site"
|
18
|
+
end
|
17
19
|
|
18
20
|
def long_desc
|
21
|
+
prefix = NanDoc::Config.option_prefix
|
19
22
|
<<-D.gsub(/\n +/,' ')
|
20
|
-
|
23
|
+
#{prefix}Create a new site at the given path. This builds on the
|
21
24
|
create_site nanoc3 command. Please see that for more
|
22
25
|
information. Run this next to your README.md file.
|
23
26
|
D
|
@@ -26,19 +29,26 @@ module NanDoc
|
|
26
29
|
def usage; "nandoc create_nandoc_site [-m] <path>" end
|
27
30
|
|
28
31
|
def option_definitions
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
+
@opt_defs ||= begin
|
33
|
+
prefix = NanDoc::Config.option_prefix
|
34
|
+
[
|
35
|
+
{ :long => 'patch-hack', :short => 'p', :argument => :none,
|
36
|
+
:desc => "#{prefix} use files not patches when necessary" },
|
32
37
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
{ :long => 'merge-hack', :short => 'm', :argument => :none,
|
39
|
+
:desc =>
|
40
|
+
"#{prefix}when site already exists do something clever"
|
41
|
+
},
|
42
|
+
{ :long => 'merge-hack-reverse', :short => 'M', :argument => :none,
|
43
|
+
:desc =>
|
44
|
+
"#{prefix}show the reverse diff of above."
|
45
|
+
},
|
46
|
+
{ :long => 'prototype', :short=>'t', :argument => :required,
|
47
|
+
:default => 'default',
|
48
|
+
:desc => "#{prefix}the name of the site prototype to use"
|
49
|
+
}
|
50
|
+
]
|
51
|
+
end
|
42
52
|
end
|
43
53
|
|
44
54
|
#
|
@@ -47,8 +57,13 @@ module NanDoc
|
|
47
57
|
# stderr hack off.
|
48
58
|
#
|
49
59
|
def run(opts, args, method_opts={:_merge=>true})
|
60
|
+
args = store_extra_args(args)
|
50
61
|
opts = normalize_opts opts
|
51
62
|
run_opts_process opts
|
63
|
+
|
64
|
+
return prototype_run_without_nanoc(args) unless
|
65
|
+
@treebis_task.lay_over_nanoc_site?
|
66
|
+
|
52
67
|
#
|
53
68
|
# awful: see if nanoc triggers the error message about site
|
54
69
|
# already existing, then take action
|
@@ -76,6 +91,10 @@ module NanDoc
|
|
76
91
|
end
|
77
92
|
|
78
93
|
def run_opts_process opts
|
94
|
+
|
95
|
+
# not sure where to put this
|
96
|
+
initiate_the_supreme_hack_of_the_standard_error_stream
|
97
|
+
|
79
98
|
task_abort("you can't have both -M and -m") if
|
80
99
|
opts[:merge_hack] && opts[:merge_hack_reverse]
|
81
100
|
if opts[:datasource]
|
@@ -86,16 +105,26 @@ module NanDoc
|
|
86
105
|
end
|
87
106
|
opts[:datasource] = 'nandoc'
|
88
107
|
@patch_hack = opts[:patch_hack]
|
108
|
+
prototype_determine opts
|
89
109
|
nil
|
90
110
|
end
|
91
111
|
private :run_opts_process
|
92
112
|
|
93
113
|
protected
|
94
114
|
|
115
|
+
def err *a
|
116
|
+
$stderr.puts(*a)
|
117
|
+
end
|
118
|
+
|
119
|
+
def my_exit
|
120
|
+
exit(1);
|
121
|
+
end
|
122
|
+
|
95
123
|
#
|
96
124
|
# see SupremeStderrHack
|
97
125
|
#
|
98
126
|
def initiate_the_supreme_hack_of_the_standard_error_stream
|
127
|
+
return if @extremely_hacked
|
99
128
|
base = Nanoc3::CLI::Base
|
100
129
|
return if base.instance_methods.include?("print_error_orig")
|
101
130
|
base.send(:alias_method, :print_error_orig, :print_error)
|
@@ -103,8 +132,54 @@ module NanDoc
|
|
103
132
|
$stderr = SupremeStderrHack.new($stderr)
|
104
133
|
print_error_orig error
|
105
134
|
end
|
135
|
+
@extremely_hacked = true
|
106
136
|
end
|
107
137
|
|
138
|
+
def prototype_determine opts
|
139
|
+
proto_name = opts[:prototype] || 'default'
|
140
|
+
require 'nandoc/support/treebis-extlib' # experimental
|
141
|
+
proto_path = "#{NanDoc::Root}/proto/#{proto_name}"
|
142
|
+
@treebis_task = Treebis.dir_task(proto_path)
|
143
|
+
end
|
144
|
+
|
145
|
+
def prototype_run
|
146
|
+
task = @treebis_task
|
147
|
+
names = task.erb_variable_names
|
148
|
+
if names.any?
|
149
|
+
require 'nandoc/erb/agent'
|
150
|
+
Erb::Agent.process_erb_values_from_the_commandline(
|
151
|
+
self, task, names, @extra_args
|
152
|
+
)
|
153
|
+
end
|
154
|
+
task.file_utils = Config.file_utils
|
155
|
+
task.on(FileUtils.pwd).run(:patch_hack => @patch_hack)
|
156
|
+
end
|
157
|
+
|
158
|
+
def prototype_run_without_nanoc args
|
159
|
+
if args.empty?
|
160
|
+
err "missing <path> argument."
|
161
|
+
err usage
|
162
|
+
my_exit
|
163
|
+
end
|
164
|
+
if args.size > 1
|
165
|
+
err "Too many arguments"
|
166
|
+
err usage
|
167
|
+
my_exit
|
168
|
+
end
|
169
|
+
path = args.first
|
170
|
+
if File.exist?(path) && Dir[path+'/*'].any?
|
171
|
+
err "folder already exists (no merge yet): #{path}"
|
172
|
+
err usage
|
173
|
+
my_exit
|
174
|
+
end
|
175
|
+
if ! File.exist?(path)
|
176
|
+
fu = Config.file_utils
|
177
|
+
fu.mkdir_p(path)
|
178
|
+
end
|
179
|
+
FileUtils.cd(path) do
|
180
|
+
prototype_run
|
181
|
+
end
|
182
|
+
end
|
108
183
|
|
109
184
|
def site_already_exists opts, args
|
110
185
|
path = args.first
|
@@ -121,7 +196,14 @@ module NanDoc
|
|
121
196
|
end
|
122
197
|
end
|
123
198
|
|
124
|
-
|
199
|
+
def store_extra_args args
|
200
|
+
@extra_args = nil
|
201
|
+
if args.length > 1 && args[1] =~ /^-/
|
202
|
+
@extra_args = args[1..-1]
|
203
|
+
args = args[0..0]
|
204
|
+
end
|
205
|
+
args
|
206
|
+
end
|
125
207
|
|
126
208
|
#
|
127
209
|
# This is the crux of the whole thing: make the site as the parent
|
@@ -130,12 +212,9 @@ module NanDoc
|
|
130
212
|
def site_populate
|
131
213
|
initiate_the_supreme_hack_of_the_standard_error_stream
|
132
214
|
super
|
133
|
-
|
134
|
-
task.file_utils = Config.file_utils
|
135
|
-
task.on(FileUtils.pwd).run(:patch_hack => @patch_hack)
|
215
|
+
prototype_run
|
136
216
|
end
|
137
217
|
|
138
|
-
|
139
218
|
#
|
140
219
|
# Somehow legitimize these awful hacks with an entire class
|
141
220
|
#
|
@@ -194,13 +273,14 @@ module NanDoc
|
|
194
273
|
when :looking_for_error_header
|
195
274
|
if a.first && a.first.include?('/!\ ERROR /!\\')
|
196
275
|
@state = :waiting_for_end_of_error_box
|
276
|
+
me = NanDoc::Config.option_prefix
|
197
277
|
@ui.puts <<-HERE.gsub(/^ +/,'')
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
278
|
+
+--- /!\\ ERROR /!\\ ----------------------------------------------+
|
279
|
+
| An exception occured while running #{me}. If you think |
|
280
|
+
| this is a bug in nanDoc (likely), please report it at |
|
281
|
+
| <http://github.com/hipe/nandoc/issues> -- thanks! |
|
282
|
+
| (it is very likely a treebis patch failure) |
|
283
|
+
+----------------------------------------------------------------+
|
204
284
|
HERE
|
205
285
|
else
|
206
286
|
@ui.puts(*a) # probably just whitespace?
|
data/lib/nandoc/commands/diff.rb
CHANGED
@@ -12,7 +12,9 @@ module NanDoc::Commands
|
|
12
12
|
|
13
13
|
def aliases; [ 'd' ] end
|
14
14
|
|
15
|
-
def short_desc
|
15
|
+
def short_desc
|
16
|
+
"#{NanDoc::Config.option_prefix}maybe push and pull some stuff"
|
17
|
+
end
|
16
18
|
|
17
19
|
def long_desc
|
18
20
|
<<-LONG_DESC.gsub(/\n +/,' ')
|
data/lib/nandoc/config.rb
CHANGED
@@ -49,6 +49,29 @@ module NanDoc
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# Give some visual distinction of what options for a given command
|
55
|
+
# are a nanDoc hack
|
56
|
+
#
|
57
|
+
def option_prefix_colorized
|
58
|
+
"(\e[35mnanDoc\e[0m) "
|
59
|
+
end
|
60
|
+
|
61
|
+
def option_prefix_no_color
|
62
|
+
'(nanDoc hack) '
|
63
|
+
end
|
64
|
+
|
65
|
+
def option_prefix
|
66
|
+
colorize? ?
|
67
|
+
option_prefix_colorized :
|
68
|
+
option_prefix_no_color
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
72
|
+
# other parts of the app include this module to get convenience methods
|
73
|
+
# to some of the config nodes.
|
74
|
+
#
|
52
75
|
module Accessors
|
53
76
|
def file_utils
|
54
77
|
NanDoc::Config.file_utils
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module NanDoc::Erb
|
2
|
+
class Agent
|
3
|
+
|
4
|
+
#
|
5
|
+
# whatever weird random and fanciful things we want to do with an ERB tree
|
6
|
+
#
|
7
|
+
|
8
|
+
class << self
|
9
|
+
include NanDoc::OptsNormalizer # unnormalize_opt_keys
|
10
|
+
|
11
|
+
# put parameter values from the command line into the erb files
|
12
|
+
# in the task
|
13
|
+
#
|
14
|
+
# @param [?]
|
15
|
+
# @param [Treebis::Task] task - takes erb values
|
16
|
+
# @param [Array] names - the list of names it takes
|
17
|
+
# @param [Array] argv - ARGV or the like
|
18
|
+
#
|
19
|
+
def process_erb_values_from_the_commandline cmd, task, names, argv
|
20
|
+
@cmd, @task, @names, @argv = cmd, task, names, argv
|
21
|
+
@args = nil
|
22
|
+
args_none unless argv
|
23
|
+
args_parse
|
24
|
+
erb_values = args_validate
|
25
|
+
task.erb_values(erb_values)
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
private
|
29
|
+
|
30
|
+
def args_none
|
31
|
+
err "Please provide args for the erb templates."
|
32
|
+
show_usage
|
33
|
+
my_exit
|
34
|
+
end
|
35
|
+
|
36
|
+
def args_parse
|
37
|
+
hash = {}
|
38
|
+
@argv.each do |str|
|
39
|
+
unless /\A--([-_a-z0-9]*)=(.+)\Z/ =~ str
|
40
|
+
err "couldn't parse #{str.inspect} -- expecting \"--foo='bar'\""
|
41
|
+
show_usage
|
42
|
+
my_exit
|
43
|
+
end
|
44
|
+
hash[normalize_opt_key($1)] = $2
|
45
|
+
end
|
46
|
+
@args = hash
|
47
|
+
end
|
48
|
+
|
49
|
+
def args_validate
|
50
|
+
args = @args.dup
|
51
|
+
have = {}
|
52
|
+
need = Hash[ @names.map{ |n| [normalize_opt_key(n), true] } ]
|
53
|
+
suck = []
|
54
|
+
args.each do |k, v|
|
55
|
+
if need[k]
|
56
|
+
have[k.to_s] = v
|
57
|
+
need.delete(k)
|
58
|
+
else
|
59
|
+
suck.push unnormalize_opt_key(k)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
miss = need.keys.map{ |k| unnormalize_opt_key(k) }
|
63
|
+
err "unrecognized erb parameter(s): #{suck.join(' ')}" if suck.any?
|
64
|
+
err "missing erb parameter(s): #{miss.join(' ')}" if miss.any?
|
65
|
+
if miss.any? or suck.any?
|
66
|
+
show_usage;
|
67
|
+
my_exit
|
68
|
+
end
|
69
|
+
have
|
70
|
+
end
|
71
|
+
|
72
|
+
def err *a
|
73
|
+
$stderr.puts(*a)
|
74
|
+
end
|
75
|
+
|
76
|
+
def my_exit
|
77
|
+
exit(1)
|
78
|
+
end
|
79
|
+
|
80
|
+
def show_usage
|
81
|
+
err "usage: nandoc #{@cmd.name} <mysite> -- #{these_things}"
|
82
|
+
end
|
83
|
+
|
84
|
+
def these_things
|
85
|
+
names = unnormalize_opt_keys(@names)
|
86
|
+
vals = ['foo', 'bar', 'bizz bazz']
|
87
|
+
vals2 = Array.new(names.size).map{ |x| vals[ rand(vals.size) ] }
|
88
|
+
vals3 = names.zip(vals2)
|
89
|
+
vals4 = vals3.map{|(name,val)| "#{name}=\"#{val}\"" }
|
90
|
+
str = vals4.join(' ')
|
91
|
+
str
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module Treebis
|
2
|
+
#
|
3
|
+
# experimental additions to treebis
|
4
|
+
#
|
5
|
+
|
6
|
+
class BlockProbe
|
7
|
+
# if needed, etc
|
8
|
+
def initialize(&block)
|
9
|
+
@sexp = []
|
10
|
+
instance_eval(&block)
|
11
|
+
end
|
12
|
+
attr_reader :sexp
|
13
|
+
def method_missing name, *args
|
14
|
+
record = [name, *args]
|
15
|
+
@sexp.push record
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module PathUtils
|
21
|
+
def undot path
|
22
|
+
$1 if /^(?:\.\/)?(.+)$/ =~ path
|
23
|
+
end
|
24
|
+
def path_from_full path
|
25
|
+
File.join(@from, undot(path))
|
26
|
+
end
|
27
|
+
def path_from_full_assert path
|
28
|
+
fullpath = path_from_full(path)
|
29
|
+
unless File.exist?(fullpath)
|
30
|
+
name = respond_to?(:name) ? " #{self.name.inspect}" : ''
|
31
|
+
fail <<-HERE.gsub(/^ +/, '')
|
32
|
+
Treebis task#{name} referred to file #{path}
|
33
|
+
that did not exist at #{fullpath}
|
34
|
+
HERE
|
35
|
+
end
|
36
|
+
fullpath
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Task
|
41
|
+
include PathUtils
|
42
|
+
alias_method :initialize_orig, :initialize
|
43
|
+
def initialize(*a,&b)
|
44
|
+
initialize_orig(*a,&b)
|
45
|
+
sexp = reflection_sexp
|
46
|
+
props = sexp.select{|x| x.first == :prop }
|
47
|
+
set_props(props) if props.any?
|
48
|
+
end
|
49
|
+
def erb_variable_names
|
50
|
+
sexp = reflection_sexp
|
51
|
+
filenames = sexp.select{ |x| x.first == :erb }
|
52
|
+
names = []
|
53
|
+
filenames.each do |node|
|
54
|
+
path = path_from_full_assert(node[1])
|
55
|
+
names |= erb_variable_names_in_file(path)
|
56
|
+
end
|
57
|
+
names
|
58
|
+
end
|
59
|
+
def erb_variable_names_in_file path
|
60
|
+
content = File.read(path)
|
61
|
+
names = content.scan(/<%= *([_a-z0-9]+) *%>/).map{ |x| x[0] }
|
62
|
+
names = names.uniq
|
63
|
+
names
|
64
|
+
end
|
65
|
+
def prop *a
|
66
|
+
end
|
67
|
+
def reflection_sexp
|
68
|
+
BlockProbe.new(&@block).sexp
|
69
|
+
end
|
70
|
+
private
|
71
|
+
def set_props props
|
72
|
+
sing = class << self; self end
|
73
|
+
props.each do |prop|
|
74
|
+
val = prop[2]
|
75
|
+
sing.send(:define_method, prop[1]){ val }
|
76
|
+
end
|
77
|
+
nil
|
78
|
+
end
|
79
|
+
class RunContext
|
80
|
+
def prop(*a); end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -16,10 +16,13 @@ module NanDoc
|
|
16
16
|
def normalize_opts opts
|
17
17
|
opts = opts.dup
|
18
18
|
opts.keys.select{|x| x.to_s.index('-') }.each do |k|
|
19
|
-
opts[k
|
19
|
+
opts[normalize_opt_key(k)] = opts.delete(k)
|
20
20
|
end
|
21
21
|
opts
|
22
22
|
end
|
23
|
+
def normalize_opt_key k
|
24
|
+
k.to_s.gsub('-','_').to_sym
|
25
|
+
end
|
23
26
|
def unnormalize_opt_keys keys
|
24
27
|
keys.map{|x| unnormalize_opt_key(x)}
|
25
28
|
end
|
data/proto/README.md
CHANGED
@@ -5,7 +5,9 @@ This document presents three implementation alternatives of NanDoc site creation
|
|
5
5
|
|
6
6
|
### Prototypes
|
7
7
|
|
8
|
-
|
8
|
+
Almost each folder in this folder is a 'prototype' nanDoc installation. Most users will only ever use the `default` prototype and not worry about other prototypes.
|
9
|
+
|
10
|
+
The folder called 'misc' holds one-off templates for ad-hoc stuff, maybe for helpers etc.
|
9
11
|
|
10
12
|
The result of each such prototype is comparable to the filetree you get from a default nanoc 'create_site' command, but altered accordingly to be a NanDoc site, whatever that will come to mean.
|
11
13
|
|
@@ -14,7 +16,7 @@ The result of each such prototype is comparable to the filetree you get from a d
|
|
14
16
|
|
15
17
|
The prototype site(s) in this folder is probably expressed as a cangeset to an existing default filetree created by `nanoc create_site <my-site>`. Given that the default NanDoc site is rougly 90% the same as a default Nanoc3 site ATTOTW, the author felt that it would be best to represent the default NanDoc site as a diff of the default Nanoc site.[^1]
|
16
18
|
|
17
|
-
[^1]: At such time as this percentage drops significantly we will reconsider this decision.
|
19
|
+
[^1]: At such time as this percentage drops significantly we will reconsider this decision. -- @todo this is no longer the case.
|
18
20
|
|
19
21
|
Thus the changesets here are the minimal readable expression of changes we want to make to a default nanoc site tree, to alter it to be a default NanDoc
|
20
22
|
site tree. These changesets are expressed using a Treebis 'patch' which is some files along with a Treebis task. (See documentation there for gory details.)
|
data/proto/default/config.yaml
CHANGED
@@ -21,12 +21,15 @@ enable_output_diff: false
|
|
21
21
|
|
22
22
|
|
23
23
|
# nanDoc: here is an example deployment config node.
|
24
|
-
# uncomment this, get it right, and try
|
25
|
-
#
|
24
|
+
# uncomment this, get it right, and try
|
25
|
+
# `rake config={default|rubyforge} deploy:rsync` from your mysite
|
26
|
+
# directory (or rake `nandoc:deploy:rsync` whatever that does.)
|
27
|
+
#
|
26
28
|
# deploy:
|
27
29
|
# default:
|
28
30
|
# dst: "hipeland.org:/var/sites/nandoc.hipeland.org"
|
29
|
-
#
|
31
|
+
# rubyforge:
|
32
|
+
# dst: hipe@rubyforge.org:/var/www/gforge-projects/nandoc
|
30
33
|
|
31
34
|
# The data sources where nanoc loads its data from. This is an array of
|
32
35
|
# hashes; each array element represents a single data source. By default,
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# This is a treebis patch file for this folder and its contents.
|
2
|
+
# See the README sibling to the folder containing this file.
|
3
|
+
|
4
|
+
Treebis.tasks.task(:"rubyforge-redirect") do
|
5
|
+
prop :lay_over_nanoc_site?, false
|
6
|
+
copy './Rakefile'
|
7
|
+
erb './config.yaml'
|
8
|
+
mkdir_p './output/'
|
9
|
+
erb './output/index.html'
|
10
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 3
|
9
|
+
version: 0.0.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Chip Malice
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- lib/nandoc/cri-hacks.rb
|
87
87
|
- lib/nandoc/data-source.rb
|
88
88
|
- lib/nandoc/deployers/rsync.rb
|
89
|
+
- lib/nandoc/erb/agent.rb
|
89
90
|
- lib/nandoc/filters.rb
|
90
91
|
- lib/nandoc/helpers.rb
|
91
92
|
- lib/nandoc/helpers/menu-bouncy.rb
|
@@ -111,6 +112,7 @@ files:
|
|
111
112
|
- lib/nandoc/support/site-merge.rb
|
112
113
|
- lib/nandoc/support/site-methods.rb
|
113
114
|
- lib/nandoc/support/stream-colorizer.rb
|
115
|
+
- lib/nandoc/support/treebis-extlib.rb
|
114
116
|
- lib/nandoc/tasks.rb
|
115
117
|
- lib/nandoc/tasks/nandoc/deploy.rake
|
116
118
|
- lib/nandoc/test/diff-to-string.rb
|
@@ -133,6 +135,10 @@ files:
|
|
133
135
|
- proto/default/lib/default.rb
|
134
136
|
- proto/default/treebis-task.rb
|
135
137
|
- proto/misc/orphan-surrogate.md
|
138
|
+
- proto/rubyforge-redirect/Rakefile
|
139
|
+
- proto/rubyforge-redirect/config.yaml
|
140
|
+
- proto/rubyforge-redirect/output/index.html
|
141
|
+
- proto/rubyforge-redirect/treebis-task.rb
|
136
142
|
- test/test.rb
|
137
143
|
- README
|
138
144
|
has_rdoc: true
|