yggdrasil 0.0.18 → 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d0a852b76b256c47b03cb8831f46f042455143ff
4
+ data.tar.gz: 2e7a725be79c156d187a5a691c17bdbcc6eafd8c
5
+ SHA512:
6
+ metadata.gz: 7b1b14ec6ca4298b9d9abe9cc6983b0be6fd5f012dc233c9ee76f8a1dcedad91956676a91af60e82323cf5fbf3db308545fc43e5772e977e6d3cbba7fe6d7fae
7
+ data.tar.gz: 06a39e94184bd6d53513e6897ae45ab05b2111c3c97057d244ebdeac27e18d3d3088c7d9230903f73217618e56f07cc3ad500448afa1776b939cfbef1acb1a9e
data/lib/yggdrasil.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'socket'
2
3
 
3
4
  require 'yggdrasil_common'
4
5
 
@@ -11,7 +12,6 @@ require 'yggdrasil/cleanup'
11
12
  require 'yggdrasil/diff'
12
13
  require 'yggdrasil/list'
13
14
  require 'yggdrasil/log'
14
- require 'yggdrasil/update'
15
15
  require 'yggdrasil/check'
16
16
 
17
17
  class Yggdrasil
@@ -43,8 +43,6 @@ class Yggdrasil
43
43
  new.list(args[1..-1])
44
44
  when 'log'
45
45
  new.log(args[1..-1])
46
- when 'update', 'up', 'revert'
47
- new.update(args[1..-1])
48
46
  when 'version', '--version', '-v'
49
47
  new(false).version
50
48
  else
@@ -68,8 +66,11 @@ class Yggdrasil
68
66
  error 'need "svn" in config file' unless (@svn = configs[:svn])
69
67
  error 'need "repo" in config file' unless (@repo = configs[:repo])
70
68
  @anon_access = (configs[:anon_access] == 'read')
71
- @options ||= Hash.new
72
- @options[:server] = configs[:server] if configs.has_key?(:server)
69
+
70
+ if configs.has_key?(:server)
71
+ @server = configs[:server]
72
+ get_server_configs(@server)
73
+ end
73
74
  end
74
75
 
75
76
  protected
@@ -188,49 +189,62 @@ class Yggdrasil
188
189
  end
189
190
 
190
191
  def username_password_options_to_read_repo
191
- if @options.has_key?(:ro_password)
192
- " --username #{@options[:ro_username]} --password #{@options[:ro_password]}"
192
+ if defined?(@ro_password)
193
+ " --username #{@ro_username} --password #{@ro_password}"
193
194
  else
194
195
  ''
195
196
  end
196
197
  end
197
198
 
198
199
  def get_user_pass_if_need_to_read_repo
200
+ @username = @options[:username] if @options.has_key?(:username)
201
+ @password = @options[:password] if @options.has_key?(:password)
199
202
  unless @anon_access
200
- get_server_config if !@options.has_key?(:ro_username) && @options.has_key?(:server)
201
- input_user_pass unless @options.has_key?(:ro_password)
203
+ input_user_pass unless defined?(@ro_password)
202
204
  end
203
- @options[:ro_username] = @options[:username] if @options.has_key?(:username)
204
- @options[:ro_password] = @options[:password] if @options.has_key?(:password)
205
+ @ro_username = @username if @username
206
+ @ro_password = @password if @password
205
207
  end
206
208
 
207
- def get_server_config(need_repo = false)
208
- if /^(.+):(\d+)$/ =~ @options[:server]
209
+ def get_server_configs(host_port)
210
+ if /^(.+):(\d+)$/ =~ host_port
209
211
  host = $1
210
212
  port = $2
211
213
 
212
- if need_repo
213
- # get repo
214
- sock = TCPSocket.open(host, port)
215
- error "can not connect to server: #{host}:#{port}" if sock.nil?
216
- sock.puts 'get_repo'
217
- rcv = sock.gets
218
- error 'can not get repo from server' if rcv.nil?
219
- @options[:repo] = rcv.chomp
220
- sock.close
221
- end
222
-
223
- #get read-only username/password
214
+ # connect
224
215
  sock = TCPSocket.open(host, port)
225
216
  error "can not connect to server: #{host}:#{port}" if sock.nil?
226
- sock.puts('get_ro_id_pw')
227
- username = sock.gets
228
- unless username.nil?
229
- @options[:ro_username] = username.chomp
230
- password = sock.gets
231
- error 'can not get ro_password' if password.nil?
232
- @options[:ro_password] = password.chomp
217
+
218
+ # send GET with key string
219
+ key_str = Time.now.strftime('%H:%M:%S')
220
+ sock.puts "get_configs #{key_str}"
221
+ rcv = sock.read
222
+ error 'can not get configs from server' if rcv.nil?
223
+ msg = obfuscate(rcv, key_str).split("\n")
224
+
225
+ # repo
226
+ error 'can not get repo from server' if msg.size < 1
227
+ config_repo = @repo
228
+ server_repo = msg[0]
229
+ if server_repo =~ /\{HOST\}/
230
+ @hostname = Socket.gethostname
231
+ server_repo.gsub!(/\{HOST\}/, @hostname)
232
+ end
233
+ if server_repo =~ /\{host\}/
234
+ @hostname = Socket.gethostname.split('.')[0]
235
+ server_repo.gsub!(/\{host\}/, @hostname)
233
236
  end
237
+ if config_repo && config_repo != server_repo
238
+ error "mismatch repo config with server setting.\n" +
239
+ "config: #{config_repo}\n" +
240
+ "server: #{server_repo}"
241
+ end
242
+ @repo = server_repo
243
+ # username
244
+ @ro_username = msg[1] if msg.size >= 2
245
+ # password
246
+ @ro_password = msg[2] if msg.size >= 3
247
+
234
248
  sock.close
235
249
  else
236
250
  error "invalid host:port '#{@options[:server]}'"
data/lib/yggdrasil/add.rb CHANGED
@@ -28,7 +28,9 @@ class Yggdrasil
28
28
  end
29
29
  cmd = "#{@svn} add #{mirror_path}"
30
30
  cmd += ' ' + @arg_options.join(' ') if @arg_options.size != 0
