BuildMaster 1.0.6 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -48,9 +48,14 @@ class Cotta
48
48
  return Cotta.new.file(File.expand_path(path))
49
49
  end
50
50
 
51
+ # DEPRECATED! Use +parent_dir+ instead.
51
52
  def Cotta::parent_of(path)
52
53
  return Cotta.file(path).parent
53
54
  end
55
+
56
+ def Cotta::parent_dir(path)
57
+ return Cotta.file(path).parent
58
+ end
54
59
 
55
60
  def entry(path)
56
61
  entry = file(path)
@@ -1,9 +1,13 @@
1
+ require 'rubygems/package'
2
+
1
3
  $:.unshift File.dirname(__FILE__)
2
4
 
3
5
  require 'cotta_file'
6
+ require 'io_chain'
4
7
 
5
8
  module BuildMaster
6
9
  class CottaDir
10
+ include IoChain
7
11
  attr_reader :path, :system
8
12
 
9
13
  def initialize(system, path)
@@ -11,11 +15,11 @@ class CottaDir
11
15
  @system = system
12
16
  @name = @path.basename.to_s
13
17
  end
14
-
18
+
15
19
  def cotta
16
- return Cotta.new(@system)
20
+ Cotta.new(@system)
17
21
  end
18
-
22
+
19
23
  def name
20
24
  name = nil
21
25
  if root?
@@ -25,59 +29,100 @@ class CottaDir
25
29
  end
26
30
  return name
27
31
  end
28
-
32
+
29
33
  def root?
30
34
  parent.nil?
31
35
  end
32
-
36
+
33
37
  def exists?
34
38
  return @system.dir_exists?(@path)
35
39
  end
36
-
40
+
41
+ def stat
42
+ @system.dir_stat(@path)
43
+ end
44
+
37
45
  def parent
38
46
  parent_path = @path.cotta_parent
39
47
  return nil unless parent_path
40
48
  return CottaDir.new(@system, parent_path)
41
49
  end
42
-
50
+
51
+ def relative_path_from(entry)
52
+ @path.relative_path_from(entry.path)
53
+ end
54
+
43
55
  def dir(name)
44
56
  return CottaDir.new(@system, @path.join(name))
45
57
  end
46
-
58
+
47
59
  def file(name)
48
60
  return CottaFile.new(@system, @path.join(name))
49
61
  end
50
-
62
+
51
63
  def mkdirs
52
64
  if (not exists?)
53
65
  parent.mkdirs
54
66
  @system.mkdir @path
55
67
  end
56
68
  end
57
-
69
+
58
70
  def delete
59
- list.each {|children| children.delete}
71
+ list.each {|children|
72
+ children.delete
73
+ }
60
74
  @system.delete_dir(@path)
61
75
  end
62
-
76
+
63
77
  def move_to(target)
64
78
  target.parent.mkdirs
65
79
  @system.move_dir(@path, target.path)
66
80
  end
67
-
81
+
68
82
  def move_to_path(target_path)
69
83
  move_to(cotta.dir(target_path))
70
84
  end
71
-
85
+
72
86
  def copy_to(target)
73
87
  target.parent.mkdirs
74
88
  @system.copy_dir(@path, target.path)
75
89
  end
76
-
90
+
91
+ def archive(target = nil)
92
+ unless target
93
+ target = parent.file("#{name}.tar")
94
+ end
95
+ target.write_binary do |io|
96
+ writer = Gem::Package::TarWriter.new(io) do |tar_io|
97
+ archive_dir(tar_io, self)
98
+ end
99
+ end
100
+ target
101
+ end
102
+
103
+ def archive_dir(tar_io, dir)
104
+ dir.list.each do |child|
105
+ stat = child.stat
106
+ entry_name = child.relative_path_from(self).to_s
107
+ mode = stat.mode
108
+ if (stat.file?)
109
+ tar_io.add_file(entry_name, mode) do |entry_output|
110
+ child.read_binary do |input|
111
+ copy_io(input, entry_output)
112
+ end
113
+ end
114
+ elsif (stat.directory?)
115
+ tar_io.mkdir(entry_name, mode)
116
+ archive_dir(tar_io, child)
117
+ end
118
+ end
119
+ end
120
+ private :archive_dir
121
+
77
122
  def copy_to_path(target_path)
