gonzui 1.2-x86-mswin32-60
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/AUTHORS.txt +9 -0
- data/History.txt +5539 -0
- data/Manifest.txt +115 -0
- data/PostInstall.txt +17 -0
- data/README.rdoc +149 -0
- data/Rakefile +28 -0
- data/bin/gonzui-db +167 -0
- data/bin/gonzui-import +177 -0
- data/bin/gonzui-remove +58 -0
- data/bin/gonzui-search +68 -0
- data/bin/gonzui-server +176 -0
- data/bin/gonzui-update +53 -0
- data/data/gonzui/catalog/catalog.ja +80 -0
- data/data/gonzui/doc/favicon.ico +0 -0
- data/data/gonzui/doc/folder.png +0 -0
- data/data/gonzui/doc/gonzui.css +279 -0
- data/data/gonzui/doc/gonzui.js +111 -0
- data/data/gonzui/doc/text.png +0 -0
- data/data/gonzuirc.sample +29 -0
- data/ext/autopack/autopack.c +88 -0
- data/ext/autopack/extconf.rb +3 -0
- data/ext/delta/delta.c +147 -0
- data/ext/delta/extconf.rb +5 -0
- data/ext/texttokenizer/extconf.rb +5 -0
- data/ext/texttokenizer/texttokenizer.c +93 -0
- data/ext/xmlformatter/extconf.rb +5 -0
- data/ext/xmlformatter/xmlformatter.c +207 -0
- data/lib/gonzui.rb +59 -0
- data/lib/gonzui/apt.rb +193 -0
- data/lib/gonzui/autopack.so +0 -0
- data/lib/gonzui/bdbdbm.rb +118 -0
- data/lib/gonzui/cmdapp.rb +14 -0
- data/lib/gonzui/cmdapp/app.rb +175 -0
- data/lib/gonzui/cmdapp/search.rb +134 -0
- data/lib/gonzui/config.rb +117 -0
- data/lib/gonzui/content.rb +19 -0
- data/lib/gonzui/dbm.rb +673 -0
- data/lib/gonzui/deindexer.rb +162 -0
- data/lib/gonzui/delta.rb +49 -0
- data/lib/gonzui/delta.so +0 -0
- data/lib/gonzui/extractor.rb +347 -0
- data/lib/gonzui/fetcher.rb +309 -0
- data/lib/gonzui/gettext.rb +144 -0
- data/lib/gonzui/importer.rb +84 -0
- data/lib/gonzui/indexer.rb +316 -0
- data/lib/gonzui/info.rb +80 -0
- data/lib/gonzui/license.rb +100 -0
- data/lib/gonzui/logger.rb +48 -0
- data/lib/gonzui/monitor.rb +177 -0
- data/lib/gonzui/progressbar.rb +235 -0
- data/lib/gonzui/remover.rb +38 -0
- data/lib/gonzui/searcher.rb +330 -0
- data/lib/gonzui/searchquery.rb +235 -0
- data/lib/gonzui/searchresult.rb +111 -0
- data/lib/gonzui/texttokenizer.so +0 -0
- data/lib/gonzui/updater.rb +254 -0
- data/lib/gonzui/util.rb +415 -0
- data/lib/gonzui/vcs.rb +128 -0
- data/lib/gonzui/webapp.rb +25 -0
- data/lib/gonzui/webapp/advsearch.rb +123 -0
- data/lib/gonzui/webapp/filehandler.rb +24 -0
- data/lib/gonzui/webapp/jsfeed.rb +61 -0
- data/lib/gonzui/webapp/markup.rb +445 -0
- data/lib/gonzui/webapp/search.rb +269 -0
- data/lib/gonzui/webapp/servlet.rb +319 -0
- data/lib/gonzui/webapp/snippet.rb +155 -0
- data/lib/gonzui/webapp/source.rb +37 -0
- data/lib/gonzui/webapp/stat.rb +137 -0
- data/lib/gonzui/webapp/top.rb +63 -0
- data/lib/gonzui/webapp/uri.rb +140 -0
- data/lib/gonzui/webapp/webrick.rb +48 -0
- data/lib/gonzui/webapp/xmlformatter.so +0 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/makemanifest.rb +21 -0
- data/tasks/extconf.rake +13 -0
- data/tasks/extconf/autopack.rake +43 -0
- data/tasks/extconf/delta.rake +43 -0
- data/tasks/extconf/texttokenizer.rake +43 -0
- data/tasks/extconf/xmlformatter.rake +43 -0
- data/test/_external_tools.rb +13 -0
- data/test/_test-util.rb +142 -0
- data/test/foo/Makefile.foo +66 -0
- data/test/foo/bar.c +5 -0
- data/test/foo/bar.h +6 -0
- data/test/foo/foo.c +25 -0
- data/test/foo/foo.spec +33 -0
- data/test/test_apt.rb +42 -0
- data/test/test_autopack_extn.rb +7 -0
- data/test/test_bdbdbm.rb +79 -0
- data/test/test_cmdapp-app.rb +35 -0
- data/test/test_cmdapp-search.rb +99 -0
- data/test/test_config.rb +28 -0
- data/test/test_content.rb +15 -0
- data/test/test_dbm.rb +171 -0
- data/test/test_deindexer.rb +50 -0
- data/test/test_delta.rb +66 -0
- data/test/test_extractor.rb +78 -0
- data/test/test_fetcher.rb +75 -0
- data/test/test_gettext.rb +50 -0
- data/test/test_gonzui.rb +11 -0
- data/test/test_helper.rb +10 -0
- data/test/test_importer.rb +56 -0
- data/test/test_indexer.rb +37 -0
- data/test/test_info.rb +82 -0
- data/test/test_license.rb +49 -0
- data/test/test_logger.rb +60 -0
- data/test/test_monitor.rb +23 -0
- data/test/test_searcher.rb +37 -0
- data/test/test_searchquery.rb +27 -0
- data/test/test_searchresult.rb +43 -0
- data/test/test_texttokenizer.rb +47 -0
- data/test/test_updater.rb +95 -0
- data/test/test_util.rb +149 -0
- data/test/test_vcs.rb +61 -0
- data/test/test_webapp-markup.rb +42 -0
- data/test/test_webapp-util.rb +19 -0
- data/test/test_webapp-xmlformatter.rb +19 -0
- metadata +292 -0
data/bin/gonzui-import
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# gonzui-import - a tool to import contents from a gonzui DB
|
4
|
+
#
|
5
|
+
# Copyright (C) 2004-2005 Satoru Takabayashi <satoru@namazu.org>
|
6
|
+
# All rights reserved.
|
7
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
8
|
+
#
|
9
|
+
# You can redistribute it and/or modify it under the terms of
|
10
|
+
# the GNU General Public License version 2.
|
11
|
+
#
|
12
|
+
|
13
|
+
# %LOADPATH%
|
14
|
+
require 'getoptlong'
|
15
|
+
require 'gonzui'
|
16
|
+
require 'gonzui/cmdapp'
|
17
|
+
|
18
|
+
include Gonzui
|
19
|
+
|
20
|
+
class GonzuiImport < CommandLineApplication
|
21
|
+
def do_show_usage
|
22
|
+
puts "Usage: #{program_name} [OPTION] TARGET..."
|
23
|
+
puts " TARGET: directories, archives, packages (by apt)"
|
24
|
+
puts
|
25
|
+
puts " -a, --apt PACKAGE... use apt-get to get a source package"
|
26
|
+
puts " --cvs REPOSITORY MODULE use cvs to get a source tree"
|
27
|
+
puts " --git REPOSITORY use git to get a source tree"
|
28
|
+
puts " --svn REPOSITORY MODULE use svn to get a source tree"
|
29
|
+
puts " --exclude=PATTERN exclude files matching PATTERN"
|
30
|
+
puts " [#{@config.exclude_pattern.to_s}]"
|
31
|
+
puts " --no-utf8 don't convert files to UTF-8"
|
32
|
+
puts " --no-ABBREV don't index ABBREV files. (ex. --no-text)"
|
33
|
+
puts " try --list-formats to see abbrev. list"
|
34
|
+
puts " --list-archives list all supported archives"
|
35
|
+
end
|
36
|
+
|
37
|
+
def do_get_option_table
|
38
|
+
table = [
|
39
|
+
['--apt', '-a', GetoptLong::NO_ARGUMENT],
|
40
|
+
['--cvs', GetoptLong::NO_ARGUMENT],
|
41
|
+
['--git', GetoptLong::NO_ARGUMENT],
|
42
|
+
['--svn', GetoptLong::NO_ARGUMENT],
|
43
|
+
['--no-utf8', GetoptLong::NO_ARGUMENT],
|
44
|
+
['--exclude', GetoptLong::REQUIRED_ARGUMENT],
|
45
|
+
['--list-archives', GetoptLong::NO_ARGUMENT],
|
46
|
+
]
|
47
|
+
LangScan.modules.each {|m|
|
48
|
+
option = "--no-" + m.abbrev
|
49
|
+
table.push([option, GetoptLong::NO_ARGUMENT])
|
50
|
+
}
|
51
|
+
return table
|
52
|
+
end
|
53
|
+
|
54
|
+
def validate_combinations(options)
|
55
|
+
keys = ["apt", "cvs", "svn"]
|
56
|
+
used_keys = keys.find_all {|key| options[key] }
|
57
|
+
n = used_keys.length
|
58
|
+
if n >= 2
|
59
|
+
eprintf("%s cannot be combined",
|
60
|
+
used_keys.map {|key| "--" + key }.join(" "))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def show_list_archives
|
65
|
+
supported_archives = Extractor.extnames.sort
|
66
|
+
supported_archives.each {|extname|
|
67
|
+
printf("%s\n", extname)
|
68
|
+
}
|
69
|
+
exit
|
70
|
+
end
|
71
|
+
|
72
|
+
def do_process_options(options)
|
73
|
+
validate_combinations(options)
|
74
|
+
@use_apt = if options["apt"] then true else false end
|
75
|
+
@use_cvs = if options["cvs"] then true else false end
|
76
|
+
@use_git = if options["git"] then true else false end
|
77
|
+
@use_svn = if options["svn"] then true else false end
|
78
|
+
|
79
|
+
@config.utf8 = false if options["no-utf8"]
|
80
|
+
if options["exclude"]
|
81
|
+
@config.exclude_pattern = Regexp.new(options["exclude"])
|
82
|
+
end
|
83
|
+
options.each_key {|key|
|
84
|
+
if m = /^no-(.+)$/.match(key)
|
85
|
+
abbrev = m[1]
|
86
|
+
@config.noindex_formats.push(abbrev)
|
87
|
+
end
|
88
|
+
}
|
89
|
+
show_list_archives if options["list-archives"]
|
90
|
+
show_usage if ARGV.empty?
|
91
|
+
if @use_cvs
|
92
|
+
eprintf("--cvs REPOSITORY MODULE") if ARGV.length != 2
|
93
|
+
@target_names = [[ARGV.first, ARGV.last]]
|
94
|
+
elsif @use_git
|
95
|
+
eprintf("--git REPOSITORY") if ARGV.length != 1
|
96
|
+
@target_names = [[ARGV.first]]
|
97
|
+
elsif @use_svn
|
98
|
+
eprintf("--svn REPOSITORY MODULE") if ARGV.length != 2
|
99
|
+
@target_names = [[ARGV.first, ARGV.last]]
|
100
|
+
else
|
101
|
+
@target_names = ARGV
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def make_uri_for_vcs(target_name)
|
106
|
+
repository = target_name.first
|
107
|
+
mozule = target_name.last
|
108
|
+
if @use_cvs
|
109
|
+
return URI.for_cvs(repository, mozule)
|
110
|
+
elsif @use_svn
|
111
|
+
return URI.for_svn(repository, mozule)
|
112
|
+
elsif @use_git
|
113
|
+
return URI.for_git(repository)
|
114
|
+
else
|
115
|
+
assert_not_reached
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def make_uri(target_name)
|
120
|
+
if @use_apt
|
121
|
+
return URI.for_apt(target_name)
|
122
|
+
elsif @use_cvs or @use_svn or @use_git
|
123
|
+
return make_uri_for_vcs(target_name)
|
124
|
+
end
|
125
|
+
|
126
|
+
begin
|
127
|
+
uri = URI.parse(target_name)
|
128
|
+
return uri if uri.absolute?
|
129
|
+
return URI.from_path(target_name)
|
130
|
+
rescue URI::InvalidURIError => e
|
131
|
+
begin
|
132
|
+
# windows
|
133
|
+
return URI.from_path(target_name)
|
134
|
+
rescue => e
|
135
|
+
# ignore
|
136
|
+
end
|
137
|
+
raise GonzuiError.new("#{target_name}: malformed URI")
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def import(importer, target_name)
|
142
|
+
begin
|
143
|
+
uri = make_uri(target_name)
|
144
|
+
importer.import(uri)
|
145
|
+
@logger.log("imported %s", importer.last_package_name)
|
146
|
+
rescue GonzuiError => e
|
147
|
+
wprintf("%s", e.message)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def lower_priority
|
152
|
+
begin
|
153
|
+
Process.setpriority(Process::PRIO_PROCESS, 0, 10)
|
154
|
+
rescue NoMethodError, Errno::EACCES, NameError => e
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def do_start
|
159
|
+
parse_options()
|
160
|
+
init_logger
|
161
|
+
lower_priority
|
162
|
+
|
163
|
+
show_progress = if @config.quiet then false else true end
|
164
|
+
importer = Importer.new(@config,
|
165
|
+
:show_progress => show_progress)
|
166
|
+
begin
|
167
|
+
@target_names.each {|target_name|
|
168
|
+
import(importer, target_name)
|
169
|
+
}
|
170
|
+
print importer.summary
|
171
|
+
importer.finish
|
172
|
+
rescue Interrupt
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
GonzuiImport.start
|
data/bin/gonzui-remove
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# gonzui-remove - a tool to remove contents from a gonzui DB
|
4
|
+
#
|
5
|
+
# Copyright (C) 2004-2005 Satoru Takabayashi <satoru@namazu.org>
|
6
|
+
# All rights reserved.
|
7
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
8
|
+
#
|
9
|
+
# You can redistribute it and/or modify it under the terms of
|
10
|
+
# the GNU General Public License version 2.
|
11
|
+
#
|
12
|
+
|
13
|
+
# %LOADPATH%
|
14
|
+
require 'getoptlong'
|
15
|
+
require 'gonzui'
|
16
|
+
require 'gonzui/cmdapp'
|
17
|
+
|
18
|
+
include Gonzui
|
19
|
+
include Gonzui::Util
|
20
|
+
|
21
|
+
class GonzuiRemove < Gonzui::CommandLineApplication
|
22
|
+
def do_show_usage
|
23
|
+
puts "Usage: #{program_name} [OPTION] PACKAGE..."
|
24
|
+
end
|
25
|
+
|
26
|
+
def do_get_option_table
|
27
|
+
[]
|
28
|
+
end
|
29
|
+
|
30
|
+
def do_process_options(options)
|
31
|
+
show_usage if ARGV.empty?
|
32
|
+
@package_names = ARGV
|
33
|
+
end
|
34
|
+
|
35
|
+
def do_start
|
36
|
+
parse_options()
|
37
|
+
ensure_db_directory_available
|
38
|
+
init_logger
|
39
|
+
|
40
|
+
show_progress = if @config.quiet then false else true end
|
41
|
+
remover = Remover.new(@config, :show_progress => show_progress)
|
42
|
+
begin
|
43
|
+
@package_names.each {|package_name|
|
44
|
+
begin
|
45
|
+
remover.remove_package(package_name)
|
46
|
+
@logger.log("removed %s", package_name)
|
47
|
+
rescue GonzuiError => e
|
48
|
+
wprintf("%s", e.message)
|
49
|
+
end
|
50
|
+
}
|
51
|
+
print remover.summary
|
52
|
+
ensure
|
53
|
+
remover.finish
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
GonzuiRemove.start
|
data/bin/gonzui-search
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- ruby -*-
|
3
|
+
#
|
4
|
+
# gonzui-search - a tool to search a gonzui DB
|
5
|
+
#
|
6
|
+
# Copyright (C) 2004-2005 Satoru Takabayashi <satoru@namazu.org>
|
7
|
+
# All rights reserved.
|
8
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
9
|
+
#
|
10
|
+
# You can redistribute it and/or modify it under the terms of
|
11
|
+
# the GNU General Public License version 2.
|
12
|
+
#
|
13
|
+
|
14
|
+
# %LOADPATH%
|
15
|
+
require 'getoptlong'
|
16
|
+
require 'gonzui'
|
17
|
+
require 'gonzui/cmdapp'
|
18
|
+
|
19
|
+
include Gonzui
|
20
|
+
|
21
|
+
class GonzuiSearch < CommandLineApplication
|
22
|
+
def do_show_usage
|
23
|
+
puts "Usage: #{program_name} PATTERN"
|
24
|
+
puts " -P, --package=PACKAGE search for PACKAGE"
|
25
|
+
puts " -p, --prefix perform prefix search"
|
26
|
+
puts " -e, --regexp perform regular expression search"
|
27
|
+
puts " -t, --type=TYPE search for TYPE"
|
28
|
+
puts " funcall, fundef, fundecl, others"
|
29
|
+
puts " -n, --line-number print line number with output lines"
|
30
|
+
puts " -c, --count only print a count of matching words"
|
31
|
+
puts " -C, --context=NUM print NUM lines of output context"
|
32
|
+
puts " --color use markers to highlight the matching string"
|
33
|
+
puts " -h, --no-filename suppress the prefixing filename on output"
|
34
|
+
end
|
35
|
+
|
36
|
+
def do_get_option_table
|
37
|
+
[
|
38
|
+
['--color', GetoptLong::NO_ARGUMENT],
|
39
|
+
['--context', '-C', GetoptLong::REQUIRED_ARGUMENT],
|
40
|
+
['--count', '-c', GetoptLong::NO_ARGUMENT],
|
41
|
+
['--line-number', '-n', GetoptLong::NO_ARGUMENT],
|
42
|
+
['--no-filename', '-h', GetoptLong::NO_ARGUMENT],
|
43
|
+
['--package', '-P', GetoptLong::REQUIRED_ARGUMENT],
|
44
|
+
['--prefix', '-p', GetoptLong::NO_ARGUMENT],
|
45
|
+
['--regexp', '-e', GetoptLong::NO_ARGUMENT],
|
46
|
+
['--type', '-t', GetoptLong::REQUIRED_ARGUMENT],
|
47
|
+
]
|
48
|
+
end
|
49
|
+
|
50
|
+
def do_process_options(options)
|
51
|
+
@options = options
|
52
|
+
show_usage if ARGV.length != 1
|
53
|
+
@pattern = ARGV.first
|
54
|
+
end
|
55
|
+
|
56
|
+
def do_start
|
57
|
+
parse_options
|
58
|
+
ensure_db_directory_available
|
59
|
+
searcher = CommandLineSearcher.new(@config, @options)
|
60
|
+
begin
|
61
|
+
searcher.search(@pattern)
|
62
|
+
ensure
|
63
|
+
searcher.finish
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
GonzuiSearch.start
|
data/bin/gonzui-server
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# gonzui-server - a web-based search engine of gonzui
|
4
|
+
#
|
5
|
+
# Copyright (C) 2004-2005 Satoru Takabayashi <satoru@namazu.org>
|
6
|
+
# All rights reserved.
|
7
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
8
|
+
#
|
9
|
+
# You can redistribute it and/or modify it under the terms of
|
10
|
+
# the GNU General Public License version 2.
|
11
|
+
#
|
12
|
+
|
13
|
+
# %LOADPATH%
|
14
|
+
require 'webrick'
|
15
|
+
require 'gonzui'
|
16
|
+
require 'gonzui/cmdapp'
|
17
|
+
require 'gonzui/webapp'
|
18
|
+
require 'ftools'
|
19
|
+
require 'fileutils'
|
20
|
+
|
21
|
+
include WEBrick
|
22
|
+
include Gonzui
|
23
|
+
include FileUtils
|
24
|
+
|
25
|
+
class NullWriter
|
26
|
+
def << (message)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class GonzuiServer < CommandLineApplication
|
31
|
+
include GetText
|
32
|
+
|
33
|
+
def be_secure
|
34
|
+
return unless Process.uid == 0
|
35
|
+
uid = Etc::getpwnam(@config.user).uid
|
36
|
+
gid = Etc::getgrnam(@config.group).gid
|
37
|
+
touch(@config.pid_file)
|
38
|
+
touch(@config.gonzui_log_file)
|
39
|
+
touch(@config.access_log_file)
|
40
|
+
File.chown(uid, gid, @config.pid_file)
|
41
|
+
File.chown(uid, gid, @config.gonzui_log_file)
|
42
|
+
File.chown(uid, gid, @config.access_log_file)
|
43
|
+
Process.uid = uid
|
44
|
+
Process.gid = gid
|
45
|
+
Process.euid = uid
|
46
|
+
end
|
47
|
+
|
48
|
+
def make_webrick_options
|
49
|
+
log_proc = lambda {@logger.log("server started [%d]", Process.pid) }
|
50
|
+
webrick_options = {}
|
51
|
+
if @config.bind_address != '*'
|
52
|
+
webrick_options[:BindAddress] = @config.bind_address
|
53
|
+
end
|
54
|
+
webrick_options[:Port] = @config.http_port
|
55
|
+
if @config.daemon
|
56
|
+
eprintf("daemon mode is not supported in Windows platform") if windows?
|
57
|
+
webrick_options[:StartCallback] = lambda {
|
58
|
+
log_proc.call
|
59
|
+
start_daemon
|
60
|
+
}
|
61
|
+
webrick_options[:Logger] = Log.new(NullWriter.new) # be quiet
|
62
|
+
else
|
63
|
+
webrick_options[:StartCallback] = log_proc
|
64
|
+
webrick_options[:Logger] = Log.new(STDOUT, Log::ERROR)
|
65
|
+
end
|
66
|
+
access_logger = File.open(@config.access_log_file, "a")
|
67
|
+
access_logger.sync = true
|
68
|
+
webrick_options[:AccessLog] =
|
69
|
+
[[ access_logger, AccessLog::COMBINED_LOG_FORMAT ]]
|
70
|
+
return webrick_options
|
71
|
+
end
|
72
|
+
|
73
|
+
def read_pid_file
|
74
|
+
File.read(@config.pid_file).chomp.to_i
|
75
|
+
end
|
76
|
+
|
77
|
+
def write_pid_file
|
78
|
+
begin
|
79
|
+
File.open(@config.pid_file, "w") {|f| f.puts Process.pid }
|
80
|
+
rescue
|
81
|
+
# FIXME: we need logging here.
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def remove_pid_file
|
86
|
+
File.safe_unlink(@config.pid_file)
|
87
|
+
end
|
88
|
+
|
89
|
+
def start_daemon
|
90
|
+
Daemon.start
|
91
|
+
write_pid_file
|
92
|
+
be_secure
|
93
|
+
end
|
94
|
+
|
95
|
+
def stop_daemon
|
96
|
+
begin
|
97
|
+
pid = read_pid_file
|
98
|
+
Process.kill("TERM", pid)
|
99
|
+
rescue
|
100
|
+
wprintf("no processe to kill" )
|
101
|
+
end
|
102
|
+
remove_pid_file
|
103
|
+
exit
|
104
|
+
end
|
105
|
+
|
106
|
+
def do_show_usage
|
107
|
+
puts "Usage: #{program_name} [OPTION]"
|
108
|
+
puts " -p, --port=PORT listen on the specified PORT [#{@config.http_port}]"
|
109
|
+
puts " --bind=ADDRESS listen on the specified ADDRESS [#{@config.bind_address}]"
|
110
|
+
puts " --daemon run as a daemon"
|
111
|
+
puts " -u, --user=USER use USER's UID when daemonized [#{@config.user}]"
|
112
|
+
puts " -g, --group=GROUP use GROUP's GID when daemonized [#{@config.group}]"
|
113
|
+
puts " -t, --title=TITLE use TITLE for HTML contents [#{@config.site_title}]"
|
114
|
+
end
|
115
|
+
|
116
|
+
def do_get_option_table
|
117
|
+
[
|
118
|
+
['--port', '-p', GetoptLong::REQUIRED_ARGUMENT],
|
119
|
+
['--bind', GetoptLong::REQUIRED_ARGUMENT],
|
120
|
+
['--user', '-u', GetoptLong::REQUIRED_ARGUMENT],
|
121
|
+
['--group', '-g', GetoptLong::REQUIRED_ARGUMENT],
|
122
|
+
['--title', '-t', GetoptLong::REQUIRED_ARGUMENT],
|
123
|
+
['--daemon', GetoptLong::NO_ARGUMENT],
|
124
|
+
['--stop', GetoptLong::NO_ARGUMENT],
|
125
|
+
]
|
126
|
+
end
|
127
|
+
|
128
|
+
def do_process_options(options)
|
129
|
+
@config.http_port = options["port"].to_i if options["port"]
|
130
|
+
@config.bind_address = options["bind"] if options["bind"]
|
131
|
+
@config.user = options["user"] if options["user"]
|
132
|
+
@config.group = options["group"] if options["group"]
|
133
|
+
@config.site_title = options["title"] if options["title"]
|
134
|
+
@config.daemon = true if options["daemon"]
|
135
|
+
stop_daemon if options["stop"]
|
136
|
+
end
|
137
|
+
|
138
|
+
def start_server(dbm, catalog_repository)
|
139
|
+
server = HTTPServer.new(make_webrick_options)
|
140
|
+
trap("INT"){ server.shutdown }
|
141
|
+
GonzuiServlet.servlets.each {|klass|
|
142
|
+
absolute_mount_point = URI.path_join(@config.base_mount_point,
|
143
|
+
klass.mount_point)
|
144
|
+
server.mount(absolute_mount_point, klass,
|
145
|
+
@config, @logger, dbm, catalog_repository)
|
146
|
+
}
|
147
|
+
server.start
|
148
|
+
end
|
149
|
+
|
150
|
+
def do_start
|
151
|
+
parse_options()
|
152
|
+
ensure_db_directory_available
|
153
|
+
init_logger
|
154
|
+
@logger.monitor = STDOUT unless @config.daemon
|
155
|
+
|
156
|
+
catalog_repository = CatalogRepository.new(@config.catalog_directory)
|
157
|
+
if @config.bind_address != '*'
|
158
|
+
printf("http://%s:%d/\n", @config.bind_address, @config.http_port)
|
159
|
+
else
|
160
|
+
printf("http://%s:%d/\n", Socket.gethostname, @config.http_port)
|
161
|
+
end
|
162
|
+
|
163
|
+
dbm = Gonzui::DBM.open(@config, true)
|
164
|
+
begin
|
165
|
+
start_server(dbm, catalog_repository)
|
166
|
+
rescue => e
|
167
|
+
eprintf("%s", e.message)
|
168
|
+
ensure
|
169
|
+
@logger.log("server stopped [%d]", Process.pid)
|
170
|
+
dbm.close
|
171
|
+
remove_pid_file
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
GonzuiServer.start
|