BuildMaster 0.9.1 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. data/bin/svnfix.rb +3 -0
  2. data/lib/buildmaster/ci/server.rb +55 -0
  3. data/lib/buildmaster/common.rb +3 -0
  4. data/lib/buildmaster/common/properties.rb +28 -0
  5. data/lib/buildmaster/{tree_to_object.rb → common/tree_to_object.rb} +0 -0
  6. data/lib/buildmaster/cotta.rb +1 -1
  7. data/lib/buildmaster/cotta/command_error.rb +6 -1
  8. data/lib/buildmaster/cotta/command_interface.rb +44 -0
  9. data/lib/buildmaster/cotta/command_runner.rb +39 -0
  10. data/lib/buildmaster/cotta/cotta.rb +40 -3
  11. data/lib/buildmaster/cotta/cotta_dir.rb +28 -7
  12. data/lib/buildmaster/cotta/cotta_file.rb +14 -2
  13. data/lib/buildmaster/cotta/cotta_pathname.rb +9 -0
  14. data/lib/buildmaster/cotta/in_memory_system.rb +20 -9
  15. data/lib/buildmaster/cotta/physical_system.rb +4 -8
  16. data/lib/buildmaster/project.rb +10 -0
  17. data/lib/buildmaster/{ant_driver.rb → project/ant_driver.rb} +0 -0
  18. data/lib/buildmaster/project/build.rb +3 -0
  19. data/lib/buildmaster/{build_number_file.rb → project/build_number_file.rb} +4 -0
  20. data/lib/buildmaster/project/ci.rb +3 -0
  21. data/lib/buildmaster/{cvs_driver.rb → project/cvs_driver.rb} +0 -0
  22. data/lib/buildmaster/project/ftp_driver.rb +64 -0
  23. data/lib/buildmaster/{java_manifest.rb → project/java_manifest.rb} +0 -0
  24. data/lib/buildmaster/project/pscp_driver.rb +17 -0
  25. data/lib/buildmaster/project/release.rb +67 -0
  26. data/lib/buildmaster/project/ruby_forge_project.rb +26 -0
  27. data/lib/buildmaster/{run_ant.rb → project/run_ant.rb} +0 -0
  28. data/lib/buildmaster/project/server_manager.rb +64 -0
  29. data/lib/buildmaster/project/svn_admin_driver.rb +20 -0
  30. data/lib/buildmaster/project/svn_driver.rb +94 -0
  31. data/lib/buildmaster/project/svn_helper.rb +113 -0
  32. data/lib/buildmaster/project/svn_status_info.rb +54 -0
  33. data/lib/buildmaster/{try.rb → project/try.rb} +0 -0
  34. data/lib/buildmaster/project/version_number_file.rb +45 -0
  35. data/lib/buildmaster/{windows → project/windows}/iis_driver.rb +4 -4
  36. data/lib/buildmaster/{windows → project/windows}/sql_server_driver.rb +0 -0
  37. data/lib/buildmaster/site.rb +5 -0
  38. data/lib/buildmaster/site/about_handler.rb +43 -0
  39. data/lib/buildmaster/site/content_engine_repository.rb +83 -0
  40. data/lib/buildmaster/site/element_processor_by_name.rb +18 -0
  41. data/lib/buildmaster/site/file_processor.rb +59 -0
  42. data/lib/buildmaster/site/site.rb +29 -6
  43. data/lib/buildmaster/site/site_server.rb +56 -0
  44. data/lib/buildmaster/{site_spec.rb → site/site_spec.rb} +63 -38
  45. data/lib/buildmaster/{site_tester.rb → site/site_tester.rb} +0 -0
  46. data/lib/buildmaster/site/source_content.rb +12 -0
  47. data/lib/buildmaster/{source_file_handler.rb → site/source_file_handler.rb} +13 -27
  48. data/lib/buildmaster/site/template_builder.rb +4 -0
  49. data/lib/buildmaster/site/template_error.rb +18 -0
  50. data/lib/buildmaster/{template_runner.rb → site/template_runner.rb} +6 -16
  51. data/lib/buildmaster/{templatelets.rb → site/templatelets.rb} +3 -1
  52. data/lib/buildmaster/site/templatelets/attribute.rb +21 -0
  53. data/lib/buildmaster/site/templatelets/code.rb +82 -0
  54. data/lib/buildmaster/{templatelets → site/templatelets}/each.rb +7 -5
  55. data/lib/buildmaster/{templatelets → site/templatelets}/href.rb +1 -1
  56. data/lib/buildmaster/{templatelets → site/templatelets}/include.rb +0 -0
  57. data/lib/buildmaster/{templatelets → site/templatelets}/link.rb +2 -3
  58. data/lib/buildmaster/{templatelets → site/templatelets}/text.rb +1 -1
  59. data/lib/buildmaster/{templatelets → site/templatelets}/when.rb +4 -7
  60. data/lib/buildmaster/site/templates/buildmaster/content/border_bottom.gif +0 -0
  61. data/lib/buildmaster/site/templates/buildmaster/content/buildmaster.css +370 -0
  62. data/lib/buildmaster/site/templates/buildmaster/content/logo.gif +0 -0
  63. data/lib/buildmaster/site/templates/buildmaster/content/news-rss2.xml +4 -0
  64. data/lib/buildmaster/site/templates/buildmaster/content/print.css +65 -0
  65. data/lib/buildmaster/site/templates/buildmaster/content/ruby.css +14 -0
  66. data/lib/buildmaster/site/templates/buildmaster/template.html +121 -0
  67. data/lib/buildmaster/site/templates/cotta/content/border_bottom.gif +0 -0
  68. data/lib/buildmaster/site/templates/cotta/content/cotta.css +363 -0
  69. data/lib/buildmaster/site/templates/cotta/content/cotta.gif +0 -0
  70. data/lib/buildmaster/site/templates/cotta/content/news-rss2.xml +2 -0
  71. data/lib/buildmaster/site/templates/cotta/template.html +106 -0
  72. data/lib/buildmaster/site/xtemplate.rb +26 -0
  73. data/lib/buildmaster/version +1 -0
  74. data/test/buildmaster/common/tc_properties.rb +24 -0
  75. data/test/buildmaster/{tc_tree_to_object.rb → common/tc_tree_to_object.rb} +18 -18
  76. data/test/buildmaster/cotta/cotta_specifications.rb +88 -64
  77. data/test/buildmaster/cotta/physical_system_stub.rb +3 -3
  78. data/test/buildmaster/cotta/system_file_specifications.rb +38 -47
  79. data/test/buildmaster/cotta/tc_command_interface.rb +46 -0
  80. data/test/buildmaster/cotta/tc_command_runner.rb +28 -0
  81. data/test/buildmaster/cotta/tc_cotta.rb +35 -9
  82. data/test/buildmaster/cotta/tc_cotta_dir_in_memory.rb +10 -5
  83. data/test/buildmaster/cotta/tc_cotta_file_in_memory.rb +3 -3
  84. data/test/buildmaster/cotta/tc_in_memory_system.rb +7 -2
  85. data/test/buildmaster/cotta/tc_pathname.rb +22 -0
  86. data/test/buildmaster/cotta/tc_physical_system.rb +12 -2
  87. data/test/buildmaster/{build.xml → project/build.xml} +0 -0
  88. data/test/buildmaster/{manifest.mf → project/manifest.mf} +0 -0
  89. data/test/buildmaster/{tc_ant_driver.rb → project/tc_ant_driver.rb} +3 -3
  90. data/test/buildmaster/{tc_build_number_file.rb → project/tc_build_number_file.rb} +7 -7
  91. data/test/buildmaster/{tc_cvs_driver.rb → project/tc_cvs_driver.rb} +14 -14
  92. data/test/buildmaster/{tc_java_manifest.rb → project/tc_java_manifest.rb} +7 -7
  93. data/test/buildmaster/project/tc_release.rb +61 -0
  94. data/test/buildmaster/project/tc_server_manager.rb +70 -0
  95. data/test/buildmaster/project/tc_svn_driver.rb +104 -0
  96. data/test/buildmaster/project/tc_svn_status_info.rb +37 -0
  97. data/test/buildmaster/project/tc_version_number_file.rb +46 -0
  98. data/test/buildmaster/{windows → project/windows}/tc_iis_driver.rb +5 -4
  99. data/test/buildmaster/{windows → project/windows}/tc_sql_server_driver.rb +4 -4
  100. data/test/buildmaster/site/content/tc_content_engine_repository.rb +63 -0
  101. data/test/buildmaster/site/tc_element_processor_by_name.rb +29 -0
  102. data/test/buildmaster/site/tc_file_processor.rb +141 -0
  103. data/test/buildmaster/site/tc_site.rb +42 -11
  104. data/test/buildmaster/site/tc_site_server.rb +43 -0
  105. data/test/buildmaster/{tc_site_spec.rb → site/tc_site_spec.rb} +9 -9
  106. data/test/buildmaster/{tc_source_file_handler.rb → site/tc_source_file_handler.rb} +10 -9
  107. data/test/buildmaster/site/tc_template_builder.rb +23 -23
  108. data/test/buildmaster/site/tc_template_error.rb +15 -0
  109. data/test/buildmaster/{tc_template_runner.rb → site/tc_template_runner.rb} +22 -17
  110. data/test/buildmaster/site/tc_templatelets.rb +37 -0
  111. data/test/buildmaster/{tc_xtemplate.rb → site/tc_xtemplate.rb} +14 -15
  112. data/test/buildmaster/{template.xhtml → site/template.xhtml} +0 -0
  113. data/test/buildmaster/{templatelets → site/templatelets}/common_templatelet_test.rb +11 -7
  114. data/test/buildmaster/{templatelets → site/templatelets}/tc_attribute.rb +14 -10
  115. data/test/buildmaster/site/templatelets/tc_code.rb +132 -0
  116. data/test/buildmaster/{templatelets → site/templatelets}/tc_each.rb +25 -12
  117. data/test/buildmaster/{templatelets → site/templatelets}/tc_href.rb +6 -8
  118. data/test/buildmaster/{templatelets → site/templatelets}/tc_include.rb +3 -12
  119. data/test/buildmaster/{templatelets → site/templatelets}/tc_link.rb +11 -18
  120. data/test/buildmaster/{templatelets → site/templatelets}/tc_text.rb +2 -9
  121. data/test/buildmaster/{templatelets → site/templatelets}/tc_when.rb +8 -15
  122. data/test/manual/bms.rb +10 -0
  123. data/test/tmp/svn_test/repository/README.txt +5 -0
  124. data/test/tmp/svn_test/repository/conf/authz +21 -0
  125. data/test/tmp/svn_test/repository/conf/passwd +8 -0
  126. data/test/tmp/svn_test/repository/conf/svnserve.conf +30 -0
  127. data/test/tmp/svn_test/repository/db/current +1 -0
  128. data/test/tmp/svn_test/repository/db/format +1 -0
  129. data/test/tmp/svn_test/repository/db/fs-type +1 -0
  130. data/test/tmp/svn_test/repository/db/revprops/0 +5 -0
  131. data/test/tmp/svn_test/repository/db/revprops/1 +13 -0
  132. data/test/tmp/svn_test/repository/db/revprops/2 +13 -0
  133. data/test/tmp/svn_test/repository/db/revprops/3 +13 -0
  134. data/test/tmp/svn_test/repository/db/revprops/4 +13 -0
  135. data/test/tmp/svn_test/repository/db/revs/0 +11 -0
  136. data/test/tmp/svn_test/repository/db/revs/1 +25 -0
  137. data/test/tmp/svn_test/repository/db/revs/2 +29 -0
  138. data/test/tmp/svn_test/repository/db/revs/3 +33 -0
  139. data/test/tmp/svn_test/repository/db/revs/4 +0 -0
  140. data/test/tmp/svn_test/repository/db/uuid +1 -0
  141. data/test/tmp/svn_test/repository/db/write-lock +0 -0
  142. data/test/tmp/svn_test/repository/format +1 -0
  143. data/test/tmp/svn_test/repository/hooks/post-commit.tmpl +51 -0
  144. data/test/tmp/svn_test/repository/hooks/post-lock.tmpl +44 -0
  145. data/test/tmp/svn_test/repository/hooks/post-revprop-change.tmpl +56 -0
  146. data/test/tmp/svn_test/repository/hooks/post-unlock.tmpl +42 -0
  147. data/test/tmp/svn_test/repository/hooks/pre-commit.tmpl +70 -0
  148. data/test/tmp/svn_test/repository/hooks/pre-lock.tmpl +64 -0
  149. data/test/tmp/svn_test/repository/hooks/pre-revprop-change.tmpl +66 -0
  150. data/test/tmp/svn_test/repository/hooks/pre-unlock.tmpl +60 -0
  151. data/test/tmp/svn_test/repository/hooks/start-commit.tmpl +54 -0
  152. data/test/tmp/svn_test/repository/locks/db-logs.lock +3 -0
  153. data/test/tmp/svn_test/repository/locks/db.lock +3 -0
  154. data/test/tmp/svn_test/second/test.txt +1 -0
  155. data/test/tmp/svn_test/workdir/test.txt +1 -0
  156. data/test/ts_buildmaster.rb +0 -1
  157. metadata +168 -69
  158. data/lib/buildmaster.rb +0 -10
  159. data/lib/buildmaster/build_file.rb +0 -11
  160. data/lib/buildmaster/buildnumber +0 -1
  161. data/lib/buildmaster/file_processor.rb +0 -138
  162. data/lib/buildmaster/site_server.rb +0 -33
  163. data/lib/buildmaster/source_content.rb +0 -11
  164. data/lib/buildmaster/svn_driver.rb +0 -78
  165. data/lib/buildmaster/template_error.rb +0 -8
  166. data/lib/buildmaster/templatelets/attribute.rb +0 -16
  167. data/lib/buildmaster/xtemplate.rb +0 -27
  168. data/lib/mock.rb +0 -3
  169. data/lib/mock/mock_base.rb +0 -24
  170. data/test/buildmaster/tc_file_processor.rb +0 -125
  171. data/test/buildmaster/tc_svn_driver.rb +0 -81
  172. data/test/tmp/output/index.html +0 -8
  173. data/test/tmp/output/markdown.html +0 -8
  174. data/test/tmp/output/textile.html +0 -8