78
123
  copy_to(cotta.dir(target_path))
79
124
  end
80
-
125
+
81
126
  def list
82
127
  @system.list(@path).collect do |item|
83
128
  candidate = dir(item)
@@ -87,18 +132,18 @@ class CottaDir
87
132
  candidate
88
133
  end
89
134
  end
90
-
135
+
91
136
  def ==(other)
92
137
  return @path == other.path && @system == other.system
93
138
  end
94
-
139
+
95
140
  def inspect
96
- return "#{self.class}:#{self.object_id}-#{@system.inspect}-#@path"
141
+ return "#{self.class}:#{self.object_id}-#@path"
97
142
  end
98
-
143
+
99
144
  def to_s
100
145
  @path
101
146
  end
102
-
147
+
103
148
  end
104
149
  end
@@ -1,26 +1,27 @@
1
1
  require 'fileutils'
2
+ require 'rubygems/package'
3
+
4
+ $:.unshift File.dirname(__FILE__)
5
+ require 'io_chain'
2
6
 
3
7
  module BuildMaster
4
8
  class CottaFile
9
+ include IoChain
5
10
  attr_reader :system, :path
6
11
 
7
12
  def initialize(system, path)
8
13
  @path = path
9
14
  @system = system
10
15
  end
11
-
16
+
12
17
  def cotta
13
- return Cotta.new(system)
18
+ Cotta.new(@system)
14
19
  end
15
-
20
+
16
21
  def name
17
22
  return @path.basename.to_s
18
23
  end
19
24
 
20
- def parent
21
- return CottaDir.new(@system, @path.parent)
22
- end
23
-
24
25
  def extname
25
26
  return @path.extname
26
27
  end
@@ -29,13 +30,26 @@ class CottaFile
29
30
  return @path.basename(extname).to_s
30
31
  end
31
32
 
33
+ def stat
34
+ @system.file_stat(@path)
35
+ end
36
+
32
37
  def exists?
33
38
  return @system.file_exists?(@path)
34
39
  end
40
+
41
+ def relative_path_from(file_or_dir)
42
+ path.relative_path_from(file_or_dir.path)
43
+ end
44
+
45
+ def parent
46
+ return CottaDir.new(@system, @path.parent)
47
+ end
35
48
 
36
49
  def copy_to(target_file)
37
50
  target_file.parent.mkdirs
38
51
  @system.copy_file(path, target_file.path)
52
+ target_file
39
53
  end
40
54
 
41
55
  def copy_to_path(target_path)
@@ -55,20 +69,69 @@ class CottaFile
55
69
  write {|file| file.printf content.to_s}
56
70
  end
57
71
 
72
+ # Calls open with 'w' argument and makes sure that the
73
+ # parent directory of the file exists
58
74
  def write(&block)
59
75
  parent.mkdirs
60
76
  open('w', &block)
61
77
  end
62
-
78
+
79
+ # Calls open with 'a' argument and make sure that the
80
+ # parent directory of the file exists
81
+ def append(&block)
82
+ parent.mkdirs
83
+ open('a', &block)
84
+ end
85
+
86
+ # Calls open with 'wb' argument, sets the io to binmode
87
+ # and make sure that the parent directory of the file exists
88
+ def write_binary(&block)
89
+ parent.mkdirs
90
+ if (block_given?)
91
+ open('wb') do |io|
92
+ io.binmode
93
+ yield io
94
+ end
95
+ else
96
+ io = open('wb')
97
+ io.binmode
98
+ io
99
+ end
100
+ end
101
+
102
+ =begin rdoc
103
+ Loading the file full total. This is used generally for loading
104
+ an ascii file content. It does not work with binary file on
105
+ windows system because it does no put the system on binary mode
106
+ =end
63
107
  def load
64
108
  content = nil
65
- read {|file| content = file.read}
109
+ size = stat.size
110
+ read do |io|
111
+ content = io.read
112
+ end
66
113
  return content
67
114
  end
68
115
 
116
+ # calls open with 'r' as argument.
69
117
  def read(&block)
70
118
  open('r', &block)
71
119
  end
120
+
121
+ # Calls open with 'r' as argument and sets the io to binary mode
122
+ def read_binary
123
+ if block_given?
124
+ open('r') do |io|
125
+ io.binmode
126
+ yield io
127
+ end
128
+ else
129
+ io = open('r')
130
+ io.binmode
131
+ io
132
+ end
133
+ end
134
+
72
135
 
