yggdrasil 0.0.12 → 0.0.13
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/yggdrasil/check.rb +46 -37
- data/lib/yggdrasil/help.rb +1 -0
- data/lib/yggdrasil/version.rb +1 -1
- data/lib/yggdrasil_server/server.rb +14 -3
- data/spec/check_spec.rb +27 -2
- data/spec/help_spec.rb +1 -0
- data/spec/server_spec.rb +13 -0
- metadata +3 -3
data/lib/yggdrasil/check.rb
CHANGED
@@ -14,56 +14,65 @@ class Yggdrasil
|
|
14
14
|
|
15
15
|
updates = sync_mirror
|
16
16
|
matched_updates = select_updates(updates, @arg_paths)
|
17
|
-
if matched_updates.size == 0
|
18
|
-
puts 'no files.'
|
19
|
-
return
|
20
|
-
end
|
21
17
|
|
22
|
-
|
18
|
+
check_result = String.new
|
19
|
+
if matched_updates.size != 0
|
20
|
+
confirmed_updates = confirm_updates(matched_updates) do |relative_path|
|
21
|
+
FileUtils.cd @mirror_dir do
|
22
|
+
cmd = "#@svn diff --no-auth-cache --non-interactive #{relative_path}"
|
23
|
+
cmd += username_password_options_to_read_repo
|
24
|
+
puts system3(cmd)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
return unless confirmed_updates
|
28
|
+
return if confirmed_updates.size == 0
|
29
|
+
|
30
|
+
############## add status information to check_result
|
23
31
|
FileUtils.cd @mirror_dir do
|
24
|
-
cmd = "#@svn
|
32
|
+
cmd = "#@svn status -quN --no-auth-cache --non-interactive"
|
25
33
|
cmd += username_password_options_to_read_repo
|
26
|
-
|
34
|
+
cmd += " #{confirmed_updates.join(' ')}"
|
35
|
+
check_result = system3(cmd)
|
27
36
|
end
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
FileUtils.cd @mirror_dir do
|
34
|
-
cmd = "#@svn status -quN --no-auth-cache --non-interactive"
|
35
|
-
cmd += username_password_options_to_read_repo
|
36
|
-
cmd += " #{confirmed_updates.join(' ')}"
|
37
|
-
check_result = system3(cmd)
|
38
|
-
end
|
39
|
-
check_result.gsub!(/^Status against revision:.*\n/, '')
|
40
|
-
check_result.chomp!
|
41
|
-
result_array = check_result.split("\n")
|
42
|
-
result_array.sort!.uniq!
|
43
|
-
check_result = result_array.join("\n")
|
44
|
-
|
45
|
-
if check_result == ''
|
46
|
-
puts 'yggdrasil check: OK!'
|
47
|
-
else
|
37
|
+
check_result.gsub!(/^Status against revision:.*\n/, '')
|
38
|
+
check_result.chomp!
|
39
|
+
result_array = check_result.split("\n")
|
40
|
+
result_array.sort!.uniq!
|
41
|
+
check_result = result_array.join("\n")
|
48
42
|
check_result << "\n\n"
|
43
|
+
|
44
|
+
############## add diff information to check_result
|
49
45
|
cmd = "#@svn diff --no-auth-cache --non-interactive"
|
50
46
|
cmd += username_password_options_to_read_repo
|
51
47
|
cmd += " #{confirmed_updates.join(' ')}"
|
52
48
|
FileUtils.cd @mirror_dir do
|
53
49
|
check_result << system3(cmd)
|
54
50
|
end
|
55
|
-
puts check_result
|
56
51
|
end
|
57
52
|
|
58
|
-
if
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
53
|
+
if @arg_paths.size == 1 && @arg_paths[0] == '/'
|
54
|
+
if /^(.+):(\d+)$/ =~ @options[:server]
|
55
|
+
host = $1
|
56
|
+
port = $2
|
57
|
+
# put check_result to server
|
58
|
+
sock = TCPSocket.open(host, port)
|
59
|
+
error "can not connect to server: #{host}:#{port}" if sock.nil?
|
60
|
+
sock.puts "put_result #{Socket.gethostname}"
|
61
|
+
sock.puts check_result
|
62
|
+
sock.close
|
63
|
+
end
|
64
|
+
if check_result == ''
|
65
|
+
puts 'Yggdrasil check: OK.'
|
66
|
+
else
|
67
|
+
puts check_result
|
68
|
+
puts "\nYggdrasil check: NG!!!"
|
69
|
+
end
|
70
|
+
else
|
71
|
+
if check_result == ''
|
72
|
+
puts 'no files.'
|
73
|
+
else
|
74
|
+
puts check_result
|
75
|
+
end
|
67
76
|
end
|
68
77
|
end
|
69
78
|
end
|
data/lib/yggdrasil/help.rb
CHANGED
@@ -119,6 +119,7 @@ Valid options:
|
|
119
119
|
--password ARG : specify a password ARG
|
120
120
|
--server ARG : specify a server address and port
|
121
121
|
e.g. 192.168.1.35:4000
|
122
|
+
see also 'yggserve help'
|
122
123
|
|
123
124
|
EOS
|
124
125
|
when 'list', 'ls' ########################################### list (ls)
|
data/lib/yggdrasil/version.rb
CHANGED
@@ -6,7 +6,10 @@ class YggdrasilServer
|
|
6
6
|
error "invalid arguments: #{(@arg_options+@arg_paths).join(', ')}"
|
7
7
|
end
|
8
8
|
|
9
|
-
|
9
|
+
ctime = Time.now
|
10
|
+
$stdout.printf "Start: yggdrasil server (port:#@port)[%04d-%02d-%02d %02d:%02d:%02d.%03d]\n",
|
11
|
+
ctime.year, ctime.month, ctime.day, ctime.hour, ctime.min, ctime.sec, (ctime.usec/1000).round
|
12
|
+
$stdout.flush
|
10
13
|
TCPServer.do_not_reverse_lookup = true
|
11
14
|
s0 = TCPServer.open(@port.to_i)
|
12
15
|
loop do
|
@@ -15,8 +18,9 @@ class YggdrasilServer
|
|
15
18
|
ctime = Time.now
|
16
19
|
if msg && msg.chomp! != MESSAGE_QUIT
|
17
20
|
msg.chomp!
|
18
|
-
printf "RCV[%04d-%02d-%02d %02d:%02d:%02d.%03d](#{sock.peeraddr[3]}): #{msg}\n",
|
21
|
+
$stdout.printf "RCV[%04d-%02d-%02d %02d:%02d:%02d.%03d](#{sock.peeraddr[3]}): #{msg}\n",
|
19
22
|
ctime.year, ctime.month, ctime.day, ctime.hour, ctime.min, ctime.sec, (ctime.usec/1000).round
|
23
|
+
$stdout.flush
|
20
24
|
msg_parts = msg.split
|
21
25
|
if msg_parts.size != 0
|
22
26
|
msg_cmd = msg_parts[0]
|
@@ -32,11 +36,18 @@ class YggdrasilServer
|
|
32
36
|
send msg_cmd, sock, msg_arg_hash
|
33
37
|
else
|
34
38
|
puts "fail: number of arguments is mismatch: #{msg}"
|
39
|
+
$stdout.flush
|
35
40
|
end
|
36
41
|
end
|
37
42
|
end
|
38
43
|
sock.close
|
39
|
-
|
44
|
+
if @options.has_key?(:debug?) && msg == MESSAGE_QUIT
|
45
|
+
ctime = Time.now
|
46
|
+
$stdout.printf "Quit: yggdrasil server (port:#@port)[%04d-%02d-%02d %02d:%02d:%02d.%03d]\n",
|
47
|
+
ctime.year, ctime.month, ctime.day, ctime.hour, ctime.min, ctime.sec, (ctime.usec/1000).round
|
48
|
+
$stdout.flush
|
49
|
+
break
|
50
|
+
end
|
40
51
|
end
|
41
52
|
s0.close # MESSAGE_QUIT
|
42
53
|
end
|
data/spec/check_spec.rb
CHANGED
@@ -95,6 +95,8 @@ Index: tmp/yggdrasil-test/.yggdrasil/checker_result/hoge
|
|
95
95
|
+++ tmp/yggdrasil-test/.yggdrasil/checker_result/hoge (revision 0)
|
96
96
|
@@ -0,0 +1 @@
|
97
97
|
+hoge
|
98
|
+
|
99
|
+
Yggdrasil check: NG!!!
|
98
100
|
EOS
|
99
101
|
end
|
100
102
|
|
@@ -127,6 +129,8 @@ Index: tmp/yggdrasil-test/.yggdrasil/checker_result/hoge
|
|
127
129
|
+++ tmp/yggdrasil-test/.yggdrasil/checker_result/hoge (working copy)
|
128
130
|
@@ -1 +0,0 @@
|
129
131
|
-hoge
|
132
|
+
|
133
|
+
Yggdrasil check: NG!!!
|
130
134
|
EOS
|
131
135
|
end
|
132
136
|
|
@@ -142,8 +146,8 @@ Committed revision 5.
|
|
142
146
|
EOS
|
143
147
|
end
|
144
148
|
|
145
|
-
it 'should record check result by yggdrasil server' do
|
146
|
-
puts "\n---- should record check result by yggdrasil server"
|
149
|
+
it 'should record check result by yggdrasil server (add)' do
|
150
|
+
puts "\n---- should record check result by yggdrasil server (add)"
|
147
151
|
|
148
152
|
prepare_environment
|
149
153
|
|
@@ -186,6 +190,10 @@ A 0 tmp/yggdrasil-test/.yggdrasil
|
|
186
190
|
A 0 tmp/yggdrasil-test/.yggdrasil/checker_result
|
187
191
|
|
188
192
|
EOS
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'should record check result by yggdrasil server (modify)' do
|
196
|
+
puts "\n---- should record check result by yggdrasil server (modify)"
|
189
197
|
|
190
198
|
`echo hoge > /tmp/yggdrasil-test/A`
|
191
199
|
Yggdrasil.command %w{add /tmp/yggdrasil-test/A}
|
@@ -195,6 +203,8 @@ EOS
|
|
195
203
|
`echo foo >> /tmp/yggdrasil-test/A`
|
196
204
|
Yggdrasil.command %w{check}, "Y\n"
|
197
205
|
|
206
|
+
files = Dir.entries('/tmp/yggdrasil-test/.yggdrasil/results')
|
207
|
+
result_files = files.select{|file| %r{^#{Socket.gethostname}} =~ file}
|
198
208
|
`cat /tmp/yggdrasil-test/.yggdrasil/results/#{result_files[0]}`.should == <<"EOS"
|
199
209
|
M 2 tmp/yggdrasil-test/A
|
200
210
|
|
@@ -206,7 +216,22 @@ Index: tmp/yggdrasil-test/A
|
|
206
216
|
hoge
|
207
217
|
+foo
|
208
218
|
EOS
|
219
|
+
end
|
220
|
+
|
221
|
+
it 'should record check result by yggdrasil server (OK)' do
|
222
|
+
puts "\n---- should record check result by yggdrasil server (OK)"
|
223
|
+
|
224
|
+
Yggdrasil.command %w{commit --username hoge --password foo} +
|
225
|
+
%w{-m HOGE --non-interactive}
|
226
|
+
|
227
|
+
Yggdrasil.command %w{check --non-interactive}
|
228
|
+
|
229
|
+
files = Dir.entries('/tmp/yggdrasil-test/.yggdrasil/results')
|
230
|
+
result_files = files.select{|file| %r{^#{Socket.gethostname}} =~ file}
|
231
|
+
`cat /tmp/yggdrasil-test/.yggdrasil/results/#{result_files[0]}`.should == "\n"
|
232
|
+
end
|
209
233
|
|
234
|
+
after(:all) do
|
210
235
|
sock = TCPSocket.open('localhost', 4000)
|
211
236
|
sock.puts('quit')
|
212
237
|
sock.close
|
data/spec/help_spec.rb
CHANGED
data/spec/server_spec.rb
CHANGED
@@ -8,6 +8,19 @@ describe YggdrasilServer, 'server' do
|
|
8
8
|
before(:all) do
|
9
9
|
puts '-------- server'
|
10
10
|
prepare_environment
|
11
|
+
|
12
|
+
sock = 0
|
13
|
+
begin
|
14
|
+
sock = TCPSocket.open('localhost', 4000)
|
15
|
+
rescue
|
16
|
+
puts 'OK. no server'
|
17
|
+
else
|
18
|
+
puts 'NG. zombie server. try quit'
|
19
|
+
sock.puts('quit')
|
20
|
+
sock.close
|
21
|
+
sleep 1
|
22
|
+
end
|
23
|
+
|
11
24
|
YggdrasilServer.command %w{init} +
|
12
25
|
%w{--port 4000} +
|
13
26
|
%w{--repo svn://localhost/tmp/yggdrasil-test/svn-repo/servers/{HOST}/} +
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yggdrasil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -116,7 +116,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
116
|
version: '0'
|
117
117
|
segments:
|
118
118
|
- 0
|
119
|
-
hash:
|
119
|
+
hash: -2008035553517272387
|
120
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
121
|
none: false
|
122
122
|
requirements:
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
version: '0'
|
126
126
|
segments:
|
127
127
|
- 0
|
128
|
-
hash:
|
128
|
+
hash: -2008035553517272387
|
129
129
|
requirements: []
|
130
130
|
rubyforge_project:
|
131
131
|
rubygems_version: 1.8.25
|