@@ -1,8 +1,8 @@
1
- $:.unshift File.join(File.dirname(__FILE__), "..", "..", "lib")
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "..", "lib", "buildmaster")
2
2
 
3
3
  require 'spec'
4
- require 'buildmaster'
5
- require 'buildmaster/cotta'
4
+ require 'project'
5
+ require 'cotta'
6
6
 
7
7
  module BuildMaster
8
8
 
@@ -1,10 +1,10 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'buildmaster')
2
2
 
3
3
  require 'spec'
4
4
 
5
- require 'buildmaster/build_number_file'
6
- require 'buildmaster/cotta'
7
- require 'buildmaster/cotta/in_memory_system'
5
+ require 'project/build_number_file'
6
+ require 'cotta'
7
+ require 'cotta/in_memory_system'
8
8
 
9
9
  module BuildMaster
10
10
  context 'BuildNumberFileTest' do
@@ -20,7 +20,7 @@ context 'BuildNumberFileTest' do
20
20
  path = @cotta.file('tmp/buildnumber')
21
21
  path.save(2)
22
22
  build_number = BuildNumberFile.new(path)
23
- build_number.number.should_equal 2
23
+ build_number.number.should == 2
24
24
  end
25
25
 
26
26
  specify 'increase_build' do
@@ -28,9 +28,9 @@ context 'BuildNumberFileTest' do
28
28
  path.save(3)