73
136
  def foreach()
74
137
  open('r') do |file|
@@ -76,10 +139,68 @@ class CottaFile
76
139
  end
77
140
  end
78
141
 
142
+ def open(*args)
143
+ result = f = @system.io(@path, *args)
144
+ if block_given?
145
+ begin
146
+ result = yield f
147
+ ensure
148
+ f.close unless f.closed?
149
+ end
150
+ end
151
+ result
152
+ end
153
+
79
154
  def delete
80
155
  @system.delete_file(@path)
81
156
  end
82
157
 
158
+ def extract(directory = nil)
159
+ directory = parent.dir(basename) unless directory
160
+ read_binary do |io|
161
+ reader = Gem::Package::TarReader.new(io)
162
+ reader.each do |entry|
163
+ full_name = entry.full_name
164
+ if (entry.is_file?)
165
+ directory.file(full_name).write_binary do |output|
166
+ copy_io(entry, output)
167
+ end
168
+ elsif (entry.is_directory?)
169
+ directory.dir(full_name).mkdirs
170
+ end
171
+ end
172
+ end
173
+ directory
174
+ end
175
+
176
+ def zip(target = nil)
177
+ target = parent.file("#{name}.zip") unless target
178
+ read_binary do |read_io|
179
+ target.write_binary do |write_io|
180
+ gz = Zlib::GzipWriter.new(write_io)
181
+ copy_io(read_io, gz)
182
+ gz.close
183
+ end
184
+ end
185
+ target
186
+ end
187
+
188
+ def unzip
189
+ name = basename
190
+ if (extname.length == 0)
191
+ name = "#{name}.unzip"
192
+ end
193
+ target = parent.file(name)
194
+ read_binary do |read_io|
195
+ target.write_binary do |write_io|
196
+ gz = Zlib::GzipReader.new(read_io)
197
+ copy_io(gz, write_io)
198
+ gz.close
199
+ end
200
+ end
201
+ target
202
+ end
203
+
83
204
  def ==(other)
84
205
  return false unless other.kind_of? CottaFile
85
206
  return @system == other.system && @path == other.path
@@ -93,19 +214,5 @@ class CottaFile
93
214
  return "#{self.class}:#{self.object_id}-#{@system.inspect}-#@path"
94
215
  end
95
216
 
96
- private
97
-
98
- def open(*args)
99
- result = f = @system.io(@path, *args)
100
- if block_given?
101
- begin
102
- result = yield f
103
- ensure
104
- f.close
105
- end
106
- end
107
- return result
108
- end
109
-
110
217
  end
111
218
  end
@@ -43,10 +43,29 @@ class InMemorySystem
43
43
  return !content.nil? && content.file?
44
44
  end
45
45
 
46
+ def dir_stat(pathname)
47
+ check_dir_exists(pathname)
48
+ ContentStat.new(path_content(pathname))
49
+ end
50
+
51
+ def file_stat(pathname)
52
+ check_file_exists(pathname)
53
+ ContentStat.new(path_content(pathname))
54
+ end
55
+
46
56
  def list(pathname)
57
+ check_dir_exists(pathname)
47
58
  content = path_content(pathname)
48
59
  return content.children.collect {|item| item.name}
49
60
  end
61
+
62
+ def check_dir_exists(pathname)
63
+ raise Errno::ENOENT, pathname unless dir_exists? pathname
64
+ end
65
+
66
+ def check_file_exists(pathname)
67
+ raise Errno::ENOENT, pathname unless file_exists? pathname
68
+ end
50
69
 
51
70
  def mkdir(pathname)
52
71
  path_content!(pathname.cotta_parent).add(create_dir(pathname))
@@ -76,6 +95,7 @@ class InMemorySystem
76
95
  end
77
96
 
78
97
  def copy_dir(source, target)
98
+ check_dir_exists(source)
79
99
  mkdir(target)
80
100
  path_content(source).children.each do |item|
81
101
  item.copy_to_dir(self, source, target)
@@ -205,10 +225,36 @@ class FileContent
205
225
  return false
206
226
  end
207
227
 
228
+ def size
229
+ content.size
230
+ end
231
+
208
232
  def copy_to_dir(system, parent_dir, target_dir)
