yggdrasil 0.0.11 → 0.0.12
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/yggdrasil/add.rb +6 -2
- data/lib/yggdrasil/check.rb +32 -33
- data/lib/yggdrasil/cleanup.rb +3 -3
- data/lib/yggdrasil/commit.rb +11 -7
- data/lib/yggdrasil/diff.rb +22 -9
- data/lib/yggdrasil/help.rb +9 -38
- data/lib/yggdrasil/init.rb +3 -3
- data/lib/yggdrasil/list.rb +8 -9
- data/lib/yggdrasil/log.rb +20 -21
- data/lib/yggdrasil/update.rb +26 -42
- data/lib/yggdrasil/version.rb +1 -1
- data/lib/yggdrasil.rb +30 -8
- data/lib/yggdrasil_common.rb +13 -4
- data/lib/yggdrasil_server/init.rb +5 -5
- data/lib/yggdrasil_server/results.rb +3 -3
- data/lib/yggdrasil_server/server.rb +3 -3
- data/spec/check_spec.rb +79 -10
- data/spec/commit_spec.rb +4 -4
- data/spec/help_spec.rb +8 -30
- data/spec/list_spec.rb +29 -7
- data/spec/log_spec.rb +4 -0
- data/spec/revert_spec.rb +34 -14
- data/spec/server_results_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- metadata +4 -8
- data/lib/yggdrasil/revert.rb +0 -53
- data/lib/yggdrasil/status.rb +0 -28
- data/spec/status_spec.rb +0 -62
data/lib/yggdrasil/add.rb
CHANGED
@@ -2,7 +2,9 @@ class Yggdrasil
|
|
2
2
|
|
3
3
|
# @param [Array] args
|
4
4
|
def add(args)
|
5
|
-
|
5
|
+
parse_options(args, {})
|
6
|
+
while (arg = @arg_paths.shift)
|
7
|
+
|
6
8
|
file_path = system3("readlink -f #{arg}").chomp
|
7
9
|
unless File.exist?(file_path)
|
8
10
|
puts "no such file: #{file_path}"
|
@@ -18,7 +20,9 @@ class Yggdrasil
|
|
18
20
|
else
|
19
21
|
Dir.mkdir mirror_path
|
20
22
|
end
|
21
|
-
|
23
|
+
cmd = "#@svn add #{mirror_path}"
|
24
|
+
cmd += ' ' + @arg_options.join(' ') if @arg_options.size != 0
|
25
|
+
puts system3(cmd)
|
22
26
|
end
|
23
27
|
end
|
24
28
|
end
|
data/lib/yggdrasil/check.rb
CHANGED
@@ -4,54 +4,53 @@ require 'stringio'
|
|
4
4
|
class Yggdrasil
|
5
5
|
|
6
6
|
def check(args)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
if
|
11
|
-
|
7
|
+
parse_options(args,
|
8
|
+
{'--username'=>:username, '--password'=>:password,
|
9
|
+
'--non-interactive'=>:non_interactive?})
|
10
|
+
@arg_paths << '/' if @arg_paths.size == 0
|
11
|
+
get_user_pass_if_need_to_read_repo
|
12
|
+
|
13
|
+
exec_checker
|
14
|
+
|
15
|
+
updates = sync_mirror
|
16
|
+
matched_updates = select_updates(updates, @arg_paths)
|
17
|
+
if matched_updates.size == 0
|
18
|
+
puts 'no files.'
|
19
|
+
return
|
12
20
|
end
|
13
21
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
if File.file?(file) && File.executable?(file)
|
20
|
-
if file =~ %r{^#@checker_dir(.*)$}
|
21
|
-
file_body = $1
|
22
|
-
system3("#{file} > #@checker_result_dir#{file_body}")
|
23
|
-
end
|
24
|
-
end
|
22
|
+
confirmed_updates = confirm_updates(matched_updates) do |relative_path|
|
23
|
+
FileUtils.cd @mirror_dir do
|
24
|
+
cmd = "#@svn diff --no-auth-cache --non-interactive #{relative_path}"
|
25
|
+
cmd += username_password_options_to_read_repo
|
26
|
+
puts system3(cmd)
|
25
27
|
end
|
26
28
|
end
|
29
|
+
return unless confirmed_updates
|
30
|
+
return if confirmed_updates.size == 0
|
27
31
|
|
28
|
-
# add checker result
|
29
|
-
result_files = Array.new
|
30
|
-
Find.find(@checker_result_dir) {|f| result_files << f}
|
31
|
-
stdout = $stdout
|
32
|
-
$stdout = StringIO.new
|
33
|
-
add result_files
|
34
|
-
$stdout = stdout
|
35
|
-
|
36
|
-
get_user_pass_if_need_to_read_repo
|
37
|
-
sync_mirror
|
38
|
-
|
39
|
-
cmd_arg = "#@svn status -qu --no-auth-cache --non-interactive"
|
40
|
-
cmd_arg += username_password_options_to_read_repo
|
41
32
|
check_result = String.new
|
42
33
|
FileUtils.cd @mirror_dir do
|
43
|
-
|
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)
|
44
38
|
end
|
45
39
|
check_result.gsub!(/^Status against revision:.*\n/, '')
|
46
40
|
check_result.chomp!
|
41
|
+
result_array = check_result.split("\n")
|
42
|
+
result_array.sort!.uniq!
|
43
|
+
check_result = result_array.join("\n")
|
44
|
+
|
47
45
|
if check_result == ''
|
48
46
|
puts 'yggdrasil check: OK!'
|
49
47
|
else
|
50
48
|
check_result << "\n\n"
|
51
|
-
|
52
|
-
|
49
|
+
cmd = "#@svn diff --no-auth-cache --non-interactive"
|
50
|
+
cmd += username_password_options_to_read_repo
|
51
|
+
cmd += " #{confirmed_updates.join(' ')}"
|
53
52
|
FileUtils.cd @mirror_dir do
|
54
|
-
check_result << system3(
|
53
|
+
check_result << system3(cmd)
|
55
54
|
end
|
56
55
|
puts check_result
|
57
56
|
end
|
data/lib/yggdrasil/cleanup.rb
CHANGED
@@ -2,9 +2,9 @@ class Yggdrasil
|
|
2
2
|
|
3
3
|
# @param [Array] args
|
4
4
|
def cleanup(args)
|
5
|
-
|
6
|
-
if
|
7
|
-
error "invalid arguments: #{
|
5
|
+
parse_options(args, {'--username'=>:username, '--password'=>:password})
|
6
|
+
if @arg_options.size+@arg_paths.size != 0
|
7
|
+
error "invalid arguments: #{(@arg_options+@arg_paths).join(', ')}"
|
8
8
|
end
|
9
9
|
|
10
10
|
get_user_pass_if_need_to_read_repo
|
data/lib/yggdrasil/commit.rb
CHANGED
@@ -2,15 +2,18 @@ class Yggdrasil
|
|
2
2
|
|
3
3
|
# @param [Array] args
|
4
4
|
def commit(args)
|
5
|
-
|
5
|
+
parse_options(args,
|
6
6
|
{'--username'=>:username, '--password'=>:password,
|
7
7
|
'-m'=>:message, '--message'=>:message, '--non-interactive'=>:non_interactive?})
|
8
|
+
@arg_paths << '/' if @arg_paths.size == 0
|
8
9
|
get_user_pass_if_need_to_read_repo
|
9
10
|
|
11
|
+
exec_checker
|
12
|
+
|
10
13
|
updates = sync_mirror
|
11
|
-
matched_updates = select_updates(updates,
|
14
|
+
matched_updates = select_updates(updates, @arg_paths)
|
12
15
|
if matched_updates.size == 0
|
13
|
-
puts
|
16
|
+
puts 'no files.'
|
14
17
|
return
|
15
18
|
end
|
16
19
|
|
@@ -43,10 +46,11 @@ class Yggdrasil
|
|
43
46
|
|
44
47
|
input_user_pass
|
45
48
|
FileUtils.cd @mirror_dir do
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
49
|
+
cmd = "#@svn commit -N -m '#{@options[:message]}'"\
|
50
|
+
' --no-auth-cache --non-interactive'\
|
51
|
+
" --username '#{@options[:username]}' --password '#{@options[:password]}'"\
|
52
|
+
" #{confirmed_updates.join(' ')}"
|
53
|
+
puts system3(cmd)
|
50
54
|
end
|
51
55
|
end
|
52
56
|
end
|
data/lib/yggdrasil/diff.rb
CHANGED
@@ -2,26 +2,39 @@ class Yggdrasil
|
|
2
2
|
|
3
3
|
# @param [Array] args
|
4
4
|
def diff(args)
|
5
|
-
|
6
|
-
|
5
|
+
parse_options(args,
|
6
|
+
{'--username'=>:username, '--password'=>:password,
|
7
|
+
'-r'=>:revision, '--revision'=>:revision})
|
8
|
+
@arg_paths << '/' if @arg_paths.size == 0
|
7
9
|
|
8
10
|
get_user_pass_if_need_to_read_repo
|
11
|
+
exec_checker
|
9
12
|
sync_mirror
|
10
13
|
|
11
14
|
paths = Array.new
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
err_paths = Array.new
|
16
|
+
@arg_paths.each do |path|
|
17
|
+
if %r{^/(.*)$} =~ path
|
18
|
+
mirror_file = $1
|
19
|
+
mirror_file = '.' if mirror_file == ''
|
20
|
+
else
|
21
|
+
mirror_file = @current_dir.sub(/^\//,'') + '/' + path
|
18
22
|
end
|
23
|
+
if File.exist?(@mirror_dir+'/'+mirror_file)
|
24
|
+
paths << mirror_file
|
25
|
+
else
|
26
|
+
err_paths << mirror_file
|
27
|
+
end
|
28
|
+
end
|
29
|
+
if err_paths.size != 0
|
30
|
+
error "following files are not managed.\n"+err_paths.join("\n")
|
19
31
|
end
|
20
32
|
|
21
33
|
cmd_arg = "#@svn diff --no-auth-cache --non-interactive"
|
22
34
|
cmd_arg += username_password_options_to_read_repo
|
35
|
+
cmd_arg += ' ' + @arg_options.join(' ') if @arg_options.size != 0
|
23
36
|
cmd_arg += " -r #{@options[:revision]}" if @options.has_key?(:revision)
|
24
|
-
cmd_arg += ' '+paths.join(' ')
|
37
|
+
cmd_arg += ' ' + paths.join(' ')
|
25
38
|
FileUtils.cd @mirror_dir do
|
26
39
|
puts system3(cmd_arg)
|
27
40
|
end
|
data/lib/yggdrasil/help.rb
CHANGED
@@ -10,7 +10,7 @@ Type '#@base_cmd help <subcommand>' for help on a specific subcommand.
|
|
10
10
|
|
11
11
|
Available subcommands:
|
12
12
|
add
|
13
|
-
check (c)
|
13
|
+
check (c, status, stat, st)
|
14
14
|
cleanup
|
15
15
|
commit (ci)
|
16
16
|
diff (di)
|
@@ -18,9 +18,7 @@ Available subcommands:
|
|
18
18
|
init
|
19
19
|
list (ls)
|
20
20
|
log
|
21
|
-
revert
|
22
|
-
status (stat, st)
|
23
|
-
update
|
21
|
+
update (up, revert)
|
24
22
|
version
|
25
23
|
|
26
24
|
Yggdrasil is a subversion wrapper to manage server configurations and conditions.
|
@@ -38,9 +36,9 @@ usage #@base_cmd add [FILES...]
|
|
38
36
|
|
39
37
|
EOS
|
40
38
|
|
41
|
-
when 'check', 'c'
|
39
|
+
when 'check', 'c', 'status', 'stat', 'st' # check (c, status, stat, st)
|
42
40
|
puts <<"EOS"
|
43
|
-
check (c): check updating of managed files and the execution output of a commands.
|
41
|
+
check (c, status, stat, st): check updating of managed files and the execution output of a commands.
|
44
42
|
usage: #@base_cmd check [OPTIONS...]
|
45
43
|
|
46
44
|
This subcommand execute the executable files in ~/.yggdrasil/checker/, and
|
@@ -158,49 +156,22 @@ Valid options:
|
|
158
156
|
'BASE' base rev of item's working copy
|
159
157
|
'COMMITTED' last commit at or before BASE
|
160
158
|
'PREV' revision just before COMMITTED
|
159
|
+
-q [--quiet] : print nothing, or only summary information
|
160
|
+
-v [--verbose] : print extra information
|
161
161
|
|
162
162
|
EOS
|
163
|
-
when 'revert'
|
163
|
+
when 'update', 'up', 'revert' ##################### update (up, revert)
|
164
164
|
puts <<"EOS"
|
165
|
-
revert:
|
166
|
-
usage: #@base_cmd revert [OPTIONS...] [PATH...]
|
167
|
-
|
168
|
-
Valid options:
|
169
|
-
--username ARG : specify a username ARG
|
170
|
-
--password ARG : specify a password ARG
|
171
|
-
--non-interactive : do no interactive prompting
|
172
|
-
|
173
|
-
EOS
|
174
|
-
|
175
|
-
when 'status', 'stat', 'st' ######################### status (stat, st)
|
176
|
-
puts <<"EOS"
|
177
|
-
status (stat, st): Print the status of managed files and directories.
|
178
|
-
usage: #@base_cmd status [OPTIONS...] [PATH...]
|
179
|
-
|
180
|
-
Valid options:
|
181
|
-
--username ARG : specify a username ARG
|
182
|
-
--password ARG : specify a password ARG
|
183
|
-
|
184
|
-
EOS
|
185
|
-
when 'update' ################################################## update
|
186
|
-
puts <<"EOS"
|
187
|
-
update (up): Bring changes from the repository into the local files.
|
165
|
+
update (up, revert): Set the files to the contents of the newest repository.
|
188
166
|
usage: #@base_cmd update [OPTIONS...] [PATH...]
|
189
167
|
|
190
168
|
Valid options:
|
191
169
|
--username ARG : specify a username ARG
|
192
170
|
--password ARG : specify a password ARG
|
193
|
-
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range)
|
194
|
-
A revision argument can be one of:
|
195
|
-
NUMBER revision number
|
196
|
-
'{' DATE '}' revision at start of the date
|
197
|
-
'HEAD' latest in repository
|
198
|
-
'BASE' base rev of item's working copy
|
199
|
-
'COMMITTED' last commit at or before BASE
|
200
|
-
'PREV' revision just before COMMITTED
|
201
171
|
--non-interactive : do no interactive prompting
|
202
172
|
|
203
173
|
EOS
|
174
|
+
|
204
175
|
when 'version', '--version', '-v' ######################## version (-v)
|
205
176
|
puts <<"EOS"
|
206
177
|
version: See the program version
|
data/lib/yggdrasil/init.rb
CHANGED
@@ -5,7 +5,7 @@ class Yggdrasil
|
|
5
5
|
# @param [Array] args
|
6
6
|
def init(args)
|
7
7
|
|
8
|
-
|
8
|
+
parse_options(args,
|
9
9
|
{'--username'=>:username, '--password'=>:password,
|
10
10
|
'--repo'=>:repo, '--parents'=>:parents?,
|
11
11
|
'--non-interactive'=>:non_interactive?,
|
@@ -13,8 +13,8 @@ class Yggdrasil
|
|
13
13
|
@options[:ro_username] = @options[:username] if @options.has_key?(:username)
|
14
14
|
@options[:ro_password] = @options[:password] if @options.has_key?(:password)
|
15
15
|
|
16
|
-
if
|
17
|
-
error "invalid arguments: #{
|
16
|
+
if @arg_options.size+@arg_paths.size != 0
|
17
|
+
error "invalid arguments: #{(@arg_options+@arg_paths).join(', ')}"
|
18
18
|
end
|
19
19
|
|
20
20
|
out = system3 'which svn'
|
data/lib/yggdrasil/list.rb
CHANGED
@@ -2,21 +2,20 @@ class Yggdrasil
|
|
2
2
|
|
3
3
|
# @param [Array] args
|
4
4
|
def list(args)
|
5
|
-
|
5
|
+
parse_options(args,
|
6
6
|
{'--username'=>:username, '--password'=>:password,
|
7
7
|
'-r'=>:revision, '--revision'=>:revision,
|
8
8
|
'-R'=>:recursive?, '--recursive'=>:recursive?})
|
9
|
-
|
9
|
+
if @arg_paths.size == 0
|
10
|
+
@arg_paths << '/'
|
11
|
+
@options[:recursive?] = true
|
12
|
+
end
|
10
13
|
get_user_pass_if_need_to_read_repo
|
11
14
|
|
12
15
|
repos = Array.new
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
args.each do |path|
|
17
|
-
path = "#@current_dir/#{path}" unless %r{^/} =~ path
|
18
|
-
repos << @repo+path
|
19
|
-
end
|
16
|
+
@arg_paths.each do |path|
|
17
|
+
path = "#@current_dir/#{path}" unless %r{^/} =~ path
|
18
|
+
repos << @repo+path
|
20
19
|
end
|
21
20
|
|
22
21
|
cmd_arg = "#@svn list --no-auth-cache --non-interactive"
|
data/lib/yggdrasil/log.rb
CHANGED
@@ -2,44 +2,43 @@ class Yggdrasil
|
|
2
2
|
|
3
3
|
# @param [Array] args
|
4
4
|
def log(args)
|
5
|
-
|
5
|
+
parse_options(args,
|
6
6
|
{'--username'=>:username, '--password'=>:password,
|
7
7
|
'-r'=>:revision, '--revision'=>:revision})
|
8
|
+
@arg_paths << '/' if @arg_paths.size == 0
|
9
|
+
|
8
10
|
get_user_pass_if_need_to_read_repo
|
9
11
|
|
10
|
-
ext_options = Array.new
|
11
12
|
paths = Array.new
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
err_paths = Array.new
|
14
|
+
@arg_paths.each do |path|
|
15
|
+
if %r{^/(.*)$} =~ path
|
16
|
+
mirror_file = $1
|
17
|
+
mirror_file = '.' if mirror_file == ''
|
15
18
|
else
|
16
|
-
|
19
|
+
mirror_file = @current_dir.sub(/^\//,'') + '/' + path
|
17
20
|
end
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
error 'current directory is not managed.' unless File.exist?(dir)
|
23
|
-
paths << dir
|
24
|
-
else
|
25
|
-
paths.collect! do |path|
|
26
|
-
if %r{^/} =~ path
|
27
|
-
@mirror_dir + path
|
28
|
-
else
|
29
|
-
@mirror_dir + @current_dir + '/' + path
|
30
|
-
end
|
21
|
+
if File.exist?(@mirror_dir+'/'+mirror_file)
|
22
|
+
paths << mirror_file
|
23
|
+
else
|
24
|
+
err_paths << mirror_file
|
31
25
|
end
|
32
26
|
end
|
27
|
+
if err_paths.size != 0
|
28
|
+
error "following files are not managed.\n"+err_paths.join("\n")
|
29
|
+
end
|
33
30
|
|
34
31
|
cmd_arg = "#@svn log --no-auth-cache --non-interactive"
|
35
32
|
cmd_arg += username_password_options_to_read_repo
|
36
|
-
cmd_arg += ' ' +
|
33
|
+
cmd_arg += ' ' + @arg_options.join(' ') if @arg_options.size != 0
|
37
34
|
if @options.has_key?(:revision)
|
38
35
|
cmd_arg += " -r #{@options[:revision]}"
|
39
36
|
else
|
40
37
|
cmd_arg += ' -r HEAD:1'
|
41
38
|
end
|
42
39
|
cmd_arg += ' ' + paths.join(' ')
|
43
|
-
|
40
|
+
FileUtils.cd @mirror_dir do
|
41
|
+
puts system3(cmd_arg)
|
42
|
+
end
|
44
43
|
end
|
45
44
|
end
|
data/lib/yggdrasil/update.rb
CHANGED
@@ -2,66 +2,50 @@ class Yggdrasil
|
|
2
2
|
|
3
3
|
# @param [Array] args
|
4
4
|
def update(args)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
parse_options(args,
|
6
|
+
{'--username'=>:username, '--password'=>:password,
|
7
|
+
'--non-interactive'=>:non_interactive?})
|
8
|
+
@arg_paths << '/' if @arg_paths.size == 0
|
9
9
|
get_user_pass_if_need_to_read_repo
|
10
|
-
sync_mirror
|
11
10
|
|
12
|
-
updates =
|
13
|
-
|
14
|
-
cmd = "#@svn status -qu --no-auth-cache --non-interactive"
|
15
|
-
cmd += username_password_options_to_read_repo
|
16
|
-
out = system3(cmd)
|
17
|
-
out.split(/\n/).each do |line|
|
18
|
-
if /^.*\*.*\s(\S+)\s*$/ =~ line
|
19
|
-
updates << ['', $1]
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
matched_updates = select_updates(updates, target_paths)
|
11
|
+
updates = sync_mirror
|
12
|
+
matched_updates = select_updates(updates, @arg_paths)
|
25
13
|
if matched_updates.size == 0
|
26
|
-
puts
|
14
|
+
puts 'no files.'
|
27
15
|
return
|
28
16
|
end
|
29
17
|
|
30
18
|
confirmed_updates = confirm_updates(matched_updates) do |relative_path|
|
31
19
|
FileUtils.cd @mirror_dir do
|
32
|
-
cmd = "#@svn diff"
|
33
|
-
cmd += ' --no-auth-cache --non-interactive'
|
20
|
+
cmd = "#@svn diff --no-auth-cache --non-interactive #{relative_path}"
|
34
21
|
cmd += username_password_options_to_read_repo
|
35
|
-
if @options.has_key?(:revision)
|
36
|
-
cmd += " --old=#{relative_path} --new=#{relative_path}@#{@options[:revision]}"
|
37
|
-
else
|
38
|
-
cmd += " --old=#{relative_path} --new=#{relative_path}@HEAD"
|
39
|
-
end
|
40
22
|
puts system3(cmd)
|
41
23
|
end
|
42
24
|
end
|
43
|
-
# res == 'Y' or --non-interactive
|
44
|
-
|
45
25
|
return unless confirmed_updates
|
46
|
-
return if confirmed_updates == 0
|
26
|
+
return if confirmed_updates.size == 0
|
47
27
|
|
48
|
-
cmd_arg = "#@svn update --no-auth-cache --non-interactive"
|
49
|
-
cmd_arg += username_password_options_to_read_repo
|
50
|
-
if @options.has_key?(:revision)
|
51
|
-
cmd_arg += " -r #{@options[:revision]}"
|
52
|
-
else
|
53
|
-
cmd_arg += ' -r HEAD'
|
54
|
-
end
|
55
|
-
cmd_arg += ' ' + confirmed_updates.join(' ')
|
56
28
|
FileUtils.cd @mirror_dir do
|
57
|
-
|
29
|
+
cmd = "#@svn revert #{confirmed_updates.reverse.join(' ')}"
|
30
|
+
cmd += username_password_options_to_read_repo
|
31
|
+
system3 cmd
|
32
|
+
|
33
|
+
# make ls hash
|
34
|
+
cmd = "#@svn ls -R #@repo --no-auth-cache --non-interactive"
|
35
|
+
cmd += username_password_options_to_read_repo
|
36
|
+
out = system3(cmd)
|
37
|
+
|
38
|
+
ls_hash = Hash.new
|
39
|
+
out.split(/\n/).each {|relative| ls_hash[relative]=true}
|
58
40
|
|
59
41
|
# reflect mirror to real file
|
60
|
-
confirmed_updates.each do |
|
61
|
-
if
|
62
|
-
|
42
|
+
confirmed_updates.each do |file|
|
43
|
+
if ls_hash.has_key?(file)
|
44
|
+
if File.file?("#@mirror_dir/#{file}")
|
45
|
+
FileUtils.copy_file "#@mirror_dir/#{file}", "/#{file}"
|
46
|
+
end
|
63
47
|
else
|
64
|
-
system3 "rm -rf
|
48
|
+
system3 "rm -rf #{@mirror_dir + '/' + file}"
|
65
49
|
end
|
66
50
|
end
|
67
51
|
end
|
data/lib/yggdrasil/version.rb
CHANGED
data/lib/yggdrasil.rb
CHANGED
@@ -11,9 +11,7 @@ require 'yggdrasil/cleanup'
|
|
11
11
|
require 'yggdrasil/diff'
|
12
12
|
require 'yggdrasil/list'
|
13
13
|
require 'yggdrasil/log'
|
14
|
-
require 'yggdrasil/status'
|
15
14
|
require 'yggdrasil/update'
|
16
|
-
require 'yggdrasil/revert'
|
17
15
|
require 'yggdrasil/check'
|
18
16
|
|
19
17
|
class Yggdrasil
|
@@ -29,7 +27,7 @@ class Yggdrasil
|
|
29
27
|
case args[0]
|
30
28
|
when 'add'
|
31
29
|
new.add(args[1..-1])
|
32
|
-
when 'check', 'c'
|
30
|
+
when 'check', 'c', 'status', 'stat', 'st'
|
33
31
|
new.check(args[1..-1])
|
34
32
|
when 'cleanup'
|
35
33
|
new.cleanup(args[1..-1])
|
@@ -45,11 +43,7 @@ class Yggdrasil
|
|
45
43
|
new.list(args[1..-1])
|
46
44
|
when 'log'
|
47
45
|
new.log(args[1..-1])
|
48
|
-
when 'revert'
|
49
|
-
new.revert(args[1..-1])
|
50
|
-
when 'status', 'stat', 'st'
|
51
|
-
new.status(args[1..-1])
|
52
|
-
when 'update'
|
46
|
+
when 'update', 'up', 'revert'
|
53
47
|
new.update(args[1..-1])
|
54
48
|
when 'version', '--version', '-v'
|
55
49
|
new(false).version
|
@@ -84,6 +78,9 @@ class Yggdrasil
|
|
84
78
|
def sync_mirror
|
85
79
|
updates = Array.new
|
86
80
|
FileUtils.cd @mirror_dir do
|
81
|
+
cmd = "#@svn update --no-auth-cache --non-interactive"
|
82
|
+
cmd += username_password_options_to_read_repo
|
83
|
+
system3(cmd)
|
87
84
|
cmd = "#@svn ls #@repo -R --no-auth-cache --non-interactive"
|
88
85
|
cmd += username_password_options_to_read_repo
|
89
86
|
out = system3(cmd)
|
@@ -164,6 +161,7 @@ class Yggdrasil
|
|
164
161
|
end
|
165
162
|
print 'OK? [Y|n|<num to diff>]:'
|
166
163
|
res = $stdin.gets
|
164
|
+
puts
|
167
165
|
return nil unless res
|
168
166
|
res.chomp!
|
169
167
|
return nil if res == 'n'
|
@@ -230,4 +228,28 @@ class Yggdrasil
|
|
230
228
|
error "invalid host:port '#{@options[:server]}'"
|
231
229
|
end
|
232
230
|
end
|
231
|
+
|
232
|
+
def exec_checker
|
233
|
+
# execute checker
|
234
|
+
`rm -rf #@checker_result_dir`
|
235
|
+
Dir.mkdir @checker_result_dir, 0755
|
236
|
+
if File.exist?(@checker_dir)
|
237
|
+
Find.find(@checker_dir) do |file|
|
238
|
+
if File.file?(file) && File.executable?(file)
|
239
|
+
if file =~ %r{^#@checker_dir(.*)$}
|
240
|
+
file_body = $1
|
241
|
+
system3("#{file} > #@checker_result_dir#{file_body}")
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
# add checker result
|
248
|
+
result_files = Array.new
|
249
|
+
Find.find(@checker_result_dir) {|f| result_files << f}
|
250
|
+
stdout = $stdout
|
251
|
+
$stdout = StringIO.new
|
252
|
+
self.class.new.add result_files
|
253
|
+
$stdout = stdout
|
254
|
+
end
|
233
255
|
end
|
data/lib/yggdrasil_common.rb
CHANGED
@@ -51,7 +51,16 @@ module YggdrasilCommon
|
|
51
51
|
end
|
52
52
|
pos += 1
|
53
53
|
end
|
54
|
-
|
54
|
+
@arg_options = Array.new
|
55
|
+
@arg_paths = Array.new
|
56
|
+
args.each do |arg|
|
57
|
+
if /^-/ =~ arg
|
58
|
+
@arg_options << arg
|
59
|
+
else
|
60
|
+
@arg_paths << arg
|
61
|
+
end
|
62
|
+
end
|
63
|
+
nil
|
55
64
|
end
|
56
65
|
|
57
66
|
def input_user_pass
|
@@ -86,11 +95,11 @@ module YggdrasilCommon
|
|
86
95
|
unless stat.success?
|
87
96
|
return nil unless err_exit
|
88
97
|
if @options[:debug?]
|
89
|
-
|
98
|
+
cmd_display = cmd
|
90
99
|
else
|
91
|
-
|
100
|
+
cmd_display = (cmd.split)[0]+' ...'
|
92
101
|
end
|
93
|
-
$stderr.puts "#@base_cmd error: command failure: #{
|
102
|
+
$stderr.puts "#@base_cmd error: command failure: #{cmd_display}"
|
94
103
|
$stderr.puts 'command output:'
|
95
104
|
$stderr.puts out
|
96
105
|
exit stat.exitstatus
|
@@ -3,11 +3,11 @@ class YggdrasilServer
|
|
3
3
|
# @param [Array] args
|
4
4
|
def init_server(args)
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
if
|
10
|
-
error "invalid arguments: #{
|
6
|
+
parse_options(args,
|
7
|
+
{'--port'=>:port, '--repo'=>:repo,
|
8
|
+
'--ro-username'=>:ro_username, '--ro-password'=>:ro_password})
|
9
|
+
if @arg_options.size+@arg_paths.size != 0
|
10
|
+
error "invalid arguments: #{(@arg_options+@arg_paths).join(', ')}"
|
11
11
|
end
|
12
12
|
|
13
13
|
if !@options.has_key?(:ro_username) && @options.has_key?(:ro_password)
|
@@ -2,10 +2,10 @@ class YggdrasilServer
|
|
2
2
|
|
3
3
|
# @param [Array] args
|
4
4
|
def results(args)
|
5
|
-
|
5
|
+
parse_options(args, {'--expire'=>:expire})
|
6
6
|
|
7
|
-
if
|
8
|
-
error "invalid arguments: #{
|
7
|
+
if @arg_options.size+@arg_paths.size != 0
|
8
|
+
error "invalid arguments: #{(@arg_options+@arg_paths).join(', ')}"
|
9
9
|
end
|
10
10
|
|
11
11
|
return unless File.exist?(@results_dir)
|