29
29
  build_number = BuildNumberFile.new(path)
30
30
  build_number.increase_build
31
- build_number.number.should_equal 4
31
+ build_number.number.should == 4
32
32
  reloaded = BuildNumberFile.new(path)
33
- reloaded.number.should_equal 4
33
+ reloaded.number.should == 4
34
34
  end
35
35
  end
36
36
  end
@@ -1,9 +1,9 @@
1
- $:.unshift File.join(File.dirname(__FILE__), "..", "..", "lib")
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "..", "lib", 'buildmaster')
2
2
 
3
3
  require 'spec'
4
- require 'buildmaster'
5
- require 'buildmaster/cotta'
6
- require 'buildmaster/cotta/in_memory_system'
4
+ require 'cotta'
5
+ require 'cotta/in_memory_system'
6
+ require 'cvs_driver'
7
7
 
8
8
  module BuildMaster
9
9
 
@@ -29,34 +29,34 @@ context 'CvsDriverTest' do
29
29
  folder.file('ROOT').save(root)
30
30
  folder.file('Repository').save(repository)
31
31
  cvs = CvsInfo.load(folder)
32
- cvs.root.should_equal root
33
- cvs.repository.should_equal repository
32
+ cvs.root.should == root
33
+ cvs.repository.should == repository
34
34
  end