209
233
  target_path = target_dir.join(name)
210
234
  source_path = parent_dir.join(name)
211
235
  system.copy_file(source_path, target_path)
212
236
  end
213
- end
237
+ end
238
+
239
+ class ContentStat
240
+ def initialize(content)
241
+ @content = content
242
+ end
243
+
244
+ def mode
245
+ '10777'
246
+ end
247
+
248
+ def size
249
+ @content.size
250
+ end
251
+
252
+ def file?
253
+ @content.file?
254
+ end
255
+
256
+ def directory?
257
+ @content.directory?
258
+ end
259
+ end
214
260
  end
@@ -0,0 +1,11 @@
1
+ module BuildMaster
2
+ # Reads from the input stream to output stream
3
+ module IoChain
4
+ def copy_io(input, output)
5
+ # output.write input.read
6
+ while (content = input.read(1024)) do
7
+ output.write content
8
+ end
9
+ end
10
+ end
11
+ end
@@ -35,6 +35,14 @@ class PhysicalSystem
35
35
  return FileTest.file?(file_path)
36
36
  end
37
37
 
38
+ def dir_stat(path)
39
+ File.stat(path)
40
+ end
41
+
42
+ def file_stat(path)
43
+ File.stat(path)
44
+ end
45
+
38
46
  def list(dir_path)
39
47
  Dir.entries(dir_path).find_all {|item| item != '.' && item != '..'}
40
48
  end
@@ -70,5 +78,6 @@ class PhysicalSystem
70
78
  def move_dir(source, target)
71
79
  FileUtils.mv(source, target)
72
80
  end
81
+
73
82
  end
74
83
  end
@@ -48,10 +48,12 @@ require 'syntax/convertors/html'
48
48
  end
49
49
  end
50
50
  raise TemplateError, "START #{tag} and END #{tag} not found" if lines.length == 0
51
- line_with_mimum_indent = lines.select{|line| line.indentation}.min
51
+ line_with_minimum_indent = lines.select{|line| line.indentation}.min
52
+ minimum_indent = 0
53
+ minimum_indent = line_with_minimum_indent.indentation if line_with_minimum_indent
52
54
  text = ''
53
55
  lines.each do |line|
54
- text << line.indent(line_with_mimum_indent.indentation)
56
+ text << line.indent(minimum_indent)
55
57
  end
56
58
  return text
57
59
  end
@@ -1 +1 @@
1
- 1.0.6
1
+ 1.0.9
@@ -27,6 +27,21 @@ def register_cotta_file_specifications
27
27
  @file.extname.should == '.txt'
28
28
  @file.basename.should == 'file'
29
29
  end
30
+
31
+ specify 'should support relative path' do
32
+ parent = @file.parent
33
+ file = parent.file('one/two/three.txt')
34
+ file.relative_path_from(parent).to_s.should == 'one/two/three.txt'
35
+ end
36
+
37
+ specify 'file should support stat' do
38
+ @file.save('test')
39
+ @file.stat.should_not_be_nil
40
+ end
41
+
42
+ specify 'should raise error if does not exist' do
43
+ Proc.new {@file.stat}.should_raise Errno::ENOENT
44
+ end
30
45
 
31
46
  specify 'should load and save file content' do
32
47
  @file.exists?.should == false
@@ -111,12 +126,26 @@ def register_cotta_dir_specifications
111
126
  specify 'dir should not be equal if path different' do
112
127
  (BuildMaster::CottaDir.new(@system, Pathname.new('/dir')) == @dir).should == false
113
128
  end
129
+
130
+ specify 'should support relative path' do
131
+ sub_dir = @dir.dir('one/two/three')
132
+ sub_dir.relative_path_from(@dir).to_s.should == 'one/two/three'
133
+ end
114
134
 
115
135
  specify 'dir should know its parent' do
116
136
  @dir.parent.name.should == '.'
117
137
  @dir.parent.parent.should_be nil
118
138
  end
119
139
 
140
+ specify 'should raise error if not exits stat' do
141
+ Proc.new {@dir.stat}.should_raise Errno::ENOENT
142
+ end
143
+
144
+ specify 'support stat' do
145
+ @dir.mkdirs
146
+ @dir.stat.should_not_be_nil
147
+ end
148
+
120
149
  specify 'dir should handle root dir' do
