yggdrasil 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +45 -8
- data/Rakefile +2 -2
- data/bin/ygg +5 -0
- data/bin/yggserve +5 -0
- data/lib/yggdrasil/check.rb +11 -7
- data/lib/yggdrasil/commit.rb +3 -3
- data/lib/yggdrasil/help.rb +7 -33
- data/lib/yggdrasil/init.rb +11 -9
- data/lib/yggdrasil/list.rb +1 -1
- data/lib/yggdrasil/log.rb +2 -2
- data/lib/yggdrasil/update.rb +2 -2
- data/lib/yggdrasil/version.rb +1 -1
- data/lib/yggdrasil.rb +27 -34
- data/lib/yggdrasil_common.rb +13 -8
- data/lib/yggdrasil_server/help.rb +85 -0
- data/lib/yggdrasil_server/{init_server.rb → init.rb} +10 -10
- data/lib/yggdrasil_server/put_result.rb +2 -2
- data/lib/yggdrasil_server/results.rb +3 -3
- data/lib/yggdrasil_server/version.rb +14 -0
- data/lib/yggdrasil_server.rb +43 -10
- data/spec/add_spec.rb +1 -1
- data/spec/check_spec.rb +13 -12
- data/spec/cleanup_spec.rb +6 -6
- data/spec/commit_spec.rb +14 -14
- data/spec/diff_spec.rb +12 -12
- data/spec/help_spec.rb +6 -39
- data/spec/init_spec.rb +14 -14
- data/spec/list_spec.rb +3 -3
- data/spec/log_spec.rb +3 -3
- data/spec/revert_spec.rb +15 -15
- data/spec/server_help_spec.rb +142 -0
- data/spec/{init_server_spec.rb → server_init_spec.rb} +13 -12
- data/spec/{results_spec.rb → server_results_spec.rb} +15 -14
- data/spec/server_spec.rb +42 -41
- data/spec/server_version_spec.rb +25 -0
- data/spec/spec_helper.rb +3 -3
- data/spec/status_spec.rb +7 -7
- data/spec/update_spec.rb +1 -1
- data/spec/version_spec.rb +1 -1
- data/yggdrasil.gemspec +6 -6
- metadata +20 -10
@@ -11,29 +11,29 @@ class YggdrasilServer
|
|
11
11
|
end
|
12
12
|
|
13
13
|
if !@options.has_key?(:ro_username) && @options.has_key?(:ro_password)
|
14
|
-
error
|
14
|
+
error '--ro-password option need --ro-username, too.'
|
15
15
|
end
|
16
16
|
|
17
17
|
until @options.has_key?(:port)
|
18
|
-
print
|
18
|
+
print 'Input tcp port number: '
|
19
19
|
input = $stdin.gets
|
20
|
-
error
|
20
|
+
error 'can not input tcp port number' unless input
|
21
21
|
|
22
22
|
input.chomp!
|
23
23
|
unless %r{\d+} =~ input && input.to_i < 0x10000
|
24
|
-
puts
|
24
|
+
puts 'ERROR: Invalid port number.'
|
25
25
|
redo
|
26
26
|
end
|
27
27
|
@options[:port] = input # string
|
28
28
|
end
|
29
29
|
|
30
30
|
until @options.has_key?(:repo)
|
31
|
-
print
|
31
|
+
print 'Input svn repo URL: '
|
32
32
|
input = $stdin.gets
|
33
|
-
error
|
33
|
+
error 'can not input svn repo URL.' unless input
|
34
34
|
|
35
35
|
unless %r{^(http://|https://|file://|svn://)} =~ input
|
36
|
-
puts
|
36
|
+
puts 'ERROR: Invalid URL.'
|
37
37
|
redo
|
38
38
|
end
|
39
39
|
@options[:repo] = input
|
@@ -42,14 +42,14 @@ class YggdrasilServer
|
|
42
42
|
@options[:repo].chomp!('/')
|
43
43
|
|
44
44
|
unless @options.has_key?(:ro_password)
|
45
|
-
puts
|
46
|
-
puts
|
45
|
+
puts 'Input read-only username/password (clients use this to read repo).'
|
46
|
+
puts 'ATTENTION! username/password are stored to disk unencrypted!'
|
47
47
|
input_user_pass
|
48
48
|
end
|
49
49
|
|
50
50
|
# make config file
|
51
51
|
Dir.mkdir @config_dir, 0755 unless File.exist?(@config_dir)
|
52
|
-
File.open(@server_config_file,
|
52
|
+
File.open(@server_config_file, 'w') do |f|
|
53
53
|
f.write "port=#{@options[:port]}\n"\
|
54
54
|
"repo=#{@options[:repo]}\n"
|
55
55
|
if @options.has_key?(:ro_password)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class YggdrasilServer
|
2
2
|
def put_result(sock, arg_hash = {})
|
3
|
-
result_string =
|
3
|
+
result_string = ''
|
4
4
|
while (line=sock.gets)
|
5
5
|
result_string << line
|
6
6
|
end
|
@@ -8,7 +8,7 @@ class YggdrasilServer
|
|
8
8
|
Dir.mkdir @results_dir, 0755 unless File.exist?(@results_dir)
|
9
9
|
result_file = "#@results_dir/#{arg_hash[:hostname]}_#{sock.peeraddr[3]}"
|
10
10
|
File.delete result_file if File.exist?(result_file)
|
11
|
-
File.open(result_file,
|
11
|
+
File.open(result_file, 'w') do |f|
|
12
12
|
f.write result_string
|
13
13
|
end
|
14
14
|
arg_hash
|
@@ -2,7 +2,7 @@ class YggdrasilServer
|
|
2
2
|
|
3
3
|
# @param [Array] args
|
4
4
|
def results(args)
|
5
|
-
args = parse_options(args, {'--
|
5
|
+
args = parse_options(args, {'--expire'=>:expire})
|
6
6
|
|
7
7
|
if args.size != 0
|
8
8
|
error "invalid arguments: #{args.join(',')}"
|
@@ -14,9 +14,9 @@ class YggdrasilServer
|
|
14
14
|
files.each do |file|
|
15
15
|
next if /^\./ =~ file
|
16
16
|
absolute = "#@results_dir/#{file}"
|
17
|
-
if @options.has_key?(:
|
17
|
+
if @options.has_key?(:expire)
|
18
18
|
stat = File.stat(absolute)
|
19
|
-
if stat.mtime < (Time.now - @options[:
|
19
|
+
if stat.mtime < (Time.now - @options[:expire].to_i * 60)
|
20
20
|
alert = true
|
21
21
|
puts "######## #{file}: last check is too old: #{stat.mtime.to_s}"
|
22
22
|
next
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'yggdrasil'
|
2
|
+
|
3
|
+
class YggdrasilServer
|
4
|
+
|
5
|
+
def version
|
6
|
+
puts <<"EOS"
|
7
|
+
#@base_cmd, version #{Yggdrasil::VERSION}
|
8
|
+
|
9
|
+
Copyright (C) 2012-2013 Tomohisa Kusukawa.
|
10
|
+
Yggdrasil is open source software, see https://github.com/tkusukawa/yggdrasil/
|
11
|
+
|
12
|
+
EOS
|
13
|
+
end
|
14
|
+
end
|
data/lib/yggdrasil_server.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
require 'socket'
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'yggdrasil_common'
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
5
|
+
require 'yggdrasil_server/version'
|
6
|
+
require 'yggdrasil_server/help'
|
7
|
+
require 'yggdrasil_server/init'
|
8
|
+
require 'yggdrasil_server/results'
|
7
9
|
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
10
|
+
require 'yggdrasil_server/get_repo'
|
11
|
+
require 'yggdrasil_server/get_ro_id_pw'
|
12
|
+
require 'yggdrasil_server/put_result'
|
11
13
|
|
12
14
|
class YggdrasilServer
|
13
15
|
MESSAGE_QUIT = 'quit'
|
@@ -17,17 +19,46 @@ class YggdrasilServer
|
|
17
19
|
:put_result => [:hostname],
|
18
20
|
}
|
19
21
|
|
22
|
+
def YggdrasilServer.command(args, input = nil)
|
23
|
+
$stdin = StringIO.new(input) if input != nil
|
24
|
+
ENV['LANG'] = 'en_US.UTF-8'
|
25
|
+
|
26
|
+
if args.size == 0
|
27
|
+
new(false).help([])
|
28
|
+
return
|
29
|
+
end
|
30
|
+
case args[0]
|
31
|
+
when 'daemon'
|
32
|
+
Process.daemon
|
33
|
+
YggdrasilServer.new.server(args[1..-1])
|
34
|
+
when 'debug'
|
35
|
+
args << '--debug'
|
36
|
+
YggdrasilServer.new.server(args[1..-1])
|
37
|
+
when 'help', '--help', 'h', '?'
|
38
|
+
new(false).help(args[1..-1])
|
39
|
+
when 'init'
|
40
|
+
new(false).init_server(args[1..-1])
|
41
|
+
when 'results'
|
42
|
+
YggdrasilServer.new.results(args[1..-1])
|
43
|
+
when 'version', '--version'
|
44
|
+
new(false).version
|
45
|
+
else
|
46
|
+
$stderr .puts "Unknown subcommand: '#{args[0]}'"
|
47
|
+
exit 1
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
20
51
|
def initialize(exist_config = true)
|
21
52
|
@base_cmd = File::basename($0)
|
22
53
|
@current_dir = `readlink -f .`.chomp
|
23
|
-
@config_dir = "#{ENV[
|
54
|
+
@config_dir = "#{ENV['HOME']}/.yggdrasil"
|
24
55
|
@server_config_file = "#@config_dir/server_config"
|
25
56
|
@results_dir = "#@config_dir/results"
|
26
57
|
|
27
58
|
return unless exist_config
|
28
59
|
configs = read_config(@server_config_file)
|
29
|
-
error
|
30
|
-
error
|
60
|
+
error 'need "port" in config file' unless (@port = configs[:port])
|
61
|
+
error 'need "repo" in config file' unless (@repo = configs[:repo])
|
31
62
|
@ro_username = configs[:ro_username] if configs.has_key?(:ro_username)
|
32
63
|
@ro_password = configs[:ro_password] if configs.has_key?(:ro_password)
|
33
64
|
end
|
@@ -44,9 +75,11 @@ class YggdrasilServer
|
|
44
75
|
loop do
|
45
76
|
sock = s0.accept
|
46
77
|
msg = sock.gets # first line
|
78
|
+
ctime = Time.now
|
47
79
|
if msg && msg.chomp! != MESSAGE_QUIT
|
48
80
|
msg.chomp!
|
49
|
-
|
81
|
+
printf "RCV[%04d-%02d-%02d %02d:%02d:%02d.%03d](#{sock.peeraddr[3]}): #{msg}\n",
|
82
|
+
ctime.year, ctime.month, ctime.day, ctime.hour, ctime.min, ctime.sec, (ctime.usec/1000).round
|
50
83
|
msg_parts = msg.split
|
51
84
|
if msg_parts.size != 0
|
52
85
|
msg_cmd = msg_parts[0]
|
data/spec/add_spec.rb
CHANGED
data/spec/check_spec.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
require 'yggdrasil_server'
|
2
3
|
|
3
|
-
describe Yggdrasil,
|
4
|
-
|
4
|
+
describe Yggdrasil, 'check' do
|
5
|
+
before(:all) do
|
5
6
|
puts '-------- check'
|
6
7
|
prepare_environment
|
7
8
|
init_yggdrasil
|
@@ -79,22 +80,22 @@ EOS
|
|
79
80
|
|
80
81
|
sock = 0
|
81
82
|
begin
|
82
|
-
sock = TCPSocket.open(
|
83
|
+
sock = TCPSocket.open('localhost', 4000)
|
83
84
|
rescue
|
84
|
-
puts
|
85
|
+
puts 'OK. no server'
|
85
86
|
else
|
86
|
-
puts
|
87
|
-
sock.puts(
|
87
|
+
puts 'NG. zombie server. try quit'
|
88
|
+
sock.puts('quit')
|
88
89
|
sock.close
|
89
90
|
end
|
90
91
|
|
91
|
-
|
92
|
+
YggdrasilServer.command %w{init} +
|
92
93
|
%w{--port 4000} +
|
93
94
|
%w{--repo svn://localhost/tmp/yggdrasil-test/svn-repo/servers/{HOST}/}+
|
94
95
|
%w{--ro-username hoge --ro-password foo},
|
95
96
|
"\n\n"
|
96
97
|
fork do
|
97
|
-
|
98
|
+
YggdrasilServer.command %w{debug}
|
98
99
|
end
|
99
100
|
|
100
101
|
sleep 1
|
@@ -105,8 +106,8 @@ EOS
|
|
105
106
|
Yggdrasil.command %w{check}
|
106
107
|
|
107
108
|
sleep 1
|
108
|
-
File.exist?(
|
109
|
-
files = Dir.entries(
|
109
|
+
File.exist?('/tmp/yggdrasil-test/.yggdrasil/results').should be_true
|
110
|
+
files = Dir.entries('/tmp/yggdrasil-test/.yggdrasil/results')
|
110
111
|
result_files = files.select{|file| %r{^#{Socket.gethostname}} =~ file}
|
111
112
|
result_files.size.should == 1
|
112
113
|
`cat /tmp/yggdrasil-test/.yggdrasil/results/#{result_files[0]}`.should == <<"EOS"
|
@@ -137,8 +138,8 @@ Index: tmp/yggdrasil-test/A
|
|
137
138
|
+foo
|
138
139
|
EOS
|
139
140
|
|
140
|
-
sock = TCPSocket.open(
|
141
|
-
sock.puts(
|
141
|
+
sock = TCPSocket.open('localhost', 4000)
|
142
|
+
sock.puts('quit')
|
142
143
|
sock.close
|
143
144
|
Process.waitall
|
144
145
|
end
|
data/spec/cleanup_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
|
3
|
-
describe Yggdrasil,
|
3
|
+
describe Yggdrasil, 'cleanup' do
|
4
4
|
it '-------- cleanup' do
|
5
5
|
puts '-------- cleanup'
|
6
6
|
prepare_environment
|
@@ -8,15 +8,15 @@ describe Yggdrasil, "cleanup" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should success cleanup' do
|
11
|
-
puts
|
12
|
-
puts
|
11
|
+
puts '---- should success cleanup'
|
12
|
+
puts '-- rm .svn'
|
13
13
|
`rm -rf /tmp/yggdrasil-test/.yggdrasil/mirror/.svn`
|
14
14
|
|
15
|
-
puts
|
15
|
+
puts '-- cleanup'
|
16
16
|
Yggdrasil.command %w{cleanup --username hoge --password foo}
|
17
17
|
|
18
|
-
puts
|
19
|
-
res = File.exist?(
|
18
|
+
puts '-- check .svn'
|
19
|
+
res = File.exist?('/tmp/yggdrasil-test/.yggdrasil/mirror/.svn')
|
20
20
|
p res
|
21
21
|
res.should == true
|
22
22
|
end
|
data/spec/commit_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
|
3
|
-
describe Yggdrasil,
|
3
|
+
describe Yggdrasil, 'commit' do
|
4
4
|
it '-------- commit' do
|
5
5
|
puts '-------- commit'
|
6
6
|
prepare_environment
|
@@ -15,12 +15,12 @@ describe Yggdrasil, "commit" do
|
|
15
15
|
puts '---- should commit added files'
|
16
16
|
`echo hoge > /tmp/yggdrasil-test/A`
|
17
17
|
`echo foo > /tmp/yggdrasil-test/B`
|
18
|
-
FileUtils.cd
|
18
|
+
FileUtils.cd '/tmp/yggdrasil-test' do
|
19
19
|
puts '-- add'
|
20
20
|
Yggdrasil.command %w{add A /tmp/yggdrasil-test/B}
|
21
21
|
end
|
22
22
|
|
23
|
-
puts
|
23
|
+
puts '-- commit'
|
24
24
|
FileUtils.cd '/tmp/yggdrasil-test' do
|
25
25
|
Yggdrasil.command %w{commit --username hoge --password foo},
|
26
26
|
"0\nY\nadd A and B\n"
|
@@ -38,11 +38,11 @@ describe Yggdrasil, "commit" do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'should commit modified file' do
|
41
|
-
puts
|
42
|
-
puts
|
41
|
+
puts '---- should commit modified file'
|
42
|
+
puts '-- modify'
|
43
43
|
`echo hoge >> /tmp/yggdrasil-test/A`
|
44
44
|
|
45
|
-
puts
|
45
|
+
puts '-- commit'
|
46
46
|
Yggdrasil.command %w{commit / --username hoge --password foo},
|
47
47
|
"0\nY\nmodify A\n"
|
48
48
|
|
@@ -53,11 +53,11 @@ describe Yggdrasil, "commit" do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'should commit with multi line comment' do
|
56
|
-
puts
|
57
|
-
puts
|
56
|
+
puts '---- should commit with multi line comment'
|
57
|
+
puts '-- modify'
|
58
58
|
`echo foo >> /tmp/yggdrasil-test/B`
|
59
59
|
|
60
|
-
puts
|
60
|
+
puts '-- commit'
|
61
61
|
Yggdrasil.command %w{commit / --username hoge --password foo},
|
62
62
|
"Y\ntest commit\\\nmodify B\n"
|
63
63
|
|
@@ -69,7 +69,7 @@ describe Yggdrasil, "commit" do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'should accept password interactive' do
|
72
|
-
puts
|
72
|
+
puts '---- should accept password interactive'
|
73
73
|
`echo A >> /tmp/yggdrasil-test/A`
|
74
74
|
|
75
75
|
Yggdrasil.command %w{commit /tmp --username hoge},
|
@@ -82,7 +82,7 @@ describe Yggdrasil, "commit" do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
it 'should commit specified file only' do
|
85
|
-
puts
|
85
|
+
puts '---- should commit specified file only'
|
86
86
|
`echo A >> /tmp/yggdrasil-test/A`
|
87
87
|
`echo B >> /tmp/yggdrasil-test/B`
|
88
88
|
|
@@ -97,7 +97,7 @@ describe Yggdrasil, "commit" do
|
|
97
97
|
end
|
98
98
|
|
99
99
|
it 'should not commit deleted file' do
|
100
|
-
puts
|
100
|
+
puts '---- should not commit deleted file'
|
101
101
|
`rm -f /tmp/yggdrasil-test/A`
|
102
102
|
|
103
103
|
Yggdrasil.command %w{commit --username hoge --password foo -m delete},
|
@@ -109,7 +109,7 @@ describe Yggdrasil, "commit" do
|
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'should commit deleted file' do
|
112
|
-
puts
|
112
|
+
puts '---- should commit deleted file'
|
113
113
|
`echo hoge > /tmp/yggdrasil-test/A`
|
114
114
|
`rm -f /tmp/yggdrasil-test/B`
|
115
115
|
|
@@ -124,7 +124,7 @@ describe Yggdrasil, "commit" do
|
|
124
124
|
end
|
125
125
|
|
126
126
|
it 'should commit all files at once' do
|
127
|
-
puts
|
127
|
+
puts '---- should commit all files at once'
|
128
128
|
|
129
129
|
`echo HOGE >> /tmp/yggdrasil-test/A`
|
130
130
|
`rm -f /tmp/yggdrasil-test/B`
|
data/spec/diff_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
|
3
|
-
describe Yggdrasil,
|
3
|
+
describe Yggdrasil, 'diff' do
|
4
4
|
it '-------- diff' do
|
5
5
|
puts '-------- diff'
|
6
6
|
prepare_environment
|
@@ -12,9 +12,9 @@ describe Yggdrasil, "diff" do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'should success diff (absolute/relative path)' do
|
15
|
-
puts
|
15
|
+
puts '---- should success diff (absolute/relative path)'
|
16
16
|
out = catch_out do
|
17
|
-
FileUtils.cd
|
17
|
+
FileUtils.cd '/tmp/yggdrasil-test' do
|
18
18
|
Yggdrasil.command(%w{diff /tmp/yggdrasil-test/A B --username hoge --password foo})
|
19
19
|
end
|
20
20
|
end
|
@@ -39,9 +39,9 @@ EOS
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'should success (no path)' do
|
42
|
-
puts
|
42
|
+
puts '---- should success (no path)'
|
43
43
|
out = catch_out do
|
44
|
-
FileUtils.cd
|
44
|
+
FileUtils.cd '/tmp/yggdrasil-test' do
|
45
45
|
Yggdrasil.command %w{diff --username hoge --password foo}
|
46
46
|
end
|
47
47
|
end
|
@@ -66,9 +66,9 @@ EOS
|
|
66
66
|
end
|
67
67
|
|
68
68
|
it 'should success (-r)' do
|
69
|
-
puts
|
69
|
+
puts '---- should success (-r)'
|
70
70
|
out = catch_out do
|
71
|
-
FileUtils.cd
|
71
|
+
FileUtils.cd '/tmp/yggdrasil-test' do
|
72
72
|
Yggdrasil.command %w{diff -r 2:3 A --username hoge --password foo}
|
73
73
|
end
|
74
74
|
end
|
@@ -84,9 +84,9 @@ EOS
|
|
84
84
|
end
|
85
85
|
|
86
86
|
it 'should success (--revision)' do
|
87
|
-
puts
|
87
|
+
puts '---- should success (--revision)'
|
88
88
|
out = catch_out do
|
89
|
-
FileUtils.cd
|
89
|
+
FileUtils.cd '/tmp/yggdrasil-test' do
|
90
90
|
Yggdrasil.command %w{diff --revision 3 A --username hoge --password foo}
|
91
91
|
end
|
92
92
|
end
|
@@ -103,17 +103,17 @@ EOS
|
|
103
103
|
end
|
104
104
|
|
105
105
|
it 'should error: diff with incorrect option' do
|
106
|
-
puts
|
106
|
+
puts '---- should error: diff with incorrect option'
|
107
107
|
cmd = %w{diff --hoge --username hoge --password foo}
|
108
108
|
|
109
109
|
err = catch_err do
|
110
|
-
FileUtils.cd
|
110
|
+
FileUtils.cd '/' do
|
111
111
|
lambda{Yggdrasil.command cmd}.should raise_error(SystemExit)
|
112
112
|
end
|
113
113
|
end
|
114
114
|
err.sub!(%r{/\S*svn}, 'svn')
|
115
115
|
err.should == <<"EOS"
|
116
|
-
#{File.basename($0)} error: command failure: svn
|
116
|
+
#{File.basename($0)} error: command failure: svn ...
|
117
117
|
command output:
|
118
118
|
svn: invalid option: --hoge
|
119
119
|
Type 'svn help' for usage.
|
data/spec/help_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
|
3
|
-
describe Yggdrasil,
|
3
|
+
describe Yggdrasil, 'help' do
|
4
4
|
puts '-------- help'
|
5
5
|
|
6
6
|
show_subcommands = <<"EOS"
|
@@ -16,18 +16,15 @@ Available subcommands:
|
|
16
16
|
diff (di)
|
17
17
|
help (?, h)
|
18
18
|
init
|
19
|
-
init-server
|
20
19
|
list (ls)
|
21
20
|
log
|
22
|
-
results
|
23
21
|
revert
|
24
|
-
server
|
25
22
|
status (stat, st)
|
26
23
|
update
|
27
24
|
version
|
28
25
|
|
29
26
|
Yggdrasil is a subversion wrapper to manage server configurations and conditions.
|
30
|
-
|
27
|
+
At first, you should type '#{File.basename($0)} init' to create config file.
|
31
28
|
|
32
29
|
EOS
|
33
30
|
|
@@ -286,33 +283,16 @@ usage: #{File.basename($0)} check [OPTIONS...]
|
|
286
283
|
For example, mount status, number of specific process and etc. can be checked
|
287
284
|
by setting up executable files in ~/.yggdrasil/checker/
|
288
285
|
|
289
|
-
|
286
|
+
If the yggdrasil server is registered,
|
287
|
+
this subcommand send the result to yggdrasil server
|
288
|
+
and yggdrasil server record the results for all managed servers.
|
289
|
+
Type 'yggserve help', if you need to know about yggdrasil server.
|
290
290
|
|
291
291
|
Valid options:
|
292
292
|
--username ARG : specify a username ARG
|
293
293
|
--password ARG : specify a password ARG
|
294
294
|
--non-interactive : do no interactive prompting
|
295
295
|
|
296
|
-
EOS
|
297
|
-
end
|
298
|
-
|
299
|
-
it 'should show help of init-server' do
|
300
|
-
puts '---- should show help of init-server'
|
301
|
-
out = catch_out{Yggdrasil.command %w{help init-server}}
|
302
|
-
out.should == <<"EOS"
|
303
|
-
init-server: setup server configuration.
|
304
|
-
usage: #{File.basename($0)} init-server [OPTIONS...]
|
305
|
-
|
306
|
-
Valid options:
|
307
|
-
--port ARG : specify a TCP port number ARG
|
308
|
-
--repo ARG : URL of subversion repository
|
309
|
-
ARG can contain {HOST} or a {host}
|
310
|
-
{HOST} is replaced by client hostname with domain
|
311
|
-
{host} is replaced by client hostname without domain
|
312
|
-
e.g. svn://192.168.3.5/servers/{host}/ygg
|
313
|
-
--ro-username ARG : specify a username ARG for read only
|
314
|
-
--ro-password ARG : specify a password ARG for read only
|
315
|
-
|
316
296
|
EOS
|
317
297
|
end
|
318
298
|
|
@@ -326,19 +306,6 @@ usage: #{File.basename($0)} server [OPTIONS...]
|
|
326
306
|
Valid options:
|
327
307
|
--daemon : daemon mode
|
328
308
|
|
329
|
-
EOS
|
330
|
-
end
|
331
|
-
|
332
|
-
it 'should show help of results' do
|
333
|
-
puts '---- should show help of results'
|
334
|
-
out = catch_out{Yggdrasil.command %w{help results}}
|
335
|
-
out.should == <<"EOS"
|
336
|
-
results: display the result of yggdrasil check command.
|
337
|
-
usage: #{File.basename($0)} results [OPTIONS...]
|
338
|
-
|
339
|
-
Valid options:
|
340
|
-
--limit ARG : minutes from the final report, to judge the host not be alive
|
341
|
-
|
342
309
|
EOS
|
343
310
|
end
|
344
311
|
end
|
data/spec/init_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
|
3
|
-
describe Yggdrasil,
|
3
|
+
describe Yggdrasil, 'init' do
|
4
4
|
it '-------- init' do
|
5
5
|
puts '-------- init'
|
6
6
|
prepare_environment
|
@@ -80,7 +80,7 @@ describe Yggdrasil, "init" do
|
|
80
80
|
Yggdrasil.command %w{init --debug} +
|
81
81
|
%w{--repo private}
|
82
82
|
|
83
|
-
File.exist?(
|
83
|
+
File.exist?('/tmp/yggdrasil-test/.yggdrasil/config').should be_true
|
84
84
|
end
|
85
85
|
|
86
86
|
it 'should success: create config file (interactive)' do
|
@@ -90,11 +90,11 @@ describe Yggdrasil, "init" do
|
|
90
90
|
`rm -rf /tmp/yggdrasil-test/svn-repo`
|
91
91
|
`svnadmin create /tmp/yggdrasil-test/svn-repo`
|
92
92
|
|
93
|
-
File.open(
|
93
|
+
File.open('/tmp/yggdrasil-test/svn-repo/conf/passwd', 'w') do |f|
|
94
94
|
f.write "[users]\nhoge = foo"
|
95
95
|
end
|
96
96
|
|
97
|
-
File.open(
|
97
|
+
File.open('/tmp/yggdrasil-test/svn-repo/conf/svnserve.conf', 'w') do |f|
|
98
98
|
f.write <<"EOS"
|
99
99
|
[general]
|
100
100
|
anon-access = none
|
@@ -112,21 +112,21 @@ EOS
|
|
112
112
|
"Y\n"
|
113
113
|
end
|
114
114
|
out.should == \
|
115
|
-
|
115
|
+
'Input svn repo URL: '\
|
116
116
|
"check SVN access...\n"\
|
117
|
-
|
117
|
+
'Input svn username: '\
|
118
118
|
"Input svn password: \n"\
|
119
119
|
"SVN access OK: svn://localhost/tmp/yggdrasil-test/svn-repo\n"\
|
120
120
|
"not exist directory(s): mng-repo/host-name\n"\
|
121
|
-
|
121
|
+
'make directory(s)? [Yn]: '
|
122
122
|
end
|
123
123
|
|
124
124
|
it 'should make checker example at init' do
|
125
125
|
puts "\n---- should make checker example at init"
|
126
|
-
dir =
|
126
|
+
dir = '/tmp/yggdrasil-test/.yggdrasil/checker'
|
127
127
|
File.directory?(dir).should be_true
|
128
128
|
|
129
|
-
example_checker = dir +
|
129
|
+
example_checker = dir + '/gem_list'
|
130
130
|
File.executable?(example_checker).should be_true
|
131
131
|
end
|
132
132
|
|
@@ -134,23 +134,23 @@ EOS
|
|
134
134
|
puts '---- should success init subcommand with server option'
|
135
135
|
prepare_environment
|
136
136
|
|
137
|
-
|
137
|
+
YggdrasilServer.command %w{init} +
|
138
138
|
%w{--port 4000} +
|
139
139
|
%w{--repo svn://localhost/tmp/yggdrasil-test/svn-repo/servers/{HOST}/} +
|
140
140
|
%w{--ro-username hoge} +
|
141
141
|
%w{--ro-password foo}
|
142
142
|
fork do
|
143
|
-
|
143
|
+
YggdrasilServer.command %w{debug}
|
144
144
|
end
|
145
145
|
|
146
146
|
sleep 1
|
147
147
|
Yggdrasil.command %w{init --debug --server localhost:4000},
|
148
148
|
"Y\nhoge\nfoo\n"
|
149
149
|
|
150
|
-
File.exist?(
|
150
|
+
File.exist?('/tmp/yggdrasil-test/.yggdrasil/config').should be_true
|
151
151
|
|
152
|
-
sock = TCPSocket.open(
|
153
|
-
sock.puts(
|
152
|
+
sock = TCPSocket.open('localhost', 4000)
|
153
|
+
sock.puts('quit')
|
154
154
|
sock.close
|
155
155
|
Process.waitall
|
156
156
|
end
|
data/spec/list_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
|
3
|
-
describe Yggdrasil,
|
3
|
+
describe Yggdrasil, 'list' do
|
4
4
|
it '-------- list' do
|
5
5
|
puts '-------- list'
|
6
6
|
prepare_environment
|
@@ -17,7 +17,7 @@ describe Yggdrasil, "list" do
|
|
17
17
|
it 'should show list (relative path)' do
|
18
18
|
puts '---- should show list (relative path)'
|
19
19
|
out = catch_out do
|
20
|
-
FileUtils.cd
|
20
|
+
FileUtils.cd '/tmp' do
|
21
21
|
Yggdrasil.command %w{list yggdrasil-test}+
|
22
22
|
%w{--username hoge --password foo}
|
23
23
|
end
|
@@ -28,7 +28,7 @@ describe Yggdrasil, "list" do
|
|
28
28
|
it 'should show list (no path)' do
|
29
29
|
puts '---- should show list (no path)'
|
30
30
|
out = catch_out do
|
31
|
-
FileUtils.cd
|
31
|
+
FileUtils.cd '/tmp/yggdrasil-test' do
|
32
32
|
Yggdrasil.command %w{list} +
|
33
33
|
%w{--username hoge --password foo}
|
34
34
|
end
|