31
- puts system3(cmd)
31
+ out = system3(cmd)
32
+ out.gsub!(/ #{@mirror_dir}/, ' ')
33
+ puts out
32
34
  end
33
35
  end
34
36
  end
@@ -58,13 +58,15 @@ class Yggdrasil
58
58
  end
59
59
 
60
60
  if @arg_paths.size == 1 && @arg_paths[0] == '/'
61
- if /^(.+):(\d+)$/ =~ @options[:server]
61
+ if /^(.+):(\d+)$/ =~ @server
62
62
  host = $1
63
63
  port = $2
64
+ error 'no hostname' unless defined?(@hostname)
65
+
64
66
  # put check_result to server
65
67
  sock = TCPSocket.open(host, port)
66
68
  error "can not connect to server: #{host}:#{port}" if sock.nil?
67
- sock.puts "put_result #{Socket.gethostname}"
69
+ sock.puts "put_result #{@hostname}"
68
70
  sock.puts check_result
69
71
  sock.close
70
72
  end
@@ -45,9 +45,9 @@ class Yggdrasil
45
45
 
46
46
  input_user_pass
47
47
  FileUtils.cd @mirror_dir do
48
- cmd = "#{@svn} commit -m '#{@options[:message]}'"\
48
+ cmd = "#{@svn} commit -m \"#{@options[:message].gsub('"', '\"')}\""\
49
49
  ' --no-auth-cache --non-interactive'\
50
- " --username '#{@options[:username]}' --password '#{@options[:password]}'"\
50
+ " --username '#{@username}' --password '#{@password}'"\
51
51
  " #{confirmed_updates.join(' ')}"
52
52
  puts system3(cmd)
53
53
  end
@@ -18,7 +18,6 @@ Available subcommands:
18
18
  init
19
19
  list (ls)
20
20
  log
21
- update (up, revert)
22
21
  version
23
22
 
24
23
  Yggdrasil is a subversion wrapper to manage server configurations and conditions.
@@ -161,18 +160,6 @@ Valid options:
161
160
  -q [--quiet] : print nothing, or only summary information
162
161
  -v [--verbose] : print extra information
163
162
 
164
- EOS
165
- when 'update', 'up', 'revert' ##################### update (up, revert)
166
- puts <<"EOS"
167
- update (up, revert): Set the files to the contents of the newest repository.
168
- usage: #{@base_cmd} update [OPTIONS...] [PATH...]
169
-
170
- Valid options:
171
- --username ARG : specify a username ARG
172
- --password ARG : specify a password ARG
173
- --non-interactive : do no interactive prompting
174
- -r [--revision] ARG : revision number
175
-
176
163
  EOS
177
164
 
178
165
  when 'version', '--version', '-v' ######################## version (-v)
@@ -10,8 +10,8 @@ class Yggdrasil
10
10
  '--repo'=>:repo, '--parents'=>:parents?,
11
11
  '--non-interactive'=>:non_interactive?,
12
12
  '--force'=>:force?, '--server'=>:server })
13
- @options[:ro_username] = @options[:username] if @options.has_key?(:username)
14
- @options[:ro_password] = @options[:password] if @options.has_key?(:password)
13
+ @ro_username = @username = @options[:username] if @options.has_key?(:username)
14
+ @ro_password = @password = @options[:password] if @options.has_key?(:password)
15
15
 
16
16
  if @arg_options.size+@arg_paths.size != 0
17
17
  error "invalid arguments: #{(@arg_options+@arg_paths).join(', ')}"
@@ -43,28 +43,26 @@ class Yggdrasil
43
43
  end
44
44
  end
45
45
 
46
- get_server_config(true) if @options.has_key?(:server)
46
+ @repo = @options[:repo] if @options.has_key?(:repo)
47
+ get_server_configs(@options[:server]) if @options.has_key?(:server)
48
+ init_get_repo_interactive unless defined?(@repo)
47
49
 
48
- init_get_repo_interactive unless @options.has_key?(:repo)
49
-
50
- @options[:repo].chomp!
51
- @options[:repo].chomp!('/')
52
- @options[:repo].gsub!(/\{HOST\}/, Socket.gethostname)
53
- @options[:repo].gsub!(/\{host\}/, Socket.gethostname.split('.')[0])
54
- if @options[:repo] == 'private'
50
+ @repo.chomp!
51
+ @repo.chomp!('/')
52
+ if @repo == 'private'
55
53
  Dir.mkdir @config_dir, 0755 unless File.exist?(@config_dir)
56
54
  repo_dir = "#{@config_dir}/private_repo"
57
55
  system3 "svnadmin create #{repo_dir}"
58
- @options[:repo] = "file://#{repo_dir}"
56
+ @repo = "file://#{repo_dir}"
59
57
  end
60
58
 
61
59
  puts 'check SVN access...'
62
- if @options.has_key?(:ro_username)
60
+ if defined?(@ro_username)
63
61
  anon_access = false
64
62
  else
65
63
  anon_access = true
66
64
  end
67
- url_parts = @options[:repo].split('/')
65
+ url_parts = @repo.split('/')
68
66
  url_parts_num = url_parts.size
69
67
  url = ''
70
68
  loop do
@@ -74,7 +72,7 @@ class Yggdrasil
74
72
  url_parts_num = url_parts.size
75
73
  get_user_pass_if_need_to_read_repo
76
74
  else
77
- error "can not access to '#{@options[:repo]}'."
75
+ error "can not access to '#{@repo}'."
78
76
  end
79
77
  end
80
78
  puts "url_parts_num=#{url_parts_num}" if @options[:debug?]
@@ -111,7 +109,7 @@ class Yggdrasil
111
109
  input_user_pass
112
110
  `rm -rf #{@mirror_dir}`
113
111
  system3 "#{svn} checkout -N --no-auth-cache --non-interactive" +
114
- " --username '#{@options[:ro_username]}' --password '#{@options[:ro_password]}'" +
112
+ " --username '#{@ro_username}' --password '#{@ro_password}'" +
115
113
  " #{url_parts[0...url_parts_num].join('/')} #{@mirror_dir}"
116
114
  add_paths = Array.new
117
115
  path = @mirror_dir
@@ -125,7 +123,7 @@ class Yggdrasil
125
123
  url_parts_num += 1
126
124
  end
127
125
  system3 "#{svn} commit -m 'yggdrasil init' --no-auth-cache --non-interactive" +
128
- " --username '#{@options[:username]}' --password '#{@options[:password]}'" +
126
+ " --username '#{@username}' --password '#{@password}'" +
129
127
  ' ' + add_paths.join(' ')
130
128
  system3 "rm -rf #{@mirror_dir}"
131
129
  end
@@ -135,15 +133,16 @@ class Yggdrasil
135
133
  f.puts "path=#{ENV['PATH']}\n"\
136
134
  "svn=#{svn}\n"\
137
135
  "svn_version=#{svn_version}\n"\
138
- "repo=#{@options[:repo]}\n"\
136
+ "repo=#{@repo}\n"\
139
137
  "anon-access=#{anon_access ? 'read' : 'none'}\n"
138
+
140
139
  f.puts "server=#{@options[:server]}\n" if @options.has_key?(:server)
