bitclust-core 0.6.0 → 0.7.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/ChangeLog +7 -0
- data/Gemfile +1 -0
- data/bitclust.gemspec +1 -0
- data/data/bitclust/template.offline/class +1 -1
- data/lib/bitclust/crossrubyutils.rb +2 -2
- data/lib/bitclust/methodentry.rb +1 -2
- data/lib/bitclust/progress_bar.rb +7 -0
- data/lib/bitclust/rdcompiler.rb +1 -1
- data/lib/bitclust/runner.rb +46 -32
- data/lib/bitclust/searcher.rb +14 -13
- data/lib/bitclust/silent_progress_bar.rb +17 -0
- data/lib/bitclust/subcommand.rb +27 -0
- data/lib/bitclust/subcommands/ancestors_command.rb +145 -0
- data/lib/bitclust/subcommands/chm_command.rb +268 -0
- data/lib/bitclust/subcommands/classes_command.rb +73 -0
- data/lib/bitclust/subcommands/extract_command.rb +55 -0
- data/lib/bitclust/subcommands/htmlfile_command.rb +105 -0
- data/lib/bitclust/subcommands/init_command.rb +29 -30
- data/lib/bitclust/subcommands/list_command.rb +39 -41
- data/lib/bitclust/subcommands/lookup_command.rb +71 -73
- data/lib/bitclust/subcommands/methods_command.rb +159 -0
- data/lib/bitclust/subcommands/preproc_command.rb +35 -0
- data/lib/bitclust/subcommands/property_command.rb +47 -48
- data/lib/bitclust/subcommands/query_command.rb +12 -18
- data/lib/bitclust/subcommands/server_command.rb +180 -182
- data/lib/bitclust/subcommands/setup_command.rb +85 -89
- data/lib/bitclust/subcommands/statichtml_command.rb +276 -0
- data/lib/bitclust/subcommands/update_command.rb +39 -41
- data/lib/bitclust/version.rb +1 -1
- data/test/test_bitclust.rb +1 -1
- data/test/test_rdcompiler.rb +1 -1
- data/test/test_runner.rb +7 -14
- metadata +120 -114
|
@@ -8,116 +8,112 @@ require 'yaml'
|
|
|
8
8
|
require 'bitclust'
|
|
9
9
|
require 'bitclust/subcommand'
|
|
10
10
|
|
|
11
|
-
module BitClust
|
|
12
|
-
|
|
11
|
+
module BitClust
|
|
12
|
+
module Subcommands
|
|
13
|
+
class SetupCommand < Subcommand
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
REPOSITORY_PATH = "http://jp.rubyist.net/svn/rurema/doctree/trunk"
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
def initialize
|
|
18
|
+
super
|
|
19
|
+
@prepare = nil
|
|
20
|
+
@cleanup = nil
|
|
21
|
+
@versions = ["1.8.7", "1.9.3", "2.0.0"]
|
|
22
|
+
@parser.banner = "Usage: #{File.basename($0, '.*')} setup [options]"
|
|
23
|
+
@parser.on('--prepare', 'Prepare config file and checkout repository. Do not create database.') {
|
|
23
24
|
@prepare = true
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
+
@parser.on('--cleanup', 'Cleanup datebase before create database.') {
|
|
26
27
|
@cleanup = true
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
+
@parser.on('--versions=V1,V2,...', "Specify versions. [#{@versions.join(',')}]") {|versions|
|
|
29
30
|
@versions = versions.split(",")
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
puts opt.help
|
|
33
|
-
exit 0
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
end
|
|
32
|
+
end
|
|
37
33
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
34
|
+
def exec(argv, options)
|
|
35
|
+
prepare
|
|
36
|
+
return if @prepare
|
|
37
|
+
@config[:versions].each do |version|
|
|
38
|
+
puts "Generating database for Ruby#{version}..."
|
|
39
|
+
prefix = "#{@config[:database_prefix]}-#{version}"
|
|
40
|
+
FileUtils.rm_rf(prefix) if @cleanup
|
|
41
|
+
init_argv = ["version=#{version}", "encoding=#{@config[:encoding]}"]
|
|
42
|
+
init_options = { :prefix => prefix }
|
|
43
|
+
InitCommand.new.exec(init_argv, init_options)
|
|
44
|
+
update_method_database(prefix, ["--stdlibtree=#{@config[:stdlibtree]}"])
|
|
45
|
+
update_argv = Pathname(@config[:capi_src]).children.select(&:file?).map{|v| v.realpath.to_s }
|
|
46
|
+
update_function_database(prefix, update_argv)
|
|
47
|
+
end
|
|
51
48
|
end
|
|
52
|
-
end
|
|
53
49
|
|
|
54
|
-
|
|
50
|
+
private
|
|
55
51
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
52
|
+
def prepare
|
|
53
|
+
home_directory = Pathname(ENV["HOME"])
|
|
54
|
+
config_dir = home_directory + ".bitclust"
|
|
55
|
+
config_dir.mkpath
|
|
56
|
+
config_path = config_dir + "config"
|
|
57
|
+
rubydoc_dir = config_dir + "rubydoc"
|
|
58
|
+
@config = {
|
|
59
|
+
:database_prefix => (config_dir + "db").to_s,
|
|
60
|
+
:encoding => "utf-8",
|
|
61
|
+
:versions => @versions,
|
|
62
|
+
:default_version => @versions.max,
|
|
63
|
+
:stdlibtree => (rubydoc_dir + "refm/api/src").to_s,
|
|
64
|
+
:capi_src => (rubydoc_dir + "refm/capi/src/").to_s,
|
|
65
|
+
:baseurl => "http://localhost:10080",
|
|
66
|
+
:port => "10080",
|
|
67
|
+
:pid_file => "/tmp/bitclust.pid",
|
|
68
|
+
}
|
|
69
|
+
if config_path.exist?
|
|
70
|
+
@config = YAML.load_file(config_path)
|
|
71
|
+
unless @config[:versions].sort == @versions.sort
|
|
72
|
+
print("overwrite config file? > [y/N]")
|
|
73
|
+
if /\Ay\z/i =~ $stdin.gets.chomp
|
|
74
|
+
@config[:versions] = @versions
|
|
75
|
+
@config[:default_version] = @versions.max
|
|
76
|
+
generate_config(config_path, @config)
|
|
77
|
+
end
|
|
81
78
|
end
|
|
79
|
+
else
|
|
80
|
+
generate_config(config_path, @config)
|
|
82
81
|
end
|
|
83
|
-
|
|
84
|
-
generate_config(config_path, @config)
|
|
82
|
+
checkout(rubydoc_dir)
|
|
85
83
|
end
|
|
86
|
-
checkout(rubydoc_dir)
|
|
87
|
-
end
|
|
88
84
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
85
|
+
def generate_config(path, config)
|
|
86
|
+
path.open("w+", 0644) do |file|
|
|
87
|
+
file.puts config.to_yaml
|
|
88
|
+
end
|
|
92
89
|
end
|
|
93
|
-
end
|
|
94
90
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
cmd = "svn help > /dev/null 2> /dev/null"
|
|
101
|
-
end
|
|
102
|
-
unless system(cmd)
|
|
103
|
-
warn "svn command is not found. Please install Subversion."
|
|
104
|
-
exit 1
|
|
91
|
+
def checkout(rubydoc_dir)
|
|
92
|
+
unless system("svn", "co", REPOSITORY_PATH, rubydoc_dir.to_s)
|
|
93
|
+
warn "svn command failed. Please install Subversion or check your PATH."
|
|
94
|
+
exit 1
|
|
95
|
+
end
|
|
105
96
|
end
|
|
106
|
-
system("svn", "co", REPOSITORY_PATH, rubydoc_dir.to_s)
|
|
107
|
-
end
|
|
108
97
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
98
|
+
def update_method_database(prefix, argv)
|
|
99
|
+
options = {
|
|
100
|
+
:prefix => prefix,
|
|
101
|
+
:capi => false,
|
|
102
|
+
}
|
|
103
|
+
cmd = UpdateCommand.new
|
|
104
|
+
cmd.parse(argv)
|
|
105
|
+
cmd.exec(argv, options)
|
|
106
|
+
end
|
|
115
107
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
108
|
+
def update_function_database(prefix, argv)
|
|
109
|
+
options = {
|
|
110
|
+
:prefix => prefix,
|
|
111
|
+
:capi => true,
|
|
112
|
+
}
|
|
113
|
+
cmd = UpdateCommand.new
|
|
114
|
+
cmd.parse(argv)
|
|
115
|
+
cmd.exec(argv, options)
|
|
116
|
+
end
|
|
121
117
|
end
|
|
122
118
|
end
|
|
123
119
|
end
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
# Copyright (c) 2006-2007 Minero Aoki
|
|
2
|
+
#
|
|
3
|
+
# This program is free software.
|
|
4
|
+
# You can distribute/modify this program under the Ruby License.
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
require 'fileutils'
|
|
8
|
+
|
|
9
|
+
require 'bitclust'
|
|
10
|
+
require 'bitclust/subcommand'
|
|
11
|
+
require 'bitclust/progress_bar'
|
|
12
|
+
require 'bitclust/silent_progress_bar'
|
|
13
|
+
|
|
14
|
+
module BitClust
|
|
15
|
+
module Subcommands
|
|
16
|
+
class StatichtmlCommand < Subcommand
|
|
17
|
+
class URLMapperEx < URLMapper
|
|
18
|
+
def library_url(name)
|
|
19
|
+
if name == '/'
|
|
20
|
+
$bitclust_html_base + "/library/index.html"
|
|
21
|
+
else
|
|
22
|
+
$bitclust_html_base + "/library/#{encodename_package(name)}.html"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def class_url(name)
|
|
27
|
+
$bitclust_html_base + "/class/#{encodename_package(name)}.html"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def method_url(spec)
|
|
31
|
+
cname, tmark, mname = *split_method_spec(spec)
|
|
32
|
+
$bitclust_html_base +
|
|
33
|
+
"/method/#{encodename_package(cname)}/#{typemark2char(tmark)}/#{encodename_package(mname)}.html"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def function_url(name)
|
|
37
|
+
$bitclust_html_base + "/function/#{name.empty? ? 'index' : name}.html"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def document_url(name)
|
|
41
|
+
$bitclust_html_base + "/doc/#{encodename_package(name)}.html"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def css_url
|
|
45
|
+
$bitclust_html_base + "/" + @css_url
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def favicon_url
|
|
49
|
+
$bitclust_html_base + "/" + @favicon_url
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def library_index_url
|
|
53
|
+
$bitclust_html_base + "/library/index.html"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def function_index_url
|
|
57
|
+
$bitclust_html_base + "/function/index.html"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def encodename_package(str)
|
|
61
|
+
if $fs_casesensitive
|
|
62
|
+
NameUtils.encodename_url(str)
|
|
63
|
+
else
|
|
64
|
+
NameUtils.encodename_fs(str)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def initialize
|
|
70
|
+
if Object.const_defined?(:Encoding)
|
|
71
|
+
Encoding.default_external = 'utf-8'
|
|
72
|
+
end
|
|
73
|
+
super
|
|
74
|
+
@verbose = true
|
|
75
|
+
@catalogdir = nil
|
|
76
|
+
@templatedir = srcdir_root + "data/bitclust/template.offline"
|
|
77
|
+
@themedir = srcdir_root + "theme/default"
|
|
78
|
+
@parser.banner = "Usage: #{File.basename($0, '.*')} statichtml [options]"
|
|
79
|
+
@parser.on('-o', '--outputdir=PATH', 'Output directory') do |path|
|
|
80
|
+
begin
|
|
81
|
+
@outputdir = Pathname.new(path).realpath
|
|
82
|
+
rescue Errno::ENOENT
|
|
83
|
+
FileUtils.mkdir_p(path, :verbose => @verbose)
|
|
84
|
+
retry
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
@parser.on('--catalog=PATH', 'Catalog directory') do |path|
|
|
88
|
+
@catalogdir = Pathname.new(path).realpath
|
|
89
|
+
end
|
|
90
|
+
@parser.on('--templatedir=PATH', 'Template directory') do |path|
|
|
91
|
+
@templatedir = Pathname.new(path).realpath
|
|
92
|
+
end
|
|
93
|
+
@parser.on('--themedir=PATH', 'Theme directory') do |path|
|
|
94
|
+
@themedir = Pathname.new(path).realpath
|
|
95
|
+
end
|
|
96
|
+
@parser.on('--fs-casesensitive', 'Filesystem is case-sensitive') do
|
|
97
|
+
$fs_casesensitive = true
|
|
98
|
+
end
|
|
99
|
+
@parser.on('--[no-]quiet', 'Be quiet') do |quiet|
|
|
100
|
+
@verbose = !quiet
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def exec(argv, options)
|
|
105
|
+
create_manager_config
|
|
106
|
+
|
|
107
|
+
prefix = options[:prefix]
|
|
108
|
+
db = MethodDatabase.new(prefix.to_s)
|
|
109
|
+
fdb = FunctionDatabase.new(prefix.to_s)
|
|
110
|
+
manager = ScreenManager.new(@manager_config)
|
|
111
|
+
|
|
112
|
+
db.transaction do
|
|
113
|
+
methods = {}
|
|
114
|
+
db.methods.each_with_index do |entry, i|
|
|
115
|
+
entry.names.each do |name|
|
|
116
|
+
method_name = entry.klass.name + entry.typemark + name
|
|
117
|
+
(methods[method_name] ||= []) << entry
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
entries = db.docs + db.libraries.sort + db.classes.sort
|
|
122
|
+
create_html_entries("entries", entries, manager, db)
|
|
123
|
+
create_html_methods("methods", methods, manager, db)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
fdb.transaction do
|
|
127
|
+
functions = {}
|
|
128
|
+
create_html_entries("capi", fdb.functions, manager, fdb)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
$bitclust_html_base = '..'
|
|
132
|
+
create_file(@outputdir + 'library/index.html',
|
|
133
|
+
manager.library_index_screen(db.libraries.sort, {:database => db}).body,
|
|
134
|
+
:verbose => @verbose)
|
|
135
|
+
create_file(@outputdir + 'class/index.html',
|
|
136
|
+
manager.class_index_screen(db.classes.sort, {:database => db}).body,
|
|
137
|
+
:verbose => @verbose)
|
|
138
|
+
create_file(@outputdir + 'function/index.html',
|
|
139
|
+
manager.function_index_screen(fdb.functions.sort, { :database => fdb }).body,
|
|
140
|
+
:verbose => @verbose)
|
|
141
|
+
create_index_html(@outputdir)
|
|
142
|
+
FileUtils.cp(@manager_config[:themedir] + @manager_config[:css_url],
|
|
143
|
+
@outputdir.to_s, {:verbose => @verbose, :preserve => true})
|
|
144
|
+
FileUtils.cp(@manager_config[:themedir] + @manager_config[:favicon_url],
|
|
145
|
+
@outputdir.to_s, {:verbose => @verbose, :preserve => true})
|
|
146
|
+
Dir.mktmpdir do |tmpdir|
|
|
147
|
+
FileUtils.cp_r(@manager_config[:themedir] + 'images', tmpdir,
|
|
148
|
+
{:verbose => @verbose, :preserve => true})
|
|
149
|
+
Dir.glob(File.join(tmpdir, 'images', '/**/.svn')).each do |d|
|
|
150
|
+
FileUtils.rm_r(d, {:verbose => @verbose})
|
|
151
|
+
end
|
|
152
|
+
FileUtils.cp_r(File.join(tmpdir, 'images'), @outputdir.to_s,
|
|
153
|
+
{:verbose => @verbose, :preserve => true})
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
private
|
|
158
|
+
|
|
159
|
+
def create_manager_config
|
|
160
|
+
@manager_config = {
|
|
161
|
+
:catalogdir => @catalogdir,
|
|
162
|
+
:suffix => '.html',
|
|
163
|
+
:templatedir => @templatedir,
|
|
164
|
+
:themedir => @themedir,
|
|
165
|
+
:css_url => 'style.css',
|
|
166
|
+
:favicon_url => 'rurema.png',
|
|
167
|
+
:cgi_url => '',
|
|
168
|
+
:tochm_mode => true
|
|
169
|
+
}
|
|
170
|
+
@manager_config[:urlmapper] = URLMapperEx.new(@manager_config)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def create_html_entries(title, entries, manager, db)
|
|
174
|
+
original_title = title.dup
|
|
175
|
+
if @verbose
|
|
176
|
+
progressbar = ProgressBar.new(title, entries.size)
|
|
177
|
+
else
|
|
178
|
+
progressbar = SilentProgressBar.new(title, entries.size)
|
|
179
|
+
end
|
|
180
|
+
entries.each do |entry|
|
|
181
|
+
create_html_file(entry, manager, @outputdir, db)
|
|
182
|
+
progressbar.title.replace([entry].flatten.first.name)
|
|
183
|
+
progressbar.inc
|
|
184
|
+
end
|
|
185
|
+
progressbar.title.replace(original_title)
|
|
186
|
+
progressbar.finish
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def create_html_methods(title, methods, manager, db)
|
|
190
|
+
original_title = title.dup
|
|
191
|
+
if @verbose
|
|
192
|
+
progressbar = ProgressBar.new(title, methods.size)
|
|
193
|
+
else
|
|
194
|
+
progressbar = SilentProgressBar.new(title, methods.size)
|
|
195
|
+
end
|
|
196
|
+
methods.each do |method_name, method_entries|
|
|
197
|
+
create_html_method_file(method_name, method_entries, manager, @outputdir, db)
|
|
198
|
+
progressbar.title.replace(method_name)
|
|
199
|
+
progressbar.inc
|
|
200
|
+
end
|
|
201
|
+
progressbar.title.replace(original_title)
|
|
202
|
+
progressbar.finish
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def create_index_html(outputdir)
|
|
206
|
+
path = outputdir + 'index.html'
|
|
207
|
+
File.open(path, 'w'){|io|
|
|
208
|
+
io.write <<HERE
|
|
209
|
+
<meta http-equiv="refresh" content="0; URL=doc/index.html">
|
|
210
|
+
<a href="doc/index.html">Go</a>
|
|
211
|
+
HERE
|
|
212
|
+
}
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def create_html_file(entry, manager, outputdir, db)
|
|
216
|
+
e = entry.is_a?(Array) ? entry.sort.first : entry
|
|
217
|
+
case e.type_id
|
|
218
|
+
when :library, :class, :doc
|
|
219
|
+
$bitclust_html_base = '..'
|
|
220
|
+
path = outputdir + e.type_id.to_s + (encodename_package(e.name) + '.html')
|
|
221
|
+
create_html_file_p(entry, manager, path, db)
|
|
222
|
+
path.relative_path_from(outputdir).to_s
|
|
223
|
+
when :function
|
|
224
|
+
create_html_function_file(entry, manager, outputdir, db)
|
|
225
|
+
else
|
|
226
|
+
raise
|
|
227
|
+
end
|
|
228
|
+
e.unload
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def create_html_method_file(method_name, entries, manager, outputdir, db)
|
|
232
|
+
path = nil
|
|
233
|
+
$bitclust_html_base = '../../..'
|
|
234
|
+
e = entries.sort.first
|
|
235
|
+
name = method_name.sub(e.klass.name + e.typemark, "")
|
|
236
|
+
path = outputdir + e.type_id.to_s + encodename_package(e.klass.name) +
|
|
237
|
+
e.typechar + (encodename_package(name) + '.html')
|
|
238
|
+
create_html_file_p(entries, manager, path, db)
|
|
239
|
+
path.relative_path_from(outputdir).to_s
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def create_html_function_file(entry, manager, outputdir, db)
|
|
243
|
+
path = nil
|
|
244
|
+
$bitclust_html_base = '..'
|
|
245
|
+
path = outputdir + entry.type_id.to_s + (entry.name + '.html')
|
|
246
|
+
create_html_file_p(entry, manager, path, db)
|
|
247
|
+
path.relative_path_from(outputdir).to_s
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def create_html_file_p(entry, manager, path, db)
|
|
251
|
+
FileUtils.mkdir_p(path.dirname) unless path.dirname.directory?
|
|
252
|
+
html = manager.entry_screen(entry, {:database => db}).body
|
|
253
|
+
path.open('w') do |f|
|
|
254
|
+
f.write(html)
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
def create_file(path, str, options = {})
|
|
259
|
+
verbose = options[:verbose]
|
|
260
|
+
$stderr.print("creating #{path} ...") if verbose
|
|
261
|
+
path.open('w') do |f|
|
|
262
|
+
f.write(str)
|
|
263
|
+
end
|
|
264
|
+
$stderr.puts(" done.") if verbose
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def encodename_package(str)
|
|
268
|
+
if $fs_casesensitive
|
|
269
|
+
NameUtils.encodename_url(str)
|
|
270
|
+
else
|
|
271
|
+
NameUtils.encodename_fs(str)
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
end
|