BuildMaster 0.9.1 → 1.0.6

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 (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