141
140
  end
142
141
 
143
142
  # make mirror dir
144
143
  `rm -rf #{@mirror_dir}`
145
- cmd = "#{svn} checkout --no-auth-cache --non-interactive #{@options[:repo]} #{@mirror_dir}"
146
- cmd += " --username '#{@options[:ro_username]}' --password '#{@options[:ro_password]}'" unless anon_access
144
+ cmd = "#{svn} checkout --no-auth-cache --non-interactive #{@repo} #{@mirror_dir}"
145
+ cmd += " --username '#{@ro_username}' --password '#{@ro_password}'" unless anon_access
147
146
  system3 cmd
148
147
 
149
148
  # make checker directory
@@ -159,7 +158,7 @@ class Yggdrasil
159
158
  error 'can not input svn repo URL' unless input
160
159
  puts
161
160
  if %r{^(http://|https://|file://|svn://|private)} =~ input
162
- @options[:repo] = input
161
+ @repo = input
163
162
  break
164
163
  end
165
164
 
@@ -1,5 +1,6 @@
1
1
  class Yggdrasil
2
- VERSION = '0.0.18'
2
+ VERSION = '0.1.0'
3
+
3
4
 
4
5
  def version
5
6
  puts <<"EOS"
@@ -64,16 +64,16 @@ module YggdrasilCommon
64
64
  end
65
65
 
66
66
  def input_user_pass
67
- until @options.has_key?(:username) do
67
+ until defined?(@username)
68
68
  error 'Can\'t get username or password' if @options.has_key?(:non_interactive?)
69
69
  print 'Input svn username: '
70
70
  input = $stdin.gets
71
71
  error 'can not input username' unless input
72
72
  input.chomp!
73
73
  return if input.size == 0
74
- @options[:username] = @options[:ro_username] = input
74
+ @username = @ro_username = input
75
75
  end
76
- until @options.has_key?(:password) do
76
+ until defined?(@password)
77
77
  error 'Can\'t get username or password' if @options.has_key?(:non_interactive?)
78
78
  print 'Input svn password: '
79
79
  #input = `sh -c 'read -s hoge;echo $hoge'`
@@ -83,7 +83,7 @@ module YggdrasilCommon
83
83
  puts
84
84
  error 'can not input password' unless input
85
85
  input.chomp!
86
- @options[:password] = @options[:ro_password] = input
86
+ @password = @ro_password = input
87
87
  end
88
88
  end
89
89
 
@@ -113,4 +113,32 @@ module YggdrasilCommon
113
113
  $stderr.puts
114
114
  exit 1
115
115
  end
116
+
117
+ def obfuscate(src_str, key_str)
118
+ seed = [0,0,0,0]
119
+ # make seed
120
+ (0...key_str.size).each do |i|
121
+ seed[3] = (seed[3]^key_str[i].ord)
122
+ seed = my_rand(seed)
123
+ end
124
+
125
+ # puts "seed = #{seed.inspect}"
126
+ res = String.new
127
+ (0...src_str.size).each do |i|
128
+ seed = my_rand(seed)
129
+ res += (src_str[i].ord ^ (seed[3] & 0xFF)).chr
130
+ # printf "c[%03d]:0x%02X->0x%02X (0x%02X)\n",i,src_str[i].ord,res[i].ord, seed[3] & 0xFF
131
+ end
132
+
133
+ res
134
+ end
135
+
136
+ def my_rand(seed)
137
+ t = (seed[0]^(seed[0]<<11))
138
+ seed[0] = seed[1]
139
+ seed[1] = seed[2]
140
+ seed[2] = seed[3]
141
+ seed[3] = (seed[3]^(seed[3]>>19))^(t^(t>>8))
142
+ seed
143
+ end
116
144
  end
@@ -8,6 +8,7 @@ require 'yggdrasil_server/init'
8
8
  require 'yggdrasil_server/server'
9
9
  require 'yggdrasil_server/results'
10
10
 
11
+ require 'yggdrasil_server/get_configs'
11
12
  require 'yggdrasil_server/get_repo'
12
13
  require 'yggdrasil_server/get_ro_id_pw'
13
14
  require 'yggdrasil_server/put_result'
@@ -15,6 +16,7 @@ require 'yggdrasil_server/put_result'
15
16
  class YggdrasilServer
16
17
  MESSAGE_QUIT = 'quit'
17
18
  MESSAGES = {
19
+ :get_configs => [:key_str],
18
20
  :get_repo => [],
19
21
  :get_ro_id_pw => [],
20
22
  :put_result => [:hostname],
@@ -0,0 +1,11 @@
1
+ class YggdrasilServer
2
+ def get_configs(sock, arg_hash)
3
+ msg = @repo + "\n"
4
+ if @ro_username
5
+ msg += @ro_username + "\n"
6
+ msg += @ro_password + "\n"
7
+ end
8
+ sock.write obfuscate(msg, arg_hash[:key_str])
9
+ arg_hash
10
+ end
11
+ end
@@ -54,7 +54,7 @@ usage: #{@base_cmd} init [OPTIONS...]
54
54
  Valid options:
55
55
  --port ARG : specify a TCP port number ARG
56
56
  --repo ARG : URL of subversion repository
57
- ARG can contain {HOST} or a {host}
57
+ ARG must contain {HOST} or {host}
58
58
  {HOST} is replaced by client hostname with domain
59
59
  {host} is replaced by client hostname without domain
60
60
  e.g. svn://192.168.3.5/servers/{host}/ygg
@@ -13,6 +13,8 @@ class YggdrasilServer
13
13
  if !@options.has_key?(:ro_username) && @options.has_key?(:ro_password)
14
14
  error '--ro-password option need --ro-username, too.'
15
15
  end
16
+ @ro_username = @options[:ro_username] if @options.has_key?(:ro_username)
17
+ @ro_password = @options[:ro_password] if @options.has_key?(:ro_password)
16
18
 
17
19
  until @options.has_key?(:port)
18
20
  print 'Input tcp port number: '
@@ -40,8 +42,12 @@ class YggdrasilServer
40
42
  end
41
43
  @options[:repo].chomp!
42
44
  @options[:repo].chomp!('/')
45
+ unless @options[:repo] =~ /\{HOST\}/ || @options[:repo] =~ /\{host\}/
46
+ error 'REPO must contain {HOST} or {host}'
47
+ end
48
+
43
49
 
44
- unless @options.has_key?(:ro_password)
50
+ unless defined?(@ro_password)
45
51
  puts 'Input read-only username/password (clients use this to read repo).'
46
52
  puts 'ATTENTION! username/password are stored to disk unencrypted!'
47
53
  input_user_pass
@@ -52,9 +58,9 @@ class YggdrasilServer
52
58
  File.open(@server_config_file, 'w') do |f|
53
59
  f.write "port=#{@options[:port]}\n"\
54
60
  "repo=#{@options[:repo]}\n"
55
- if @options.has_key?(:ro_password)
56
- f.write "ro_username=#{@options[:ro_username]}\n"\
57
- "ro_password=#{@options[:ro_password]}\n"
61
+ if defined?(@ro_password)
62
+ f.write "ro_username=#{@ro_username}\n"\
63
+ "ro_password=#{@ro_password}\n"
58
64
  end
59
65
  end
60
66
  end
@@ -10,17 +10,41 @@ class YggdrasilServer
10
10
  error "invalid arguments: #{(@arg_options+@arg_paths).join(', ')}"
11
11
  end
12
12
 
13
- return unless File.exist?(@results_dir)
13
+ error 'NO results directory' unless File.exist?(@results_dir)
14
+
15
+ repo_base = @repo
16
+ repo_base.gsub!(/\{HOST\}.*$/,'') if @repo =~ /\{HOST\}/
17
+ repo_base.gsub!(/\{host\}.*$/,'') if @repo =~ /\{host\}/
18
+
19
+ cmd = "svn ls #{repo_base} --no-auth-cache --non-interactive"
20
+ cmd += " --username #{@ro_username} --password #{@ro_password}" if @ro_username
21
+ out = system3(cmd)
22
+ repo_hosts = Hash.new
23
+ out.split(/\n/).each do |host|
24
+ next if host =~ /^[_\.]/
25
+ repo_hosts[host.gsub(/\/$/, '')] = true
26
+ end
27
+
14
28
  files = Dir.entries(@results_dir)
15
29
  alert = false
16
30
  files.each do |file|
17
31
  next if /^\./ =~ file
18
32
  absolute = "#{@results_dir}/#{file}"
33
+ host = file.gsub(/_[^_]+$/,'')
34
+ if repo_hosts.has_key?(host)
35
+ repo_hosts.delete host
36
+ else
37
+ # There is no host in the REPO
38
+ puts "Notice: delete result file (#{file})"
39
+ puts
40
+ File.unlink absolute # delete result file
41
+ next
42
+ end
19
43
  if @options.has_key?(:expire)
20
44
  stat = File.stat(absolute)
21
45
  if stat.mtime < (Time.now - @options[:expire].to_i * 60)
22
46
  alert = true
23
- puts "######## #{file}: last check is too old: #{stat.mtime.to_s}"
47
+ puts "######## Expired: #{file} (#{stat.mtime.to_s})"
24
48
  puts
25
49
  next
26
50
  end
@@ -29,10 +53,18 @@ class YggdrasilServer
29
53
  buf = NKF::nkf('-wm0', buf)
30
54
  if buf.gsub(/\s*\n/m, '') != ''
31
55
  alert = true
32
- puts "######## #{file} Mismatch:"
56
+ puts "######## Difference: #{file}"
33
57
  puts buf
34
58
  end
35
59
  end
60
+
61
+ repo_hosts.each do |k,v|
62
+ if v
63
+ alert = true
64
+ puts "######## No check result: #{k}"
65
+ puts
66
+ end
67
+ end
36
68
  exit 1 if alert
37
69
  end
38
70
  end
data/spec/add_spec.rb CHANGED
@@ -18,10 +18,20 @@ describe Yggdrasil, 'add' do
18
18
 
19
19
  it 'should success: add exist files (relative)' do
20
20
  puts '---- should success: add exist files'
21
- Yggdrasil.command %w{add Gemfile /etc/fstab}
21
+ out = catch_out do
22
+ Yggdrasil.command %w{add Gemfile /etc/fstab}
23
+ end
24
+ out.should == <<"EOS"
25
+ A /home
26
+ A /home/kusu
27
+ A /home/kusu/work
28
+ A /home/kusu/work/yggdrasil
29
+ A /home/kusu/work/yggdrasil/Gemfile
30
+ A /etc
31
+ A /etc/fstab
32
+ EOS
33
+
22
34
  File.exist?("/tmp/yggdrasil-test/.yggdrasil/mirror#{`readlink -f Gemfile`.chomp}").should be_true
23
- end
24
- it 'should success: add exist files (absolute)' do
25
35
  File.exist?("/tmp/yggdrasil-test/.yggdrasil/mirror#{`readlink -f /etc/fstab`.chomp}").should be_true
26
36
  end
27
37
  end
data/spec/check_spec.rb CHANGED
@@ -96,7 +96,6 @@ EOS
96
96
 
97
97
  it 'should execute checker and svn add the result' do
98
98
  puts "\n---- should execute checker and svn add the result"
99
- `rm -f /tmp/yggdrasil-test/.yggdrasil/checker/gem_list`
100
99
  `echo 'echo hoge' > /tmp/yggdrasil-test/.yggdrasil/checker/hoge`
101
100
  `chmod +x /tmp/yggdrasil-test/.yggdrasil/checker/hoge`
102
101
 
@@ -285,6 +284,22 @@ EOS
285
284
  `cat /tmp/yggdrasil-test/.yggdrasil/results/#{result_files[0]}`.should == "\n"
286
285
  end
287
286
 
287
+ it 'should ERROR if repo config mismatch' do
288
+ puts "\n---- should ERROR if repo config mismatch"
289
+
290
+ `echo repo=hoge.hoge.com >> /tmp/yggdrasil-test/.yggdrasil/config`
291
+
292
+ err = catch_err do
293
+ lambda{Yggdrasil.command(%w{check --non-interactive})}.should raise_error(SystemExit)
294
+ end
295
+ err.should == <<"EOS"
296
+ rspec error: mismatch repo config with server setting.
297
+ config: hoge.hoge.com
298
+ server: svn://localhost/tmp/yggdrasil-test/svn-repo/servers/yggdrasil-dev.kusu.myhome.cx
299
+
300
+ EOS
301
+ end
302
+
288
303
  it 'should recover delete flag' do
289
304
  pending 'under construction...'
290
305
  puts "\n---- should recover delete flag"
data/spec/commit_spec.rb CHANGED
@@ -288,4 +288,41 @@ Committed revision 14.
288
288
  EOS
289
289
  end
290
290
 
291
+ it 'should commit with quote character comment' do
292
+ puts '---- should commit with quote character comment'
293
+ `echo A >> /tmp/yggdrasil-test/A`
294
+
295
+ out = catch_out do
296
+ Yggdrasil.command %w{commit --debug} +
297
+ %w{--username hoge --password foo} +
298
+ %w{-m} + ["with quote<'>"],
299
+ "Y\n"
300
+ end
301
+ out.should == <<EOS
302
+
303
+ 0:M tmp/yggdrasil-test/A
304
+ 1:M tmp/yggdrasil-test/B
305
+ 2:M tmp/yggdrasil-test/c/A
306
+ OK? [Y|n|<num to diff>]:#{' '}
307
+ Sending tmp/yggdrasil-test/A
308
+ Sending tmp/yggdrasil-test/B
309
+ Sending tmp/yggdrasil-test/c/A
310
+ Transmitting file data ...
311
+ Committed revision 15.
312
+ EOS
313
+
314
+ out = catch_out do
315
+ Yggdrasil.command %w{log -r HEAD --username hoge --password foo}
316
+ end
317
+ out.gsub!(%r{20..-..-.. .*20..\)}, '')
318
+ out.should == <<EOS
319
+ ------------------------------------------------------------------------
320
+ r15 | hoge | | 1 line
321
+
322
+ with quote<'>
323
+ ------------------------------------------------------------------------
324
+ EOS
325
+
326
+ end
327
+
291
328
  end
data/spec/help_spec.rb CHANGED
@@ -18,7 +18,6 @@ Available subcommands:
18
18
  init
19
19
  list (ls)
20
20
  log
21
- update (up, revert)
22
21
  version
23
22
 
24
23
  Yggdrasil is a subversion wrapper to manage server configurations and conditions.
@@ -50,12 +49,12 @@ EOS
50
49
  out.should == show_subcommands
51
50
  end
52
51
 
53
- it 'should be unknown subcommand on "hoge"' do
54
- puts '---- should be unknown subcommand on "hoge"'
52
+ it 'should be unknown subcommand on "revert"' do
53
+ puts '---- should be unknown subcommand on "revert"'
55
54
  err = catch_err do
56
- lambda{Yggdrasil.command(%w{hoge})}.should raise_error(SystemExit)
55
+ lambda{Yggdrasil.command(%w{revert})}.should raise_error(SystemExit)
57
56
  end
58
- err.should == "Unknown subcommand: 'hoge'\n"
57
+ err.should == "Unknown subcommand: 'revert'\n"
59
58
  end
60
59
 
61
60
  help_help = <<"EOS"
@@ -218,38 +217,6 @@ Valid options:
218
217
  -q [--quiet] : print nothing, or only summary information
219
218
  -v [--verbose] : print extra information
220
219
 
221
- EOS
222
- end
223
-
224
- it 'should show help of update' do
225
- puts '---- should show help of update'
226
- out = catch_out{Yggdrasil.command %w{help update}}
227
- out.should == <<"EOS"
228
- update (up, revert): Set the files to the contents of the newest repository.
229
- usage: #{File.basename($0)} update [OPTIONS...] [PATH...]
230
-
231
- Valid options:
232
- --username ARG : specify a username ARG
233
- --password ARG : specify a password ARG
234
- --non-interactive : do no interactive prompting
235
- -r [--revision] ARG : revision number
236
-
237
- EOS
238
- end
239
-
240
- it 'should show help of revert' do
241
- puts '---- should show help of revert'
242
- out = catch_out{Yggdrasil.command %w{help revert}}
243
- out.should == <<"EOS"
244
- update (up, revert): Set the files to the contents of the newest repository.
245
- usage: #{File.basename($0)} update [OPTIONS...] [PATH...]
246
-
247
- Valid options:
248
- --username ARG : specify a username ARG
249
- --password ARG : specify a password ARG
250
- --non-interactive : do no interactive prompting
251
- -r [--revision] ARG : revision number
252
-
253
220
  EOS
254
221
  end
255
222
 
data/spec/init_spec.rb CHANGED
@@ -158,6 +158,14 @@ EOS
158
158
  "Y\nhoge\nfoo\n"
159
159
 
160
160
  File.exist?('/tmp/yggdrasil-test/.yggdrasil/config').should be_true
161
+
162
+ config = `cat /tmp/yggdrasil-test/.yggdrasil/config`
163
+ config.should =~ /^path=/
164
+ config.should =~ /^svn=/
165
+ config.should =~ /^svn_version=/
166
+ config.should =~ /^repo=/
167
+ config.should =~ /^anon-access=/
168
+ config.should =~ /^server=/
161
169
  end
162
170
 
163
171
  it 'should success init subcommand with server option AGAIN' do
@@ -238,6 +246,7 @@ EOS
238
246
  sock = TCPSocket.open('localhost', 4000)
239
247
  sock.puts('quit')
240
248
  sock.close
249
+ `pkill svnserve`
241
250
  Process.waitall
242
251
  end
243
252
  end
@@ -97,7 +97,7 @@ usage: #{File.basename($0)} init [OPTIONS...]
97
97
  Valid options:
98
98
  --port ARG : specify a TCP port number ARG
99
99
  --repo ARG : URL of subversion repository
100
- ARG can contain {HOST} or a {host}
100
+ ARG must contain {HOST} or {host}
101
101
  {HOST} is replaced by client hostname with domain
102
102
  {host} is replaced by client hostname without domain
103
103
  e.g. svn://192.168.3.5/servers/{host}/ygg
@@ -33,7 +33,6 @@ describe YggdrasilServer, 'results' do
33
33
  Yggdrasil.command %w{init --debug --server localhost:4000} +
34
34
  %w{--username hoge --password foo},
35
35
  "Y\nhoge\nfoo\n"
36
- `rm -f /tmp/yggdrasil-test/.yggdrasil/checker/gem_list`
37
36
 
38
37
  `echo hoge > /tmp/yggdrasil-test/A`
39
38
  Yggdrasil.command %w{add /tmp/yggdrasil-test/A}
@@ -44,31 +43,52 @@ describe YggdrasilServer, 'results' do
44
43
  Yggdrasil.command %w{check}
45
44
  sleep 1
46
45
  out = catch_out do
47
- YggdrasilServer.command %w{results --expire 30}
46
+ YggdrasilServer.command %w{results --expire 30 --debug}
48
47
  end
49
48
  out.should == ''
50
49
  end
51
50
 
52
- it 'should show results' do
53
- puts '---- should show results'
51
+ it 'should not show alert (there is result file, but there is no host in the repo)' do
52
+ puts '---- should not show alert (there is result file, but there is no host in the repo)'
53
+
54
+ `echo hoge > /tmp/yggdrasil-test/.yggdrasil/results/removed-host_192.168.1.30`
55
+ sleep 1
56
+
57
+ out = catch_out do
58
+ YggdrasilServer.command %w{results --expire 30 --debug}
59
+ end
60
+ out.should == "Notice: delete result file (removed-host_192.168.1.30)\n\n"
61
+ end
62
+
63
+ it 'should show alert (there is no result, but it exist in the repo)' do
64
+ puts '---- should show alert (there is no result, but it exist in the repo)'
65
+
66
+ `rm -f /tmp/yggdrasil-test/.yggdrasil/results/*`
67
+
68
+ out = catch_out do
69
+ lambda{YggdrasilServer.command(%w{results --expire 30 --debug})}.should raise_error(SystemExit)
70
+ end
71
+ out.should == <<"EOS"
72
+ ######## No check result: #{Socket.gethostname}
73
+
74
+ EOS
75
+
76
+ end
77
+
78
+ it 'should show alert (difference)' do
79
+ puts '---- should show alert (difference)'
54
80
 
55
81
  `echo foo >> /tmp/yggdrasil-test/A`
56
82
  Yggdrasil.command %w{check --non-interactive}
57
83
 
58
- `echo hoge > /tmp/yggdrasil-test/.yggdrasil/results/hoge-old`
59
- File.utime Time.local(2001, 5, 22, 23, 59, 59),
60
- Time.local(2001, 5, 1, 0, 0, 0),
61
- '/tmp/yggdrasil-test/.yggdrasil/results/hoge-old'
62
84
  sleep 1
63
85
 
64
86
  out = catch_out do
65
- lambda{YggdrasilServer.command(%w{results --expire 30})}.should raise_error(SystemExit)
87
+ lambda{YggdrasilServer.command(%w{results --expire 30 --debug})}.should raise_error(SystemExit)
66
88
  end
67
89
  out.gsub! /[ ]+/, ' '
68
90
  out.should == <<"EOS"
69
- ######## hoge-old: last check is too old: 2001-05-01 00:00:00 +0900
70
-
71
- ######## #{Socket.gethostname}_127.0.0.1 Mismatch:
91
+ ######## Difference: #{Socket.gethostname}_127.0.0.1
72
92
  M 2 tmp/yggdrasil-test/A
73
93
 
74
94
  Index: tmp/yggdrasil-test/A
@@ -79,6 +99,24 @@ Index: tmp/yggdrasil-test/A
79
99
  hoge
80
100
  +foo
81
101
 
102
+ EOS
103
+ end
104
+
105
+ it 'should show alert (expired)' do
106
+ puts '---- should show results'
107
+
108
+ File.utime Time.local(2001, 5, 22, 23, 59, 59),
109
+ Time.local(2001, 5, 1, 0, 0, 0),
110
+ "/tmp/yggdrasil-test/.yggdrasil/results/#{Socket.gethostname}_127.0.0.1"
111
+ sleep 1
112
+
113
+ out = catch_out do
114
+ lambda{YggdrasilServer.command(%w{results --expire 30 --debug})}.should raise_error(SystemExit)
115
+ end
116
+ out.gsub! /[ ]+/, ' '
117
+ out.should == <<"EOS"
118
+ ######## Expired: #{Socket.gethostname}_127.0.0.1 (2001-05-01 00:00:00 +0900)
119
+
82
120
  EOS
83
121
  end
84
122
 
@@ -86,13 +124,13 @@ EOS
86
124
  puts '---- should show s-jis results'
87
125
 
88
126
  `rm /tmp/yggdrasil-test/.yggdrasil/results/*`
89
- `echo 'あいうえお' | nkf -s > /tmp/yggdrasil-test/.yggdrasil/results/hoge`
127
+ `echo 'あいうえお' | nkf -s > /tmp/yggdrasil-test/.yggdrasil/results/#{Socket.gethostname}_127.0.0.1`
90
128
 
91
129
  out = catch_out do
92
- lambda{YggdrasilServer.command(%w{results})}.should raise_error(SystemExit)
130
+ lambda{YggdrasilServer.command(%w{results --debug})}.should raise_error(SystemExit)
93
131
  end
94
132
  out.should == <<"EOS"
95
- ######## hoge Mismatch:
133
+ ######## Difference: #{Socket.gethostname}_127.0.0.1
96
134
  あいうえお
97
135
  EOS
98
136
  end
data/spec/spec_helper.rb CHANGED
@@ -33,7 +33,6 @@ def init_yggdrasil
33
33
  Yggdrasil.command %w{init} +
34
34
  %w{--repo svn://localhost/tmp/yggdrasil-test/svn-repo/mng-repo/host-name/} +
35
35
  %w{--username hoge --password foo --parents}
36
- `rm /tmp/yggdrasil-test/.yggdrasil/checker/gem_list`
37
36
  puts '-- add'
38
37
  `echo hoge > /tmp/yggdrasil-test/A`
39
38
  `echo foo > /tmp/yggdrasil-test/B`
@@ -61,7 +60,7 @@ end
61
60
 
62
61
  def catch_err
63
62
  exit 1 unless block_given?
64
- tmp_err = $stdout
63
+ tmp_err = $stderr
65
64
  $stderr = StringIO.new
66
65
  yield
67
66
  $stderr, tmp_err = tmp_err, $stderr
metadata CHANGED
@@ -1,46 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yggdrasil
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tomohisa Kusukawa
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-08-21 00:00:00.000000000 Z
11
+ date: 2013-12-07 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: simplecov
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  description: Yggdrasil is a subversion wrapper to manage configuration files.
@@ -71,10 +66,10 @@ files:
71
66
  - lib/yggdrasil/init.rb
72
67
  - lib/yggdrasil/list.rb
73
68
  - lib/yggdrasil/log.rb
74
- - lib/yggdrasil/update.rb
75
69
  - lib/yggdrasil/version.rb
76
70
  - lib/yggdrasil_common.rb
77
71
  - lib/yggdrasil_server.rb
72
+ - lib/yggdrasil_server/get_configs.rb
78
73
  - lib/yggdrasil_server/get_repo.rb
79
74
  - lib/yggdrasil_server/get_ro_id_pw.rb
80
75
  - lib/yggdrasil_server/help.rb
@@ -92,45 +87,36 @@ files:
92
87
  - spec/init_spec.rb
93
88
  - spec/list_spec.rb
94
89
  - spec/log_spec.rb
95
- - spec/revert_spec.rb
96
90
  - spec/server_help_spec.rb
97
91
  - spec/server_init_spec.rb
98
92
  - spec/server_results_spec.rb
99
93
  - spec/server_spec.rb
100
94
  - spec/server_version_spec.rb
101
95
  - spec/spec_helper.rb
102
- - spec/update_spec.rb
103
96
  - spec/version_spec.rb
104
97
  - yggdrasil.gemspec
105
98
  homepage: https://github.com/tkusukawa/yggdrasil
106
99
  licenses: []
100
+ metadata: {}
107
101
  post_install_message:
108
102
  rdoc_options: []
109
103
  require_paths:
110
104
  - lib
111
105
  required_ruby_version: !ruby/object:Gem::Requirement
112
- none: false
113
106
  requirements:
114
- - - ! '>='
107
+ - - '>='
115
108
  - !ruby/object:Gem::Version
116
109
  version: '0'
117
- segments:
118
- - 0
119
- hash: 1911977696976218263
120
110
  required_rubygems_version: !ruby/object:Gem::Requirement
121
- none: false
122
111
  requirements:
123
- - - ! '>='
112
+ - - '>='
124
113
  - !ruby/object:Gem::Version
125
114
  version: '0'
126
- segments:
127
- - 0
128
- hash: 1911977696976218263
129
115
  requirements: []
130
116
  rubyforge_project:
131
- rubygems_version: 1.8.25
117
+ rubygems_version: 2.1.11
132
118
  signing_key:
133
- specification_version: 3
119
+ specification_version: 4
134
120
  summary: Type "ygg help" for usage.
135
121
  test_files:
136
122
  - spec/add_spec.rb
@@ -142,12 +128,10 @@ test_files:
142
128
  - spec/init_spec.rb
143
129
  - spec/list_spec.rb
144
130
  - spec/log_spec.rb
145
- - spec/revert_spec.rb
146
131
  - spec/server_help_spec.rb
147
132
  - spec/server_init_spec.rb
148
133
  - spec/server_results_spec.rb
149
134
  - spec/server_spec.rb
150
135
  - spec/server_version_spec.rb
151
136
  - spec/spec_helper.rb
152
- - spec/update_spec.rb
153
137
  - spec/version_spec.rb
@@ -1,52 +0,0 @@
1
- class Yggdrasil
2
-
3
- # @param [Array] args
4
- def update(args)
5
- parse_options(args,
6
- {'--username'=>:username, '--password'=>:password,
7
- '-r'=>:revision, '--revision'=>:revision,
8
- '--non-interactive'=>:non_interactive?})
9
- @arg_paths << '/' if @arg_paths.size == 0
10
- get_user_pass_if_need_to_read_repo
11
-
12
- matched_updates = sync_mirror(@arg_paths)
13
- if matched_updates.size == 0
14
- puts 'no files.'
15
- return
16
- end
17
-
18
- confirmed_updates = confirm_updates(matched_updates) do |relative_path|
19
- FileUtils.cd @mirror_dir do
20
- cmd = "#{@svn} diff --no-auth-cache --non-interactive #{relative_path}"
21
- cmd += username_password_options_to_read_repo
22
- puts system3(cmd)
23
- end
24
- end
25
- return unless confirmed_updates
26
- return if confirmed_updates.size == 0
27
-
28
- FileUtils.cd @mirror_dir do
29
- cmd = "#{@svn} revert #{confirmed_updates.reverse.join(' ')}"
30
- system3 cmd
31
-
32
- # make ls hash
33
- cmd = "#{@svn} ls -R #{@repo} --no-auth-cache --non-interactive"
34
- cmd += username_password_options_to_read_repo
35
- out = system3(cmd)
36
-
37
- ls_hash = Hash.new
38
- out.split(/\n/).each {|relative| ls_hash[relative]=true}
39
-
40
- # reflect mirror to real file
41
- confirmed_updates.each do |file|
42
- if ls_hash.has_key?(file)
43
- if File.file?("#{@mirror_dir}/#{file}")
44
- FileUtils.copy_file "#{@mirror_dir}/#{file}", "/#{file}"
45
- end
46
- else
47
- system3 "rm -rf #{@mirror_dir + '/' + file}"
48
- end
49
- end
50
- end
51
- end
52
- end
data/spec/revert_spec.rb DELETED
@@ -1,152 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe Yggdrasil, 'revert' do
4
- it '-------- revert' do
5
- puts '-------- revert'
6
- prepare_environment
7
- init_yggdrasil
8
- end
9
-
10
-
11
- it 'should revert added files' do
12
- puts '---- should commit added files'
13
- `echo hoge > /tmp/yggdrasil-test/AA`
14
- `echo foo > /tmp/yggdrasil-test/BB`
15
- FileUtils.cd '/tmp/yggdrasil-test' do
16
- puts '-- add'
17
- Yggdrasil.command %w{add AA /tmp/yggdrasil-test/BB}
18
-
19
- puts '-- revert'
20
- Yggdrasil.command %w{revert --username hoge --password foo},
21
- "0\nY\n"
22
- end
23
-
24
- puts "\n-- check revert file (add)"
25
- out = catch_out do
26
- Yggdrasil.command %w{check /tmp/yggdrasil-test --non-interactive} +
27
- %w{--username hoge --password foo}
28
- end
29
- puts out
30
- out.should == "3 files checked.\nYggdrasil check: OK.\n"
31
- end
32
-
33
- it 'should revert modified file' do
34
- puts '---- should revert modified file'
35
- puts '-- modify'
36
- `echo hoge >> /tmp/yggdrasil-test/A`
37
-
38
- puts '-- revert'
39
- Yggdrasil.command %w{revert / --username hoge --password foo},
40
- "0\nY\n"
41
-
42
- puts "\n-- check revert file (modify)"
43
- out = catch_out do
44
- Yggdrasil.command %w{check /tmp/yggdrasil-test --non-interactive} +
45
- %w{--username hoge --password foo}
46
- end
47
- puts out
48
- out.should == "3 files checked.\nYggdrasil check: OK.\n"
49
- end
50
-
51
- it 'should accept password interactive' do
52
- puts '---- should accept password interactive'
53
- `echo A >> /tmp/yggdrasil-test/A`
54
-
55
- Yggdrasil.command %w{revert /tmp/yggdrasil-test/A --username hoge},
56
- "foo\nY\n" # interactive input: password, Y/n
57
-
58
- puts "\n-- check revert file"
59
- out = catch_out do
60
- Yggdrasil.command %w{check /tmp/yggdrasil-test --non-interactive} +
61
- %w{--username hoge --password foo}
62
- end
63
- puts out
64
- out.should == "3 files checked.\nYggdrasil check: OK.\n"
65
- end
66
-
67
- it 'should revert specified file only' do
68
- puts '---- should revert specified file only'
69
- `echo A >> /tmp/yggdrasil-test/A`
70
- `echo B >> /tmp/yggdrasil-test/B`
71
-
72
- Yggdrasil.command %w{revert /tmp/yggdrasil-test/B} +
73
- %w{--username hoge --password foo},
74
- "0\nY\n"
75
-
76
- puts "\n-- check revert file"
77
- out = catch_out do
78
- Yggdrasil.command %w{check /tmp/yggdrasil-test --non-interactive} +
79
- %w{--username hoge --password foo}
80
- end
81
- puts out
82
- out.gsub!(%r{ +}, ' ')
83
- out.should == <<"EOS"
84
- 3 files checked.
85
- M 3 tmp/yggdrasil-test/A
86
-
87
- Index: tmp/yggdrasil-test/A
88
- ===================================================================
89
- --- tmp/yggdrasil-test/A (revision 3)
90
- +++ tmp/yggdrasil-test/A (working copy)
91
- @@ -1,2 +1,3 @@
92
- hoge
93
- hoge
94
- +A
95
-
96
- Yggdrasil check: NG!!!
97
- EOS
98
- end
99
-
100
- it 'should not revert deleted file' do
101
- puts '---- should not revert deleted file'
102
- `rm -f /tmp/yggdrasil-test/A`
103
-
104
- Yggdrasil.command %w{revert /} +
105
- %w{--username hoge --password foo},
106
- "0\nn\n"
107
-
108
- puts "\n-- check status"
109
- out = catch_out do
110
- Yggdrasil.command %w{check /tmp/yggdrasil-test --non-interactive} +
111
- %w{--username hoge --password foo}
112
- end
113
- puts out
114
- out.gsub!(%r{ +},' ')
115
- out.should == <<"EOS"
116
- 3 files checked.
117
- D 3 tmp/yggdrasil-test/A
118
-
119
- Index: tmp/yggdrasil-test/A
120
- ===================================================================
121
- --- tmp/yggdrasil-test/A (revision 3)
122
- +++ tmp/yggdrasil-test/A (working copy)
123
- @@ -1,2 +0,0 @@
124
- -hoge
125
- -hoge
126
-
127
- Yggdrasil check: NG!!!
128
- EOS
129
- end
130
-
131
- it 'should revert all files at once' do
132
- puts '---- should revert all files at once'
133
-
134
- `echo HOGE >> /tmp/yggdrasil-test/A`
135
- `rm -f /tmp/yggdrasil-test/B`
136
- `mkdir /tmp/yggdrasil-test/c`
137
- `echo bar > /tmp/yggdrasil-test/c/C`
138
- Yggdrasil.command %w{add /tmp/yggdrasil-test/c/C}
139
-
140
- Yggdrasil.command %w{revert /} +
141
- %w{--username hoge --password foo},
142
- "0\nY\n"
143
-
144
- puts "\n-- check status"
145
- out = catch_out do
146
- Yggdrasil.command %w{check /tmp/yggdrasil-test --non-interactive} +
147
- %w{--username hoge --password foo}
148
- end
149
- puts out
150
- out.should == "3 files checked.\nYggdrasil check: OK.\n"
151
- end
152
- end
data/spec/update_spec.rb DELETED
@@ -1,88 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe Yggdrasil, 'update' do
4
- it '-------- update' do
5
- puts '-------- update'
6
- prepare_environment
7
- init_yggdrasil
8
-
9
- puts '-- make another working copy'
10
- puts `svn co file:///tmp/yggdrasil-test/svn-repo/mng-repo/host-name /tmp/yggdrasil-test/svn-work`
11
- end
12
-
13
- it 'should success update (related/absolute path)' do
14
- puts '---- should success update (related/absolute path)'
15
- puts '-- commit on another working copy'
16
- `echo A:related/absolute path > /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test/A`
17
- `echo B:related/absolute path > /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test/B`
18
- `svn commit -m 'another commit' /tmp/yggdrasil-test/svn-work/`
19
-
20
- FileUtils.cd '/tmp/yggdrasil-test' do
21
- Yggdrasil.command %w{update A /tmp/yggdrasil-test/B} +
22
- %w{--username hoge --password foo},
23
- "0\nY\n"
24
- end
25
- `cat /tmp/yggdrasil-test/A`.should == "A:related/absolute path\n"
26
- `cat /tmp/yggdrasil-test/B`.should == "B:related/absolute path\n"
27
- end
28
-
29
- it 'should success update (only one file)' do
30
- puts '---- should success update (only one file)'
31
-
32
- puts '-- commit on another working copy'
33
- `echo A:only one file > /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test/A`
34
- `echo B:only one file > /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test/B`
35
- `svn commit -m 'another commit' /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test`
36
-
37
- Yggdrasil.command %w{update /tmp/yggdrasil-test/A} +
38
- %w{--username hoge --password foo --non-interactive}
39
-
40
- `cat /tmp/yggdrasil-test/A`.should == "A:only one file\n"
41
- `cat /tmp/yggdrasil-test/B`.should == "B:related/absolute path\n"
42
- end
43
-
44
- it 'should success update (parent path)' do
45
- puts '---- should success update (parent path)'
46
- puts '-- commit on another working copy'
47
- `echo A:parent path > /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test/A`
48
- `echo B:parent path > /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test/B`
49
- `svn commit -m 'another commit' /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test`
50
-
51
- Yggdrasil.command %w{update /tmp} +
52
- %w{--username hoge --password foo},
53
- "1\nY\n"
54
- `cat /tmp/yggdrasil-test/A`.should == "A:parent path\n"
55
- `cat /tmp/yggdrasil-test/B`.should == "B:parent path\n"
56
- end
57
-
58
- it 'should success update (no path)' do
59
- puts '---- should success update (no path)'
60
- puts '-- commit on another working copy'
61
- `echo A:no path > /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test/A`
62
- `echo B:no path > /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test/B`
63
- `svn commit -m 'another commit' /tmp/yggdrasil-test/svn-work/tmp/yggdrasil-test`
64
-
65
- FileUtils.cd '/tmp' do
66
- Yggdrasil.command %w{update} +
67
- %w{--username hoge --password foo --non-interactive}
68
- end
69
- `cat /tmp/yggdrasil-test/A`.should == "A:no path\n"
70
- `cat /tmp/yggdrasil-test/B`.should == "B:no path\n"
71
- end
72
-
73
- it 'should success update with revision' do
74
- puts '---- should success update with revision'
75
- `echo A:hoge > /tmp/yggdrasil-test/A`
76
- `echo B:hoge > /tmp/yggdrasil-test/B`
77
- Yggdrasil.command %w{commit} +
78
- %w{-m hoge} +
79
- %w{--username hoge --password foo --non-interactive}
80
-
81
- FileUtils.cd '/tmp' do
82
- Yggdrasil.command %w{update} +
83
- %w{-r 4 --username hoge --password foo --non-interactive}
84
- end
85
- `cat /tmp/yggdrasil-test/A`.should == "A:related/absolute path\n"
86
- `cat /tmp/yggdrasil-test/B`.should == "B:related/absolute path\n"
87
- end
88
- end