BuildMaster 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +11 -6
- data/lib/buildmaster/ant_driver.rb +1 -1
- data/lib/buildmaster/buildnumber +1 -1
- data/lib/buildmaster/cotta/cotta_dir.rb +10 -0
- data/lib/buildmaster/cotta/cotta_file.rb +2 -2
- data/lib/buildmaster/cotta/in_memory_system.rb +45 -2
- data/lib/buildmaster/cotta/physical_system.rb +16 -2
- data/lib/buildmaster/svn_driver.rb +39 -32
- data/test/buildmaster/cotta/cotta_specifications.rb +25 -0
- data/test/buildmaster/cotta/physical_system_stub.rb +16 -4
- data/test/buildmaster/cotta/system_file_specifications.rb +38 -5
- data/test/buildmaster/tc_svn_driver.rb +31 -37
- metadata +2 -2
data/README
CHANGED
@@ -1,14 +1,19 @@
|
|
1
|
-
= BuildMaster - Building and releasing project and site with Ruby
|
1
|
+
= BuildMaster[http://buildmaster.rubyforge.org] - Building and releasing project and site with Ruby
|
2
2
|
|
3
3
|
Homepage:: http://buildmaster.rubyforge.org
|
4
4
|
Author:: Shane
|
5
5
|
Copyright:: (c) 2006 BuildMaster on rubyforge
|
6
6
|
License:: Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
|
7
7
|
|
8
|
-
BuildMaster is a project that targets project building,
|
8
|
+
BuildMaster[http://buildmaster.rubyforge.org] is a project that targets project building,
|
9
|
+
releasing and site building.
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
This rDoc is intended for you the check out the available methods on the objects. For a full
|
12
|
+
document of what BuildMaster[http://buildmaster.rubyforge.org] can do for you, please check out
|
13
|
+
BuildMaster[http://buildmaster.rubyforge.org]'s home page:
|
14
|
+
http://buildmaster.rubyforge.org
|
15
|
+
|
16
|
+
Please post your question at mailing-list[http://groups.google.com/group/buildmaster/]
|
12
17
|
|
13
18
|
== Project Building and Releasing
|
14
19
|
|
@@ -20,8 +25,8 @@ A ruby version of the project building and releasing script as described in
|
|
20
25
|
A simple template engine that can build a website by producing the content pages based on the specified source
|
21
26
|
and decrorating the content pages with a skin.
|
22
27
|
|
23
|
-
The supported content sources are
|
24
|
-
|
28
|
+
The supported content sources are XHTML[http://www.w3.org/TR/xhtml11/], Textile[http://hobix.com/textile/] and
|
29
|
+
Markdown[http://daringfireball.net/projects/markdown/].
|
25
30
|
|
26
31
|
== Cotta
|
27
32
|
|
@@ -54,7 +54,7 @@ class AntDriver
|
|
54
54
|
end
|
55
55
|
all_arguments = Array.new()
|
56
56
|
all_arguments.push(@ant_options)
|
57
|
-
all_arguments.push('-classpath', local_path)
|
57
|
+
all_arguments.push('-classpath', "\"#{local_path}\"")
|
58
58
|
all_arguments.push("-Dant.home=#{@ant_home.path}")
|
59
59
|
all_arguments.push('org.apache.tools.ant.launch.Launcher', @ant_arguments);
|
60
60
|
all_arguments.push('-f', @ant_file.path) if @ant_file
|
data/lib/buildmaster/buildnumber
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
41
|
@@ -51,6 +51,16 @@ class CottaDir
|
|
51
51
|
@system.delete_dir(@path)
|
52
52
|
end
|
53
53
|
|
54
|
+
def move_to(target)
|
55
|
+
target.parent.mkdirs
|
56
|
+
@system.move_dir(@path, target.path)
|
57
|
+
end
|
58
|
+
|
59
|
+
def copy_to(target)
|
60
|
+
target.parent.mkdirs
|
61
|
+
@system.copy_dir(@path, target.path)
|
62
|
+
end
|
63
|
+
|
54
64
|
def list
|
55
65
|
@system.list(@path).collect do |item|
|
56
66
|
candidate = dir(item)
|
@@ -35,12 +35,12 @@ class CottaFile
|
|
35
35
|
|
36
36
|
def copy_to(target_file)
|
37
37
|
target_file.parent.mkdirs
|
38
|
-
@system.
|
38
|
+
@system.copy_file(path, target_file.path)
|
39
39
|
end
|
40
40
|
|
41
41
|
def move_to(target_file)
|
42
42
|
target_file.parent.mkdirs
|
43
|
-
@system.
|
43
|
+
@system.move_file(path, target_file.path)
|
44
44
|
end
|
45
45
|
|
46
46
|
def save(content = '')
|
@@ -14,11 +14,22 @@ class InMemorySystem
|
|
14
14
|
@file_system = Hash.new
|
15
15
|
@file_system[Pathname.new('/')] = DirectoryContent.new('/')
|
16
16
|
@file_system[Pathname.new('.')] = DirectoryContent.new('.')
|
17
|
+
@output_map = Hash.new
|
17
18
|
end
|
18
19
|
|
19
20
|
def shell(command)
|
20
21
|
@executed_commands.push(command)
|
21
22
|
end
|
23
|
+
|
24
|
+
def shell_output(command)
|
25
|
+
result = @output_map[command]
|
26
|
+
raise "#{command} not found in expectation" unless result
|
27
|
+
return result
|
28
|
+
end
|
29
|
+
|
30
|
+
def output_for_command(command, output)
|
31
|
+
@output_map[command] = output
|
32
|
+
end
|
22
33
|
|
23
34
|
def dir_exists?(pathname)
|
24
35
|
content = path_content(pathname)
|
@@ -45,15 +56,35 @@ class InMemorySystem
|
|
45
56
|
end
|
46
57
|
|
47
58
|
def copy(source, target)
|
59
|
+
copy_file(source, target)
|
60
|
+
end
|
61
|
+
|
62
|
+
def copy_file(source, target)
|
48
63
|
file_content = retrieve_file_content(source, 'r').content
|
49
64
|
create_file(target).content = file_content.clone
|
50
65
|
end
|
51
66
|
|
52
67
|
def move(source, target)
|
68
|
+
move_file(source, target)
|
69
|
+
end
|
70
|
+
|
71
|
+
def move_file(source, target)
|
53
72
|
copy(source, target)
|
54
73
|
delete_file(source)
|
55
74
|
end
|
56
75
|
|
76
|
+
def copy_dir(source, target)
|
77
|
+
mkdir(target)
|
78
|
+
path_content(source).children.each do |item|
|
79
|
+
item.copy_to_dir(self, source, target)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def move_dir(source, target)
|
84
|
+
copy_dir(source, target)
|
85
|
+
delete_dir(source)
|
86
|
+
end
|
87
|
+
|
57
88
|
def delete_file(pathname)
|
58
89
|
raise Errno::ENOENT.new(pathname) unless file_exists? pathname
|
59
90
|
delete_entry(pathname)
|
@@ -87,6 +118,8 @@ class InMemorySystem
|
|
87
118
|
|
88
119
|
def create_file(pathname)
|
89
120
|
content = FileContent.new(pathname.basename.to_s)
|
121
|
+
parent_dir = pathname.parent
|
122
|
+
path_content(parent_dir).add(content)
|
90
123
|
@file_system[pathname] = content
|
91
124
|
return content
|
92
125
|
end
|
@@ -101,9 +134,7 @@ class InMemorySystem
|
|
101
134
|
if (options =~ /r/)
|
102
135
|
raise Errno::ENOENT.new(pathname)
|
103
136
|
end
|
104
|
-
parent_dir = pathname.parent
|
105
137
|
file_content = create_file(pathname)
|
106
|
-
path_content(parent_dir).add(file_content)
|
107
138
|
end
|
108
139
|
return file_content
|
109
140
|
end
|
@@ -138,6 +169,12 @@ class DirectoryContent
|
|
138
169
|
def delete(name)
|
139
170
|
@children.delete_if {|file_content| file_content.name == name}
|
140
171
|
end
|
172
|
+
|
173
|
+
def copy_to_dir(system, parent_dir, target_dir)
|
174
|
+
source_path = parent_dir.join(name)
|
175
|
+
target_path = target_dir.join(name)
|
176
|
+
system.copy_dir(source_path, target_path)
|
177
|
+
end
|
141
178
|
end
|
142
179
|
|
143
180
|
class FileContent
|
@@ -156,5 +193,11 @@ class FileContent
|
|
156
193
|
def directory?
|
157
194
|
return false
|
158
195
|
end
|
196
|
+
|
197
|
+
def copy_to_dir(system, parent_dir, target_dir)
|
198
|
+
target_path = target_dir.join(name)
|
199
|
+
source_path = parent_dir.join(name)
|
200
|
+
system.copy_file(source_path, target_path)
|
201
|
+
end
|
159
202
|
end
|
160
203
|
end
|
@@ -10,9 +10,15 @@ class PhysicalSystem
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def shell(command)
|
13
|
+
puts "$> #{command}"
|
13
14
|
raise CommandError.new, command, caller unless system(command)
|
14
15
|
end
|
15
16
|
|
17
|
+
def shell_output(command)
|
18
|
+
puts "$> #{command}"
|
19
|
+
`#{command}`
|
20
|
+
end
|
21
|
+
|
16
22
|
def environment!(variable)
|
17
23
|
value = ENV[variable]
|
18
24
|
raise "#{variable} environment variable not found" unless value
|
@@ -53,12 +59,20 @@ class PhysicalSystem
|
|
53
59
|
return Dir.delete(dir_path)
|
54
60
|
end
|
55
61
|
|
56
|
-
def
|
62
|
+
def copy_file(source, target)
|
57
63
|
FileUtils.copy(source, target)
|
58
64
|
end
|
59
65
|
|
60
|
-
def
|
66
|
+
def move_file(source, target)
|
61
67
|
FileUtils.move(source, target)
|
62
68
|
end
|
69
|
+
|
70
|
+
def copy_dir(source, target)
|
71
|
+
FileUtils.copy_entry(source, target)
|
72
|
+
end
|
73
|
+
|
74
|
+
def move_dir(source, target)
|
75
|
+
FileUtils.mv(source, target)
|
76
|
+
end
|
63
77
|
end
|
64
78
|
end
|
@@ -3,39 +3,30 @@ require 'rexml/document'
|
|
3
3
|
|
4
4
|
module BuildMaster
|
5
5
|
|
6
|
-
class SvnInfo
|
7
|
-
attr_reader :work_dir, :repository_root
|
8
|
-
|
9
|
-
def initialize(work_dir)
|
10
|
-
@work_dir = work_dir
|
11
|
-
entries = work_dir.dir('.svn').file('entries')
|
12
|
-
analyze_entry_file(entries)
|
13
|
-
end
|
14
|
-
|
15
|
-
def analyze_entry_file(entry_file)
|
16
|
-
@repository_root = entry_file.read do |file|
|
17
|
-
parse_xml_load_repository_root(file)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
def parse_xml_load_repository_root(file)
|
23
|
-
xml = REXML::Document.new(file)
|
24
|
-
xml.root.each_element_with_attribute('name', '', 1) do |element|
|
25
|
-
return element.attributes['repos']
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
6
|
class SvnDriver
|
32
7
|
def SvnDriver::from_path(directory)
|
33
|
-
return SvnDriver.new(
|
8
|
+
return SvnDriver.new(directory)
|
34
9
|
end
|
35
10
|
|
36
|
-
|
37
|
-
|
38
|
-
|
11
|
+
attr_reader :work_dir, :repository_url
|
12
|
+
|
13
|
+
def initialize(work_dir, repository_root = nil, repository_url = nil)
|
14
|
+
@system = work_dir.system
|
15
|
+
@work_dir = work_dir
|
16
|
+
@repository_root = repository_root
|
17
|
+
@repository_url = repository_url
|
18
|
+
end
|
19
|
+
|
20
|
+
def repository_root
|
21
|
+
load_svn_info unless @repository_root
|
22
|
+
return @repository_root
|
23
|
+
end
|
24
|
+
|
25
|
+
def repository_url
|
26
|
+
if (not @repository_url)
|
27
|
+
@repository_url = "#{repository_root}/trunk"
|
28
|
+
end
|
29
|
+
return @repository_url
|
39
30
|
end
|
40
31
|
|
41
32
|
def status
|
@@ -51,11 +42,11 @@ class SvnDriver
|
|
51
42
|
end
|
52
43
|
|
53
44
|
def tag(tag_name)
|
54
|
-
@system.shell("svn copy #{
|
45
|
+
@system.shell("svn copy #{repository_url} #{repository_root}/tags/#{tag_name} -m \"ruby buildmaster\"")
|
55
46
|
end
|
56
47
|
|
57
48
|
def checkout(output)
|
58
|
-
@system.shell("svn checkout #{
|
49
|
+
@system.shell("svn checkout #{repository_root}/trunk #{output}")
|
59
50
|
end
|
60
51
|
|
61
52
|
def command(command)
|
@@ -63,8 +54,24 @@ class SvnDriver
|
|
63
54
|
end
|
64
55
|
|
65
56
|
private
|
57
|
+
def load_svn_info
|
58
|
+
info = @system.shell_output("svn info #{work_dir.path}")
|
59
|
+
StringIO.new(info).each_line do |line|
|
60
|
+
index = line.index(':')
|
61
|
+
if (index)
|
62
|
+
property = line[0, index].strip
|
63
|
+
value = line[index + 1, line.length - index - 1].strip
|
64
|
+
if (property == 'Repository Root')
|
65
|
+
@repository_root = value
|
66
|
+
elsif (property == 'URL')
|
67
|
+
@repository_url = value
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
66
73
|
def command_for_path(svn_command, argument='')
|
67
|
-
@system.shell("svn #{svn_command} #{@
|
74
|
+
@system.shell("svn #{svn_command} #{@work_dir.path}#{argument}")
|
68
75
|
end
|
69
76
|
end
|
70
77
|
|
@@ -167,6 +167,31 @@ def register_cotta_dir_specifications
|
|
167
167
|
actual_dir_list[1].name.should_equal 'one.txt'
|
168
168
|
actual_dir_list[1].save
|
169
169
|
end
|
170
|
+
|
171
|
+
specify 'should move directory with its children' do
|
172
|
+
dir = BuildMaster::CottaDir.new(@system, Pathname.new('targetdir/child_dir'))
|
173
|
+
@dir.file('file.txt').save('file.txt')
|
174
|
+
@dir.dir('subdir').mkdirs
|
175
|
+
@dir.list.size.should_equal 2
|
176
|
+
@dir.move_to(dir)
|
177
|
+
@dir.exists?.should_equal false
|
178
|
+
dir.list.size.should_equal 2
|
179
|
+
dir.file('file.txt').load.should_equal 'file.txt'
|
180
|
+
dir.dir('subdir').exists?.should_equal true
|
181
|
+
end
|
182
|
+
|
183
|
+
specify 'should copy directory with its children' do
|
184
|
+
dir = BuildMaster::CottaDir.new(@system, Pathname.new('targetdir/child_dir'))
|
185
|
+
@dir.file('file.txt').save('file.txt')
|
186
|
+
@dir.dir('subdir').mkdirs
|
187
|
+
@dir.list.size.should_equal 2
|
188
|
+
@dir.copy_to(dir)
|
189
|
+
@dir.exists?.should_equal true
|
190
|
+
dir.list.size.should_equal 2
|
191
|
+
dir.file('file.txt').load.should_equal 'file.txt'
|
192
|
+
dir.dir('subdir').exists?.should_equal true
|
193
|
+
end
|
194
|
+
|
170
195
|
end
|
171
196
|
|
172
197
|
end
|
@@ -47,12 +47,24 @@ class PhysicalSystemStub
|
|
47
47
|
@system.io(relative_from_tmp(pathname), arguments)
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
51
|
-
@system.
|
50
|
+
def copy_file(source, target)
|
51
|
+
@system.copy_file(relative_from_tmp(source), relative_from_tmp(target))
|
52
52
|
end
|
53
53
|
|
54
|
-
def
|
55
|
-
@system.
|
54
|
+
def move_file(source, target)
|
55
|
+
@system.move_file(relative_from_tmp(source), relative_from_tmp(target))
|
56
|
+
end
|
57
|
+
|
58
|
+
def copy_dir(source, target)
|
59
|
+
@system.copy_dir(relative_from_tmp(source), relative_from_tmp(target))
|
60
|
+
end
|
61
|
+
|
62
|
+
def move_dir(source, target)
|
63
|
+
@system.move_dir(relative_from_tmp(source), relative_from_tmp(target))
|
64
|
+
end
|
65
|
+
|
66
|
+
def copy_dir(source, target)
|
67
|
+
@system.copy_dir(relative_from_tmp(source), relative_from_tmp(target))
|
56
68
|
end
|
57
69
|
|
58
70
|
private
|
@@ -98,7 +98,7 @@ require 'pathname'
|
|
98
98
|
write_io.puts 'line'
|
99
99
|
write_io.close
|
100
100
|
target = Pathname.new('target')
|
101
|
-
@system.
|
101
|
+
@system.copy_file(pathname, target)
|
102
102
|
@system.file_exists?(target).should_equal true
|
103
103
|
read_io = load_io(target, 'r')
|
104
104
|
read_io.gets.should_equal "line\n"
|
@@ -107,11 +107,9 @@ require 'pathname'
|
|
107
107
|
|
108
108
|
specify 'move file' do
|
109
109
|
pathname = Pathname.new('file1')
|
110
|
-
|
111
|
-
write_io.puts 'line'
|
112
|
-
write_io.close
|
110
|
+
write_content(pathname, 'line')
|
113
111
|
target = Pathname.new('target')
|
114
|
-
@system.
|
112
|
+
@system.move_file(pathname, target)
|
115
113
|
@system.file_exists?(target).should_equal true
|
116
114
|
read_io = load_io(target, 'r')
|
117
115
|
read_io.gets.should_equal "line\n"
|
@@ -119,6 +117,41 @@ require 'pathname'
|
|
119
117
|
@system.file_exists?(pathname).should_equal false
|
120
118
|
end
|
121
119
|
|
120
|
+
specify 'move dir' do
|
121
|
+
source = Pathname.new('source')
|
122
|
+
@system.mkdir source
|
123
|
+
source_file = Pathname.new('source/file.txt')
|
124
|
+
write_content(source_file, 'file.txt')
|
125
|
+
@system.mkdir source.join('subdir')
|
126
|
+
target = Pathname.new('target')
|
127
|
+
@system.move_dir(source, target)
|
128
|
+
@system.list(target).size.should_equal 2
|
129
|
+
@system.dir_exists?(source).should_equal false
|
130
|
+
@system.dir_exists?(target).should_equal true
|
131
|
+
@system.file_exists?(Pathname.new('target/file.txt')).should_equal true
|
132
|
+
@system.dir_exists?(Pathname.new('target/subdir')).should_equal true
|
133
|
+
end
|
134
|
+
|
135
|
+
specify 'copy dir' do
|
136
|
+
source = Pathname.new('source')
|
137
|
+
@system.mkdir source
|
138
|
+
source_file = Pathname.new('source/file.txt')
|
139
|
+
write_content(source_file, 'file.txt')
|
140
|
+
@system.mkdir source.join('subdir')
|
141
|
+
target = Pathname.new('target')
|
142
|
+
@system.copy_dir(source, target)
|
143
|
+
@system.list(target).size.should_equal 2
|
144
|
+
@system.dir_exists?(source).should_equal true
|
145
|
+
@system.dir_exists?(target).should_equal true
|
146
|
+
@system.file_exists?(Pathname.new('target/file.txt')).should_equal true
|
147
|
+
end
|
148
|
+
|
149
|
+
def write_content(pathname, content)
|
150
|
+
write_io = load_io(pathname, 'w')
|
151
|
+
write_io.puts content
|
152
|
+
write_io.close
|
153
|
+
end
|
154
|
+
|
122
155
|
end
|
123
156
|
def load_io(*args)
|
124
157
|
io = @system.io(*args)
|
@@ -12,74 +12,68 @@ context 'SVN drivers' do
|
|
12
12
|
@system = InMemorySystem.new
|
13
13
|
cotta = Cotta.new(@system)
|
14
14
|
@work_dir_root = cotta.dir('/workdir')
|
15
|
-
@
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
uuid="ab7ff8c2-9713-0410-a269-a4b56b3120d2"
|
27
|
-
repos="svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster"
|
28
|
-
prop-time="2006-09-05T06:49:40.625000Z"
|
29
|
-
revision="120"/>
|
30
|
-
</wc-entries>
|
15
|
+
@system.output_for_command("svn info #{@work_dir_root.path}", <<CONTENT
|
16
|
+
Path: .
|
17
|
+
URL: svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster/trunk
|
18
|
+
Repository Root: svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster
|
19
|
+
Repository UUID: ab7ff8c2-9713-0410-a269-a4b56b3120d2
|
20
|
+
Revision: 153
|
21
|
+
Node Kind: directory
|
22
|
+
Schedule: normal
|
23
|
+
Last Changed Author: wolfdancer
|
24
|
+
Last Changed Rev: 153
|
25
|
+
Last Changed Date: 2006-10-15 21:27:51 -0700 (Sun, 15 Oct 2006)
|
31
26
|
CONTENT
|
32
|
-
|
27
|
+
)
|
28
|
+
@svn = SvnDriver.new @work_dir_root
|
33
29
|
end
|
34
30
|
|
35
|
-
specify 'load svn info from the
|
36
|
-
|
37
|
-
|
38
|
-
info.repository_root.should_equal 'svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster'
|
31
|
+
specify 'load svn info from the info command' do
|
32
|
+
@svn.work_dir.should_equal @work_dir_root
|
33
|
+
@svn.repository_root.should_equal 'svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster'
|
39
34
|
end
|
40
35
|
|
41
36
|
specify 'load svn driver from the root directory' do
|
42
|
-
svn
|
43
|
-
svn.command('info')
|
37
|
+
@svn.command('info')
|
44
38
|
end
|
45
39
|
|
46
40
|
specify 'svn status command' do
|
47
41
|
log = ''
|
48
|
-
svn
|
49
|
-
svn.status
|
42
|
+
@svn.status
|
50
43
|
@system.executed_commands[0].should_equal "svn status #{@work_dir_root.path}"
|
51
44
|
end
|
52
45
|
|
53
46
|
specify 'svn update command' do
|
54
47
|
log = ''
|
55
|
-
svn
|
56
|
-
svn.update
|
48
|
+
@svn.update
|
57
49
|
@system.executed_commands[0].should_equal "svn update #{@work_dir_root.path}"
|
58
50
|
end
|
59
51
|
|
60
52
|
specify 'svn commit command' do
|
61
|
-
svn
|
62
|
-
svn.commit('message')
|
53
|
+
@svn.commit('message')
|
63
54
|
@system.executed_commands[0].should_equal "svn commit #{@work_dir_root.path} -m \"message\""
|
64
55
|
end
|
65
56
|
|
66
57
|
specify 'svn check out command' do
|
67
|
-
svn
|
68
|
-
svn.
|
69
|
-
@system.executed_commands[0].should_equal "svn checkout #{@info.repository_root}/trunk output"
|
58
|
+
@svn.checkout('output')
|
59
|
+
@system.executed_commands[0].should_equal "svn checkout #{@svn.repository_root}/trunk output"
|
70
60
|
end
|
71
61
|
|
72
62
|
specify 'svn command' do
|
73
|
-
svn
|
74
|
-
svn.command('info')
|
63
|
+
@svn.command('info')
|
75
64
|
@system.executed_commands[0].should_equal "svn info #{@work_dir_root.path}"
|
76
65
|
end
|
77
66
|
|
78
67
|
specify 'svn tag' do
|
79
|
-
svn = SvnDriver.new(@info)
|
80
68
|
tag = 'build_0.0.5_b3'
|
81
|
-
svn.tag(tag)
|
82
|
-
@system.executed_commands[0].should_equal "svn copy #{@
|
69
|
+
@svn.tag(tag)
|
70
|
+
@system.executed_commands[0].should_equal "svn copy #{@svn.repository_root}/trunk #{@svn.repository_root}/tags/#{tag} -m \"ruby buildmaster\""
|
71
|
+
end
|
72
|
+
|
73
|
+
specify 'physical svn works' do
|
74
|
+
cotta = Cotta.new
|
75
|
+
svn = SvnDriver.new(cotta.file(__FILE__).parent)
|
76
|
+
svn.repository_root.should_equal 'svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster'
|
83
77
|
end
|
84
78
|
|
85
79
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: BuildMaster
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.9.
|
7
|
-
date: 2006-10-
|
6
|
+
version: 0.9.1
|
7
|
+
date: 2006-10-18 00:00:00 -07:00
|
8
8
|
summary: A project that hosts a series of scripts to be used in project building, project releasing, and site building.
|
9
9
|
require_paths:
|
10
10
|
- lib
|