dtr 1.0.0 → 1.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.
Files changed (109) hide show
  1. data/CHANGES +21 -0
  2. data/README.rdoc +39 -28
  3. data/Rakefile +1 -1
  4. data/TODO +1 -3
  5. data/bin/dtr +20 -13
  6. data/dtr.gemspec +3 -3
  7. data/lib/dtr.rb +2 -2
  8. data/lib/dtr/agent.rb +12 -5
  9. data/lib/dtr/agent/brain.rb +45 -19
  10. data/lib/dtr/agent/herald.rb +8 -10
  11. data/lib/dtr/agent/process_root.rb +23 -0
  12. data/lib/dtr/agent/rails_ext.rb +57 -0
  13. data/lib/dtr/agent/runner.rb +19 -39
  14. data/lib/dtr/agent/sync_codebase.rb +10 -19
  15. data/lib/dtr/agent/sync_logger.rb +1 -0
  16. data/lib/dtr/agent/worker.rb +13 -61
  17. data/lib/dtr/agent/working_env_ext.rb +51 -17
  18. data/lib/dtr/agent/working_status.rb +34 -0
  19. data/lib/dtr/facade.rb +19 -17
  20. data/lib/dtr/master.rb +2 -0
  21. data/lib/dtr/monitor.rb +2 -2
  22. data/lib/dtr/raketasks.rb +14 -19
  23. data/lib/dtr/shared.rb +1 -0
  24. data/lib/dtr/shared/adapter.rb +2 -101
  25. data/lib/dtr/shared/adapter/base.rb +118 -0
  26. data/lib/dtr/shared/adapter/mortality.rb +41 -0
  27. data/lib/dtr/shared/configuration.rb +32 -14
  28. data/lib/dtr/shared/root.rb +20 -0
  29. data/lib/dtr/shared/sync_codebase/master_ext.rb +2 -2
  30. data/lib/dtr/shared/sync_codebase/sync_service.rb +7 -4
  31. data/lib/dtr/shared/utils/cmd.rb +4 -2
  32. data/lib/dtr/shared/utils/env_store.rb +16 -24
  33. data/lib/dtr/shared/working_env.rb +8 -0
  34. data/lib/dtr/test_unit/drb_test_runner.rb +1 -1
  35. data/lib/dtr/test_unit/thread_safe_test_result.rb +56 -3
  36. data/test/acceptance/dtr_package_task_test.rb +3 -3
  37. data/test/acceptance/general_test.rb +3 -3
  38. data/test/acceptance/rails_ext_test.rb +86 -0
  39. data/test/acceptance/raketasks_test.rb +14 -0
  40. data/test/acceptance/sync_codebase_test.rb +8 -31
  41. data/test/acceptance/sync_logger_test.rb +6 -3
  42. data/test/agent_helper.rb +24 -16
  43. data/test/logger_stub.rb +3 -3
  44. data/test/test_helper.rb +12 -9
  45. data/test/unit/adapter_test.rb +1 -1
  46. data/test/unit/configuration_test.rb +36 -4
  47. data/test/unit/database_initializer_test.rb +36 -0
  48. data/test/unit/facade_test.rb +11 -1
  49. data/test/unit/thread_safe_test_result_test.rb +41 -0
  50. data/test/unit/working_env_test.rb +11 -21
  51. data/testdata/rails_projects/simple_project/README +256 -0
  52. data/testdata/rails_projects/simple_project/Rakefile +10 -0
  53. data/testdata/rails_projects/simple_project/app/controllers/application.rb +15 -0
  54. data/testdata/rails_projects/simple_project/app/controllers/products_controller.rb +5 -0
  55. data/testdata/rails_projects/simple_project/app/helpers/application_helper.rb +3 -0
  56. data/testdata/rails_projects/simple_project/app/helpers/products_helper.rb +2 -0
  57. data/testdata/rails_projects/simple_project/app/models/product.rb +5 -0
  58. data/testdata/rails_projects/simple_project/app/views/products/index.rhtml +7 -0
  59. data/testdata/rails_projects/simple_project/config/boot.rb +109 -0
  60. data/testdata/rails_projects/simple_project/config/database.yml +19 -0
  61. data/testdata/rails_projects/simple_project/config/database.yml.mysql +12 -0
  62. data/testdata/rails_projects/simple_project/config/environment.rb +67 -0
  63. data/testdata/rails_projects/simple_project/config/environments/development.rb +17 -0
  64. data/testdata/rails_projects/simple_project/config/environments/production.rb +22 -0
  65. data/testdata/rails_projects/simple_project/config/environments/test.rb +22 -0
  66. data/testdata/rails_projects/simple_project/config/initializers/inflections.rb +10 -0
  67. data/testdata/rails_projects/simple_project/config/initializers/mime_types.rb +5 -0
  68. data/testdata/rails_projects/simple_project/config/initializers/new_rails_defaults.rb +17 -0
  69. data/testdata/rails_projects/simple_project/config/routes.rb +43 -0
  70. data/testdata/rails_projects/simple_project/db/migrate/20081027133744_create_products.rb +13 -0
  71. data/testdata/rails_projects/simple_project/db/schema.rb +21 -0
  72. data/testdata/rails_projects/simple_project/doc/README_FOR_APP +2 -0
  73. data/testdata/rails_projects/simple_project/public/404.html +30 -0
  74. data/testdata/rails_projects/simple_project/public/422.html +30 -0
  75. data/testdata/rails_projects/simple_project/public/500.html +30 -0
  76. data/testdata/rails_projects/simple_project/public/dispatch.cgi +10 -0
  77. data/testdata/rails_projects/simple_project/public/dispatch.fcgi +24 -0
  78. data/testdata/rails_projects/simple_project/public/dispatch.rb +10 -0
  79. data/testdata/rails_projects/simple_project/public/favicon.ico +0 -0
  80. data/testdata/rails_projects/simple_project/public/images/rails.png +0 -0
  81. data/testdata/rails_projects/simple_project/public/index.html +274 -0
  82. data/testdata/rails_projects/simple_project/public/javascripts/application.js +2 -0
  83. data/testdata/rails_projects/simple_project/public/javascripts/controls.js +963 -0
  84. data/testdata/rails_projects/simple_project/public/javascripts/dragdrop.js +972 -0
  85. data/testdata/rails_projects/simple_project/public/javascripts/effects.js +1120 -0
  86. data/testdata/rails_projects/simple_project/public/javascripts/prototype.js +4225 -0
  87. data/testdata/rails_projects/simple_project/public/robots.txt +5 -0
  88. data/testdata/rails_projects/simple_project/script/about +4 -0
  89. data/testdata/rails_projects/simple_project/script/console +3 -0
  90. data/testdata/rails_projects/simple_project/script/dbconsole +3 -0
  91. data/testdata/rails_projects/simple_project/script/destroy +3 -0
  92. data/testdata/rails_projects/simple_project/script/generate +3 -0
  93. data/testdata/rails_projects/simple_project/script/performance/benchmarker +3 -0
  94. data/testdata/rails_projects/simple_project/script/performance/profiler +3 -0
  95. data/testdata/rails_projects/simple_project/script/performance/request +3 -0
  96. data/testdata/rails_projects/simple_project/script/plugin +3 -0
  97. data/testdata/rails_projects/simple_project/script/process/inspector +3 -0
  98. data/testdata/rails_projects/simple_project/script/process/reaper +3 -0
  99. data/testdata/rails_projects/simple_project/script/process/spawner +3 -0
  100. data/testdata/rails_projects/simple_project/script/runner +3 -0
  101. data/testdata/rails_projects/simple_project/script/server +3 -0
  102. data/testdata/rails_projects/simple_project/test/fixtures/products.yml +9 -0
  103. data/testdata/rails_projects/simple_project/test/functional/products_controller_test.rb +11 -0
  104. data/testdata/rails_projects/simple_project/test/test_helper.rb +38 -0
  105. data/testdata/rails_projects/simple_project/test/unit/product_test.rb +27 -0
  106. data/testdata/raketasks/Rakefile +1 -1
  107. metadata +90 -5
  108. data/testdata/verify_dir_pwd/Rakefile +0 -6
  109. data/testdata/verify_dir_pwd/verify_dir_pwd_test_case.rb +0 -10