121
150
  dir = BuildMaster::CottaDir.new(@system, Pathname.new('/root'))
122
151
  dir.parent.path.should == Pathname.new('/')
@@ -216,6 +245,11 @@ def register_cotta_dir_specifications
216
245
  @dir.dir('one').dir('two').dir('three').exists?.should == true
217
246
  end
218
247
 
248
+ specify 'list on not existing directory' do
249
+ dir = BuildMaster::CottaDir.new(@system, Pathname.new('no/such/directory'))
250
+ Proc.new {dir.list}.should_raise Errno::ENOENT
251
+ end
252
+
219
253
  end
220
254
 
221
255
  end
@@ -27,6 +27,14 @@ class PhysicalSystemStub
27
27
  @system.file_exists?(relative_from_tmp(pathname))
28
28
  end
29
29
 
30
+ def dir_stat(pathname)
31
+ @system.dir_stat(relative_from_tmp(pathname))
32
+ end
33
+
34
+ def file_stat(pathname)
35
+ @system.file_stat(relative_from_tmp(pathname))
36
+ end
37
+
30
38
  def list(pathname)
31
39
  @system.list(relative_from_tmp(pathname))
32
40
  end
@@ -5,7 +5,7 @@ require 'cotta_specifications'
5
5
  require 'physical_system_stub'
6
6
 
7
7
  module BuildMaster
8
- context 'Cotta file' do
8
+ context 'Cotta file with physical systeme' do
9
9
  extend CottaSpecifications
10
10
  setup do
11
11
  @system = PhysicalSystemStub.new
@@ -13,5 +13,32 @@ context 'Cotta file' do
13
13
 
14
14
  register_cotta_file_specifications
15
15
 
16
+ specify 'copying binary files properly' do
17
+ logo_gif = Cotta.parent_of(__FILE__).file('logo.gif')
18
+ content = logo_gif.read_binary {|io| io.read}
19
+ target = CottaFile.new(@system, Pathname.new('dir/logo.gif'))
20
+ target.parent.mkdirs
21
+ target.write_binary do |io|
22
+ io.write content
23
+ end
24
+ expected_stat = logo_gif.stat
25
+ actual_stat = target.stat
26
+ actual_stat.size.should == expected_stat.size
27
+ end
28
+
29
+ specify 'zip and unzip' do
30
+ logo_gif = Cotta.parent_of(__FILE__).file('logo.gif')
31
+ content = logo_gif.read_binary {|io| io.read}
32
+ dir = CottaDir.new(@system, Pathname.new('dir'))
33
+ target_dir = dir.dir('target')
34
+ target_dir.file(logo_gif.name).write_binary {|io| io.write content}
35
+ zip_file = target_dir.archive.zip
36
+ extract_dir = dir.dir('extract')
37
+ file_to_unzip = zip_file.copy_to(extract_dir.file(zip_file.name))
38
+ extracted_dir = file_to_unzip.unzip.extract
39
+
40
+ extracted_dir.file('logo.gif').stat.size.should == logo_gif.stat.size
41
+ end
42
+
16
43
  end
17
44
  end