35
35
 
36
36
  specify 'checkout' do
37
+ @system.output_for_command 'cvs -d root co -d working module', ''
37
38
  client = CvsDriver.new(CvsInfo.new('root', 'module'), @working)
38
39
  client.checkout
39
- @system.executed_commands.size.should_equal 1
40
- @system.executed_commands[0].should_equal 'cvs -d root co -d working module'
40
+ @system.executed_commands.size.should == 1
41
41
  end
42
42
 
43
43
  specify 'update' do
44
+ @system.output_for_command 'cvs -d root update working', ''
45
+ @system.output_for_command 'cvs -d root update -PAd working', ''
44
46
  log = ''
45
47
  client = CvsDriver.new(CvsInfo.new('root', 'module'), @working)
46
48
  client.update
47
- @system.executed_commands.size.should_equal 1
48
- @system.executed_commands[0].should_equal 'cvs -d root update working'
49
+ @system.executed_commands.size.should == 1
49
50
  client.update('-PAd')
50
- @system.executed_commands.size.should_equal 2
51
- @system.executed_commands[1].should_equal 'cvs -d root update -PAd working'
51
+ @system.executed_commands.size.should == 2
52
52
  end
53
53
 
54
54
  specify 'command' do
55
+ @system.output_for_command 'cvs -d root command -option argument working', ''
55
56
  log = ''