@@ -24,7 +24,9 @@ module DTR
24
24
  DTR.info {""}
25
25
  DTR.info {"--------------------beautiful line--------------------------"}
26
26
  DTR.info {"Master process started at #{Time.now}"}
27
+ DTR.info {"Master heartbeat interval: #{DTR.configuration.master_heartbeat_interval}"}
27
28
 
29
+ DTR.root = Dir.pwd
28
30
  DTR.configuration.with_rinda_server do
29
31
  provide_working_env WorkingEnv.new
30
32
  with_wakeup_agents(&block)
@@ -23,7 +23,7 @@ module DTR
23
23
  include Adapter::Master
24
24
 
25
25
  def start
26
- DTR.fork_process do
26
+ Process.fork do
27
27
  monitor
28
28
  end
29
29
  end
@@ -44,7 +44,7 @@ module DTR
44
44
  include Service::Agent
45
45
 
46
46
  def start
47
- DTR.fork_process do
47
+ Process.fork do
48
48
  begin
49
49
  loop do
50
50
  monitor
@@ -18,6 +18,7 @@ require 'rake/testtask'
18
18
  require 'rake/tasklib'
19
19
 
20
20
  require 'dtr'
21
+ require 'dtr/shared/root'
21
22
  require 'dtr/shared/ruby_ext'