@@ -0,0 +1,57 @@
1
+ require 'spec'
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'buildmaster')
4
+
5
+ require 'cotta'
6
+ require 'cotta/in_memory_system'
7
+
8
+ module BuildMaster
9
+ context 'zip support in cotta' do
10
+ setup do
11
+ @cotta = Cotta.new(InMemorySystem.new)
12
+ end
13
+
14
+ specify 'extract from a tar file' do
15
+ tar_file = Cotta.parent_of(__FILE__).file('tar_test.tar')
16
+ dir = @cotta.dir('dir/extract')
17
+ tar_file.extract(dir)
18
+ dir.list.size.should == 3
19
+ dir.file('one.txt').load.should == 'one'
20
+ dir.file('two.txt').load.should == 'two'
21
+ dir.file('three.txt').load.should == 'three'
22
+ end
23
+
24
+ specify 'archive files in the directory to a file' do
25
+ source = @cotta.dir('dir/source')
26
+ source.file('one.txt').save('one')
27
+ source.file('two.txt').save('two')
28
+ source.file('three.txt').save('three')
29
+ tar_file = @cotta.file('target.tar')
30
+ source.archive(tar_file)
31
+
32
+ target_dir = @cotta.dir('target')
33
+ tar_file.extract(target_dir)
34
+ target_dir.should_have(3).list
35
+ target_dir.file('one.txt').load.should == 'one'
36
+ target_dir.file('two.txt').load.should == 'two'
37
+ target_dir.file('three.txt').load.should == 'three'
38
+ end
39
+
40
+ specify 'archive subdirectories' do
41
+ source = @cotta.dir('dir/source')
42
+ sub = source.dir('sub')
43
+ sub.file('one.txt').save('one')
44
+ sub.file('two.txt').save('two')
45
+ tar_file = @cotta.file('target.tar')
46
+ source.archive(tar_file)
47
+
48
+ target_dir = @cotta.dir('target')
49
+ tar_file.extract(target_dir)
50
+ target_dir.should_have(1).list
51
+ target_dir.dir('sub').should_exists
52
+ target_dir.dir('sub').should_have(2).list
53
+ target_dir.file('sub/one.txt').load.should == 'one'
54
+ target_dir.file('sub/two.txt').load.should == 'two'
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec'
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'buildmaster')
4
+
5
+ require 'cotta/io_chain'
6
+ require 'cotta'
7
+
8
+ $:.unshift File.dirname(__FILE__)
9
+ require 'physical_system_stub'
10
+
11
+ module BuildMaster
12
+ module IoChain
13
+ context 'io chain' do
14
+ include IoChain
15
+ setup do
16
+ @cotta = Cotta.new(PhysicalSystemStub.new)
17
+ end
18
+
19
+ specify 'copy binary io' do
20
+ file = Cotta.parent_of(__FILE__).file('logo.gif')
21
+ target = @cotta.file('target.gif')
22
+ file.read_binary do |input|
23
+ target.write_binary do |output|
24
+ copy_io(input, output)
25
+ end
26
+ end
27
+ expect_stat = file.stat
28
+ actual_stat = target.stat
29
+ actual_stat.size.should == expect_stat.size
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,4 @@
1
+ root = File.dirname(__FILE__)
2
+ Dir.glob("#{root}/**/tc_*.rb") do |file|
3
+ require "#{file}"
4
+ end
@@ -42,7 +42,33 @@ root = cotta.file(__FILE__).parent
42
42
  # BuildMaster can look into svn files to figure out the svn information
43
43
  CONTENT
44
44
  end
45
-
45
+
46
+ specify 'handle the case of only blank lines' do
47
+ template_content = <<CONTENT
48
+ <html>
49
+ <code source="samples/sample.rb" tag="sample"/>
50
+ </html>
51
+ CONTENT
52
+ content_path = 'doc/doc.html'
53
+ @cotta.file(content_path).parent.file('samples/sample.rb').save <<CONTENT
54
+ #START sample
55
+
56
+
57
+ #END sample
58
+ CONTENT
59
+ target = create_element('test')
60
+ template = create_template_element(template_content, '/html/code')
61
+ site_spec = SiteSpec.new('/root', @cotta);
62
+ code_processor = Code.new(site_spec)
63
+ code_processor.process(target, template, SourceContent.new('doc/doc.html', nil, @cotta.file(content_path)))
64
+ REXML::XPath.first(target, 'pre').attributes['class'].should == 'code'
65
+ REXML::XPath.first(target, 'pre').text.should == <<CONTENT
66
+
67
+
68
+ CONTENT
69
+ end
70
+
71
+
46
72
  specify 'generate error if none found' do
47
73
  template_content = <<CONTENT
48
74
  <html>
@@ -1,5 +1,5 @@
1
1
  K 8
2
2
  svn:date
3
3
  V 27
4
- 2007-01-01T07:45:54.031250Z
4
+ 2007-01-16T00:33:04.625000Z
5
5
  END
@@ -5,7 +5,7 @@ Shane and Lianxin
5
5
  K 8
6
6
  svn:date
7
7
  V 27
8
- 2007-01-01T07:45:54.796875Z
8
+ 2007-01-16T00:33:04.875000Z
9
9
  K 7
10
10
  svn:log
11
11
  V 24
@@ -5,7 +5,7 @@ Shane and Lianxin
5
5
  K 8
6
6
  svn:date
7
7
  V 27