56
57
  client = CvsDriver.new(CvsInfo.new('root', 'module'), @working)
57
58
  client.command('command -option argument')
58
- @system.executed_commands.size.should_equal 1
59
- @system.executed_commands[0].should_equal 'cvs -d root command -option argument working'
59
+ @system.executed_commands.size.should == 1
60
60
  end
61
61
 
62
62
  end
@@ -1,9 +1,9 @@
1
- $:.unshift File.join(File.dirname(__FILE__), "..", "..", "lib")
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "..", "lib", 'buildmaster')
2
2
 
3
3
  require 'spec'
4
- require 'buildmaster'
5
- require 'buildmaster/cotta'
6
- require 'buildmaster/cotta/in_memory_system'
4
+ require 'cotta'
5
+ require 'cotta/in_memory_system'
6
+ require 'java_manifest'
7
7
 
8
8
  module BuildMaster
9
9
 
@@ -28,7 +28,7 @@ CONTENT
28
28
  )
29
29
  manifest = JavaManifest.new(file)
30
30
  version = manifest.version
31
- "2.3.3".should_equal version.number
31
+ "2.3.3".should == version.number
32
32
  end
33
33
 
34
34
  specify 'increase_build' do
@@ -44,8 +44,8 @@ CONTENT
44
44
  manifest = JavaManifest.new(file)
45
45
  build_number = manifest.version.build
46
46
  version = manifest.increase_build
47
- (build_number + 1).should_equal version.build
48
- manifest.version.build.should_equal version.build
47
+ (build_number + 1).should == version.build
48
+ manifest.version.build.should == version.build
49
49
  end
50
50
  end
51
51
  end