22
23
  require 'dtr/shared/utils'
23
24
  require 'dtr/shared/sync_codebase/package'
@@ -85,23 +86,17 @@ module DTR
85
86
 
86
87
  desc "Run tests with DTR injected"
87
88
  task @name do
88
- @agent = start_agent
89
+ start_agent
89
90
  run_code = ''
90
- begin
91
- RakeFileUtils.verbose(@verbose) do
92
- run_code = rake_loader
93
- @ruby_opts.unshift( "-I#{lib_path}" )
94
- @ruby_opts.unshift( "-w" ) if @warning
95
-
96
- ruby @ruby_opts.join(" ") +
97
- " \"#{run_code}\" " +
98
- file_list.unshift('dtr/test_unit_injection.rb').collect { |fn| "\"#{fn}\"" }.join(' ') +
99
- " #{option_list}"
100
- end
101
- ensure
102
- if defined?(@agent)
103
- DTR.kill_process @agent
104
- end
91
+ RakeFileUtils.verbose(@verbose) do
92
+ run_code = rake_loader
93
+ @ruby_opts.unshift( "-I#{lib_path}" )
94
+ @ruby_opts.unshift( "-w" ) if @warning
95
+
96
+ ruby @ruby_opts.join(" ") +
97
+ " \"#{run_code}\" " +
98
+ file_list.unshift('dtr/test_unit_injection.rb').collect { |fn| "\"#{fn}\"" }.join(' ') +
99
+ " #{option_list}"
105
100
  end
106
101
  end
107
102
  self
@@ -113,9 +108,9 @@ module DTR
113
108
  runner_names = []
114
109
  self.processes.to_i.times {|i| runner_names << "runner#{i}"}
115
110
 
116
- DTR.fork_process do
117
- DTR_AGENT_OPTIONS[:runners] = runner_names if DTR_AGENT_OPTIONS[:runners].empty?
118
- DTR.start_agent
111
+ DTR.agent_runners = runner_names if DTR.agent_runners.blank?
112
+ Thread.start do
113
+ DTR.run_script('DTR::Agent.start(:hypnotize_once)')
119
114
  end
120
115
  end
121
116
  end
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  require 'fileutils'
16
+ require 'dtr/shared/root'
16
17
  require 'dtr/shared/ruby_ext'
17
18
  require 'dtr/shared/utils'
18
19
  require 'dtr/shared/message_decorator'