8
- 2007-01-01T07:45:55.109375Z
8
+ 2007-01-16T00:33:05.078125Z
9
9
  K 7
10
10
  svn:log
11
11
  V 23
@@ -5,7 +5,7 @@ Shane and Lianxin
5
5
  K 8
6
6
  svn:date
7
7
  V 27
8
- 2007-01-01T07:45:55.281250Z
8
+ 2007-01-16T00:33:05.250000Z
9
9
  K 7
10
10
  svn:log
11
11
  V 27
@@ -5,7 +5,7 @@ Shane and Lianxin
5
5
  K 8
6
6
  svn:date
7
7
  V 27
8
- 2007-01-01T07:45:57.593750Z
8
+ 2007-01-16T00:33:07.468750Z
9
9
  K 7
10
10
  svn:log
11
11
  V 19
@@ -1 +1 @@
1
- 2cb220c7-ec14-4944-92bb-109beafd8dbe
1
+ a576fdff-2425-4247-8608-1a231a07b88f
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.0.9
3
3
  specification_version: 1
4
4
  name: BuildMaster
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.0.6
7
- date: 2006-12-31 00:00:00 -08:00
8
- summary: A project that hosts a series of scripts to be used in project building, project releasing, and site building.
6
+ version: 1.0.9
7
+ date: 2007-01-15 00:00:00 -08:00
8
+ summary: A project that hosts a series of scripts to be used for project release and depolyment, static website building, and file operations.
9
9
  require_paths:
10
10
  - lib
11
11
  email: buildmaster@googlegroups.com
12
12
  homepage: http://buildmaster.rubyforge.org/
13
13
  rubyforge_project: buildmaster
14
14
  description:
15
- autorequire: buildmaster
15
+ autorequire: buildmaster/cotta
16
16
  default_executable:
17
17
  bindir: bin
18
18
  has_rdoc: true
@@ -55,9 +55,9 @@ files:
55
55
  - lib/buildmaster/cotta/cotta_pathname.rb
56
56
  - lib/buildmaster/cotta/file_not_found_error.rb
57
57
  - lib/buildmaster/cotta/in_memory_system.rb
58
+ - lib/buildmaster/cotta/io_chain.rb
58
59
  - lib/buildmaster/cotta/physical_system.rb
59
60
  - lib/buildmaster/project/ant_driver.rb
60
- - lib/buildmaster/project/build.rb
61
61
  - lib/buildmaster/project/build_number_file.rb
62
62
  - lib/buildmaster/project/ci.rb
63
63
  - lib/buildmaster/project/cvs_driver.rb
@@ -134,8 +134,10 @@ files:
134
134
  - test/buildmaster/common/tc_tree_to_object.rb
135
135
  - test/buildmaster/cotta/content.txt
136
136
  - test/buildmaster/cotta/cotta_specifications.rb
137
+ - test/buildmaster/cotta/logo.gif
137
138
  - test/buildmaster/cotta/physical_system_stub.rb
138
139
  - test/buildmaster/cotta/system_file_specifications.rb
140
+ - test/buildmaster/cotta/tar_test.tar
139
141
  - test/buildmaster/cotta/tc_command_interface.rb
140
142
  - test/buildmaster/cotta/tc_command_runner.rb
141
143
  - test/buildmaster/cotta/tc_cotta.rb
@@ -143,9 +145,12 @@ files:
143
145
  - test/buildmaster/cotta/tc_cotta_dir_physical.rb
144
146
  - test/buildmaster/cotta/tc_cotta_file_in_memory.rb
145
147
  - test/buildmaster/cotta/tc_cotta_file_physical.rb
148
+ - test/buildmaster/cotta/tc_cotta_zip_support.rb
146
149
  - test/buildmaster/cotta/tc_in_memory_system.rb
150
+ - test/buildmaster/cotta/tc_io_chain.rb
147
151
  - test/buildmaster/cotta/tc_pathname.rb
148
152
  - test/buildmaster/cotta/tc_physical_system.rb
153
+ - test/buildmaster/cotta/ts_cotta.rb
149
154
  - test/buildmaster/project/build.xml
150
155
  - test/buildmaster/project/manifest.mf
151
156
  - test/buildmaster/project/tc_ant_driver.rb
@@ -1,3 +0,0 @@
1
- $:.unshift File.dirname(__FILE__)
2
-
3
- require 'build/release'