@@ -0,0 +1,61 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'buildmaster', 'build')
2
+
3
+ require 'release'
4
+ require 'spec'
5
+
6
+ module BuildMaster
7
+
8
+ context 'release management' do
9
+ specify 'run tasks in order' do
10
+ mock = mock('tasks')
11
+ mock.should_receive(:one).once.ordered
12
+ mock.should_receive(:two).once.ordered
13
+ release = Release.new
14
+ release.task('one') {mock.one}
15
+ release.task('two') {mock.two}
16
+ release.execute
17
+ end
18
+
19
+ specify 'run task from specified step in order' do
20
+ mock = mock('tasks')
21
+ mock.should_receive(:two).once.ordered
22
+ mock.should_receive(:three).once.ordered
23
+ release = Release.new
24
+ release.task('one') {mock.one}
25
+ release.task('two') {mock.two}
26
+ release.task('three') {mock.three}
27
+ release.execute('two')
28
+ end
29
+
30
+ specify 'run tasks between two' do
31
+ mock = mock('tasks')
32
+ mock.should_receive(:two).once.ordered
33
+ mock.should_receive(:three).once.ordered
34
+ release = Release.new
35
+ release.task('one') {mock.one}
36
+ release.task('two') {mock.two}
37
+ release.task('three') {mock.three}
38
+ release.task('four') {mock.four}
39
+ release.execute('two', 'three')
40
+ end
41
+
42
+ specify 'don\'t allow duplicate tasks' do
43
+ release = Release.new
44
+ release.task('one') {}
45
+ Proc.new {release.task('one')}.should_raise RuntimeError
46
+ end
47
+
48
+ specify 'raise error for task not found' do
49
+ release = Release.new
50
+ release.task('two') {}
51
+ Proc.new {release.execute('one')}.should_raise RuntimeError
52
+ end
53
+
54
+ specify 'raise error for empty task' do
55
+ release = Release.new
56
+ Proc.new {release.execute}.should_raise RuntimeError
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec'
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'buildmaster')
4
+
5
+ require 'project/server_manager'
6
+
7
+ module BuildMaster
8
+ class StubServer
9
+ def initialize
10
+ @count = 0
11
+ end
12
+
13
+ def start
14
+ end
15
+
16
+ def stop
17
+ @count = 0
18
+ end
19
+
20
+ def running?
21
+ if (@count == 3)
22
+ return true
23
+ end
24
+ @count = @count + 1
25
+ return false
26
+ end
27
+ end
28
+
29
+ context 'server manager' do
30
+ specify 'server manager default to stopped status' do
31
+ ServerManager.new(mock('server')).status.should == 'stopped'
32
+ end
33
+
34
+ specify 'launch server' do
35
+ server = mock('server')
36
+ server.should_receive(:start)
37
+ server.should_receive(:running?).and_return(true)
38
+ manager = ServerManager.new(server)
39
+ manager.start
40
+ manager.status.should == 'started'
41
+ end
42
+
43
+ specify 'keep checking server to see if it is running' do
44
+ manager = ServerManager.new(StubServer.new)
45
+ manager.start
46
+ manager.status.should == 'started'
47
+ end
48
+
49
+ specify 'stop and wait until it is not runnig anymore' do
50
+ manager = ServerManager.new(StubServer.new)
51
+ manager.start
52
+ manager.stop
53
+ manager.status.should == 'stopped'
54
+ end
55
+
56
+ specify 'raise error if start failed' do
57
+ server = mock('server that fails on start')
58
+ server.should_receive(:start).and_raise 'error'
59
+ server.should_receive(:running?).any_number_of_times.and_return(false)
60
+ manager = ServerManager.new(server)
61
+ begin
62
+ manager.start
63
+ fail('should have raised error')
64
+ rescue
65
+ ensure
66
+ manager.status.should == 'error'
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,104 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "..", "lib", 'buildmaster')
2
+
3
+ require 'spec'
4
+ require 'svn_admin_driver'
5
+ require 'cotta'
6
+ require 'cotta/in_memory_system'
7
+
8
+ module BuildMaster
9
+
10
+ context 'SVN drivers' do
11
+ setup do
12
+ file = File.expand_path(__FILE__)
13
+ test_dir = Cotta.new.file(file).parent.parent.parent.dir('tmp/svn_test')
14
+ test_dir.delete if (test_dir.exists?)
15
+ test_dir.mkdirs
16
+ @repository = test_dir.dir('repository')
17
+ @url = "file:///#{@repository.path}"
18
+ @svn_admin = SvnAdminDriver.new(@repository.path)
19
+ @svn_admin.create
20
+ @work_dir_root = test_dir.dir('workdir')
21
+ @svn = SvnDriver.new @work_dir_root
22
+ end
23
+
24
+ specify 'check out, add, commit, update' do
25
+ second = @work_dir_root.parent.dir('second')
26
+ second_svn = SvnDriver.new(second)
27
+ @svn.checkout(@url)
28
+ second_svn.checkout(@url)
29
+ @work_dir_root.file('test.txt').save('my testing content')
30
+ @svn.add(@work_dir_root.file('test.txt'))
31
+ @svn.commit('testing the checkin')
32
+ second_svn.update
33
+ second.file('test.txt').load.should == 'my testing content'
34
+ end
35
+
36
+ =begin
37
+ def expect_info
38
+ @system.should_receive(:shell).with("svn info #{@work_dir_root.path}").and_return(<<CONTENT
39
+ Path: .
40
+ URL: svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster/trunk
41
+ Repository Root: svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster
42
+ Repository UUID: ab7ff8c2-9713-0410-a269-a4b56b3120d2
43
+ Revision: 153
44
+ Node Kind: directory
45
+ Schedule: normal
46
+ Last Changed Author: wolfdancer
47
+ Last Changed Rev: 153
48
+ Last Changed Date: 2006-10-15 21:27:51 -0700 (Sun, 15 Oct 2006)
49
+ CONTENT
50
+ )
51
+ end
52
+
53
+ specify 'load svn info from the info command' do
54
+ expect_info
55
+ @svn.work_dir.should == @work_dir_root
56
+ @svn.repository_root.should == 'svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster'
57
+ end
58
+
59
+ specify 'svn status command' do
60
+ log = ''
61
+ @system.should_receive(:shell).with "svn status #{@work_dir_root.path}"
62
+ @svn.status
63
+ end
64
+
65
+ specify 'svn update command' do
66
+ log = ''
67
+ @system.should_receive(:shell).with "svn update #{@work_dir_root.path}"
68
+ @svn.update
69
+ end
70
+
71
+ specify 'svn commit command' do
72
+ @system.should_receive(:shell).with "svn commit #{@work_dir_root.path} -m \"message\""
73
+ @svn.commit('message')
74
+ end
75
+
76
+ specify 'svn check out command' do
77
+ expect_info
78
+ repository_root = @svn.repository_root
79
+ @system.should_receive(:shell).with "svn checkout #{repository_root}/trunk output"
80
+ @svn.checkout('output')
81
+ end
82
+
83
+ specify 'svn command' do
84
+ @system.should_receive(:shell).with "svn info #{@work_dir_root.path}"
85
+ @svn.command('info')
86
+ end
87
+
88
+ specify 'svn tag' do
89
+ expect_info
90
+ tag = 'build_0.0.5_b3'
91
+ @system.should_receive(:shell).with("svn copy #{@svn.repository_root}/trunk #{@svn.repository_root}/tags/#{tag} -m \"ruby buildmaster\"")
92
+ @svn.tag(tag)
93
+ end
94
+
95
+ specify 'physical svn works' do
96
+ cotta = Cotta.new
97
+ svn = SvnDriver.new(cotta.file(__FILE__).parent)
98
+ svn.repository_root.should == 'svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster'
99
+ end
100
+ =end
101
+
102
+ end
103
+
104
+ end
@@ -0,0 +1,37 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib', 'buildmaster')
2
+
3
+ require 'spec'
4
+ require 'svn_status_info'
5
+
6
+ module BuildMaster
7
+
8
+ context 'svn status info' do
9
+ specify 'parse local changes' do
10
+ content = <<CONTENT
11
+ <?xml version="1.0"?>
12
+ <status>
13
+ <target
14
+ path=".">
15
+ <entry
16
+ path="pathone">
17
+ <wc-status
18
+ props="none"
19
+ item="unversioned">
20
+ </wc-status>
21
+ </entry>
22
+ <entry
23
+ path="pathtwo">
24
+ <wc-status
25
+ props="none"
26
+ item="unversioned">
27
+ </wc-status>
28
+ </entry>
29
+ </target>
30
+ </status>
31
+ CONTENT
32
+ info = SvnStatusInfo.parse_xml(content)
33
+ info.should_have(2).unversioned
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,46 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'buildmaster')
2
+
3
+ require 'spec'
4
+
5
+ require 'project/version_number_file'
6
+ require 'cotta'
7
+ require 'cotta/in_memory_system'
8
+
9
+ module BuildMaster
10
+ context 'BuildNumberFileTest' do
11
+ setup do
12
+ @cotta = Cotta.new(InMemorySystem.new)
13
+ end
14
+
15
+ teardown do
16
+ @cotta = nil
17
+ end
18
+
19
+ specify 'load_file' do
20
+ path = @cotta.file('tmp/versionnumber')
21
+ path.save('1.5.50')
22
+ version_number = VersionNumberFile.new(path)
23
+ version_number.build_number.should == 50
24
+ version_number.version_number.should == '1.5.50'
25
+ end
26
+
27
+ specify 'increase_build' do
28
+ path = @cotta.file('tmp/buildnumber')
29
+ path.save('2.9.1')
30
+ version_number = VersionNumberFile.new(path)
31
+ version_number.increase_build
32
+ version_number.build_number.should == 2
33
+ version_number.version_number.should == '2.9.2'
34
+ reloaded = VersionNumberFile.new(path)
35
+ reloaded.build_number.should == 2
36
+ end
37
+
38
+ specify 'handle file with only major and minor version number' do
39
+ path = @cotta.file('tmp/version')
40
+ path.save('2.2')
41
+ version_number = VersionNumberFile.new(path)
42
+ version_number.build_number.should == 0
43
+ version_number.version_number.should == '2.2.0'
44
+ end
45
+ end
46
+ end