@@ -12,104 +12,5 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'timeout'
16
-
17
- module DTR
18
- module Adapter
19
- WAKEUP_MESSAGE = 'wakeup'
20
- SLEEP_MESSAGE = 'sleep'
21
-
22
- module Follower
23
- def wakeup?
24
- msg, host, group = listen
25
- if group == DTR.configuration.group && msg == Adapter::WAKEUP_MESSAGE
26
- ip, port = host.split(':')
27
- DTR.configuration.rinda_server_port = port.to_i
28
- DTR.configuration.broadcast_list = [ip]
29
- @wakeup_for_host = host
30
- true
31
- end
32
- end
33
-
34
- def sleep?
35
- return true unless defined?(@wakeup_for_host)
36
- Timeout.timeout(DTR.configuration.follower_listen_heartbeat_timeout) do
37
- until (msg, host = listen) && host == @wakeup_for_host; end
38
- msg == Adapter::SLEEP_MESSAGE
39
- end
40
- rescue Timeout::Error => e
41
- DTR.info {"Timeout while listening command"}
42
- true
43
- end
44
-
45
- def relax
46
- if defined?(@soc) && @soc
47
- @soc.close rescue nil
48
- end
49
- end
50
-
51
- private
52
- def listen
53
- unless defined?(@soc)
54
- @soc = UDPSocket.open
55
- @soc.bind('', DTR.configuration.agent_listen_port)
56
- DTR.info("DTR Agent is listening on port #{DTR.configuration.agent_listen_port}")
57
- end
58
- message, client_address = @soc.recvfrom(400)
59
- cmd, port, group = message.split
60
-
61
- hostname = client_address[2]
62
- host_ip = client_address[3]
63
- DTR.info {"Received: #{cmd} for group #{group} from #{hostname}(#{host_ip}):#{port}"}
64
- [cmd, "#{host_ip}:#{port}", group]
65
- end
66
- end
67
-
68
- module Master
69
- def hypnotize_agents
70
- yell_agents("#{Adapter::SLEEP_MESSAGE} #{DTR.configuration.rinda_server_port}")
71
- end
72
-
73
- def with_wakeup_agents(&block)
74
- heartbeat = Thread.new do
75
- loop do
76
- do_wakeup_agents
77
- sleep(DTR.configuration.master_heartbeat_interval)
78
- end
79
- end
80
- #heartbeat thread should have high priority for agent is listening
81
- heartbeat.priority = Thread.current.priority + 10
82
- block.call
83
- ensure
84
- #kill heartbeat first, so that agents wouldn't be wakeup after hypnotized
85
- Thread.kill heartbeat rescue nil
86
- hypnotize_agents rescue nil
87
- end
88
-
89
- def do_wakeup_agents
90
- yell_agents("#{Adapter::WAKEUP_MESSAGE} #{DTR.configuration.rinda_server_port} #{DTR.configuration.group}")
91
- end
92
-
93
- private
94
- def yell_agents(msg)
95
- DTR.info {"yell agents #{msg}: #{DTR.configuration.broadcast_list.inspect}"}
96
- DTR.configuration.broadcast_list.each do |it|
97
- broadcast(it, msg)
98
- end
99
- end
100
-
101
- def broadcast(it, msg)
102
- soc = UDPSocket.open
103
- begin
104
- soc.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
105
- DTR.debug {"broadcast sending #{msg} to #{it}"}
106
- soc.send(msg, 0, it, DTR.configuration.agent_listen_port)
107
- rescue
108
- nil
109
- ensure
110
- soc.close
111
- end
112
- end
113
- end
114
- end
115
- end
15
+ require 'dtr/shared/adapter/base'
16
+ require 'dtr/shared/adapter/mortality'
@@ -0,0 +1,118 @@
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'timeout'
16
+
17
+ module DTR
18
+ module Adapter
19
+ WAKEUP_MESSAGE = 'wakeup'
20
+ SLEEP_MESSAGE = 'sleep'
21
+
22
+ module Follower
23
+ def wakeup?
24
+ msg, host, group = listen
25
+ if group == DTR.configuration.group && msg == Adapter::WAKEUP_MESSAGE
26
+ ip, port = host.split(':')
27
+ DTR.configuration.rinda_server_port = port.to_i
28
+ DTR.configuration.broadcast_list = [ip]
29
+ DTR.configuration.save
30
+ DTR.info {"=> Rinda server port: #{DTR.configuration.rinda_server_port}"}
31
+ DTR.info {"=> Broadcast list: #{DTR.configuration.broadcast_list.inspect}"}
32
+ @wakeup_for_host = host
33
+ true
34
+ end
35
+ end
36
+
37
+ def sleep?
38
+ return true unless defined?(@wakeup_for_host)
39
+ Timeout.timeout(DTR.configuration.follower_listen_heartbeat_timeout) do
40
+ until (msg, host = listen) && host == @wakeup_for_host; end
41
+ msg == Adapter::SLEEP_MESSAGE
42
+ end
43
+ rescue Timeout::Error => e
44
+ DTR.info {"Timeout while listening command"}
45
+ true
46
+ end
47
+
48
+ def relax
49
+ if defined?(@soc) && @soc
50
+ @soc.close rescue nil
51
+ end
52
+ end
53
+
54
+ private
55
+ def listen
56
+ unless defined?(@soc)
57
+ @soc = UDPSocket.open
58
+ @soc.bind('', DTR.configuration.agent_listen_port)
59
+ DTR.info("DTR Agent is listening on port #{DTR.configuration.agent_listen_port}")
60
+ end
61
+ message, client_address = @soc.recvfrom(400)
62
+ cmd, port, group = message.split
63
+
64
+ hostname = client_address[2]
65
+ host_ip = client_address[3]
66
+ DTR.info {"Received: #{cmd} for group #{group} from #{hostname}(#{host_ip}):#{port}"}
67
+ [cmd, "#{host_ip}:#{port}", group]
68
+ end
69
+ end
70
+
71
+ module Master
72
+ def hypnotize_agents
73
+ yell_agents("#{Adapter::SLEEP_MESSAGE} #{DTR.configuration.rinda_server_port}")
74
+ end
75
+
76
+ def with_wakeup_agents(&block)
77
+ heartbeat = Thread.new do
78
+ loop do
79
+ do_wakeup_agents
80
+ sleep(DTR.configuration.master_heartbeat_interval)
81
+ end
82
+ end
83
+ #heartbeat thread should have high priority for agent is listening
84
+ heartbeat.priority = Thread.current.priority + 10
85
+ block.call
86
+ ensure
87
+ #kill heartbeat first, so that agents wouldn't be wakeup after hypnotized
88
+ Thread.kill heartbeat rescue nil
89
+ hypnotize_agents rescue nil
90
+ end
91
+
92
+ def do_wakeup_agents
93
+ yell_agents("#{Adapter::WAKEUP_MESSAGE} #{DTR.configuration.rinda_server_port} #{DTR.configuration.group}")
94
+ end
95
+
96
+ private
97
+ def yell_agents(msg)
98
+ DTR.info {"yell agents #{msg}: #{DTR.configuration.broadcast_list.inspect}"}
99
+ DTR.configuration.broadcast_list.each do |it|
100
+ broadcast(it, msg)
101
+ end
102
+ end
103
+
104
+ def broadcast(it, msg)
105
+ soc = UDPSocket.open
106
+ begin
107
+ soc.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
108
+ DTR.debug {"broadcast sending #{msg} to #{it}"}
109
+ soc.send(msg, 0, it, DTR.configuration.agent_listen_port)
110
+ rescue
111
+ nil
112
+ ensure
113
+ soc.close
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,41 @@
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'timeout'
16
+
17
+ module DTR
18
+ module Adapter
19
+ DEAD_MESSAGE = 'die'
20
+
21
+ module Follower
22
+ private
23
+
24
+ def listen_with_dead_message
25
+ cmd, host, group = listen_without_dead_message
26
+ if cmd == Adapter::DEAD_MESSAGE && group == DTR.configuration.group
27
+ DTR.info{"Master need me die. So I am dieing."}
28
+ raise Interrupt, "Master need me die."
29
+ end
30
+ [cmd, host, group]
31
+ end
32
+ alias_method_chain :listen, :dead_message
33
+ end
34
+
35
+ module Master
36
+ def group_agents_should_die(group = DTR.configuration.group)
37
+ yell_agents("#{Adapter::DEAD_MESSAGE} #{DTR.configuration.rinda_server_port} #{group}")
38
+ end
39
+ end
40
+ end
41
+ end
@@ -41,32 +41,50 @@ module DTR
41
41
  include Singleton
42
42
  include Service::Rinda
43
43
 
44
- attr_accessor :broadcast_list, :rinda_server_port, :agent_listen_port, :master_heartbeat_interval, :follower_listen_heartbeat_timeout
44
+ attr_accessor :broadcast_list, :rinda_server_port, :agent_listen_port, :master_heartbeat_interval, :follower_listen_heartbeat_timeout, :agent_env_setup_cmd, :agent_runners
45
45
  attr_reader :group
46
46
 
47
47
  def initialize
48
+ @store = EnvStore.new
49
+ load
50
+ end
51
+
52
+ def refresh
53
+ @store.destroy if @store
54
+ @store = EnvStore.new
48
55
  load
49
56
  end
50
57
 
51
58
  def load
52
- store = EnvStore.new
53
59
  # always have 'localhost' in broadcast_list, for our master process would start rinda server locally,
54
60
  # and dtr should work well on local machine when the machine leaves dtr grid network environment.
55
- @broadcast_list = ['localhost'].concat(store[:broadcast_list] || []).uniq
56
- @rinda_server_port = 3344
57
- @agent_listen_port = store[:agent_listen_port] || 7788
58
- @master_heartbeat_interval = store[:master_heartbeat_interval] || 10
59
- @follower_listen_heartbeat_timeout = store[:follower_listen_heartbeat_timeout] || 15
60
- @group = store[:group]
61
+ @broadcast_list = ['localhost'].concat(@store[:broadcast_list] || []).uniq
62
+ @rinda_server_port = @store[:rinda_server_port] || 3344
63
+ @agent_listen_port = @store[:agent_listen_port] || 7788
64
+ @master_heartbeat_interval = @store[:master_heartbeat_interval] || 10
65
+ @follower_listen_heartbeat_timeout = @store[:follower_listen_heartbeat_timeout] || 15
66
+ @group = @store[:group]
67
+ @agent_env_setup_cmd = @store[:agent_env_setup_cmd]
68
+ @agent_runners = @store[:agent_runners]
61
69
  end
62
70
 
63
71
  def save
64
- store = EnvStore.new
65
- store[:broadcast_list] = @broadcast_list
66
- store[:agent_listen_port] = @agent_listen_port
67
- store[:master_heartbeat_interval] = @master_heartbeat_interval
68
- store[:follower_listen_heartbeat_timeout] = @follower_listen_heartbeat_timeout
69
- store[:group] = @group
72
+ @store[:broadcast_list] = @broadcast_list
73
+ @store[:rinda_server_port] = @rinda_server_port
74
+ @store[:agent_listen_port] = @agent_listen_port
75
+ @store[:master_heartbeat_interval] = @master_heartbeat_interval
76
+ @store[:follower_listen_heartbeat_timeout] = @follower_listen_heartbeat_timeout
77
+ @store[:group] = @group
78
+ @store[:agent_env_setup_cmd] = @agent_env_setup_cmd
79
+ @store[:agent_runners] = @agent_runners
80
+ end
81
+
82
+ def working_env
83
+ @store[:working_env]
84
+ end
85
+
86
+ def working_env=(env)
87
+ @store[:working_env] = env
70
88
  end
71
89
 
72
90
  def group=(group)
@@ -0,0 +1,20 @@
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module DTR
16
+ module Root
17
+ attr_accessor :root
18
+ end
19
+ extend Root
20
+ end
@@ -26,12 +26,12 @@ module DTR
26
26
  def with_dtr_master_with_sync_codebase(&block)
27
27
  with_dtr_master_without_sync_codebase do
28
28
  DTR.do_println("Packaging codebase")
29
- raise 'Packaging for dtr task failed, see log for details!' unless Cmd.execute('rake dtr_repackage --trace')
29
+ raise 'Packaging for dtr task failed, see log for details!' unless Cmd.execute('rake --trace dtr_repackage')
30
30
  begin
31
31
  provide_file CopiablePackage.new
32
32
  block.call
33
33
  ensure
34
- Cmd.execute('rake dtr_clobber_package --trace')
34
+ Cmd.execute('rake --trace dtr_clobber_package')
35
35
  end
36
36
  end
37
37
  end