svn-fixture 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.2.0
@@ -8,7 +8,7 @@ require "svn/fs"
8
8
  require "svn/repos"
9
9
 
10
10
  module SvnFixture
11
- VERSION = '0.1.3'
11
+ VERSION = '0.2.0'
12
12
 
13
13
  CONFIG_DEFAULTS = {
14
14
  :base_path => File.join(Dir.tmpdir, 'svn-fixture')
@@ -31,7 +31,9 @@ module SvnFixture
31
31
  def svn_time(val)
32
32
  return nil if val.nil?
33
33
  val = Time.parse(val) unless val.respond_to?(:strftime)
34
- val.strftime("%Y-%m-%dT%H:%M:%S.000000Z")
34
+ val = val.utc if val.respond_to?(:utc)
35
+ usec = val.respond_to?(:usec) ? val.usec : 0
36
+ val.strftime("%Y-%m-%dT%H:%M:%S.") + sprintf('%06dZ', usec)
35
37
  end
36
38
 
37
39
  # Return a Date or Time formatted as expected by
@@ -90,10 +90,13 @@ module SvnFixture
90
90
 
91
91
  # Set a property for the Directory
92
92
  # (see http://svnbook.red-bean.com/en/1.1/ch07s02.html):
93
- # - +name+: The property name (must be "human-readable text")
94
- # - +value+: The value of the property.
95
- def prop(name, value)
96
- @ctx.propset(name, SvnFixture.svn_prop(value), @path[0..-2])
93
+ #
94
+ # ==== Parameters
95
+ # name<String>:: The property name (must be "human-readable text")
96
+ # value<String>:: The value of the property.
97
+ # recurse<True, False>:: Apply this property to descendants?
98
+ def prop(name, value, recurse = false)
99
+ @ctx.propset(name, SvnFixture.svn_prop(value), @path[0..-2], recurse)
97
100
  end
98
101
  end
99
102
  end
@@ -2,7 +2,7 @@ module SvnFixture
2
2
  # Repository sets up the repository and is reponsible for checkouts and
3
3
  # the actual commit(s). No actual work is done until +commit+ is called.
4
4
  class Repository
5
- attr_reader :repos, :ctx, :wc_path, :revisions
5
+ attr_reader :repos, :ctx, :revisions
6
6
 
7
7
  class << self
8
8
  # Get an SvnFixture::Repository by name. If not found, it creates a new
@@ -153,9 +153,19 @@ module SvnFixture
153
153
  self.class.repositories.delete(@name)
154
154
  end
155
155
 
156
+ # Absolute path to working copy
157
+ def wc_path
158
+ ::File.expand_path(@wc_path)
159
+ end
160
+
161
+ # Absolute path to repository
162
+ def repos_path
163
+ ::File.expand_path(@repos_path)
164
+ end
165
+
156
166
  # URI (file://...) for accessing the Repository
157
167
  def uri
158
- "file://" + ::File.expand_path(@repos_path)
168
+ "file://" + self.repos_path
159
169
  end
160
170
 
161
171
  private
@@ -50,6 +50,7 @@ module SvnFixture
50
50
  # Only argument is an instance of SvnFixture::Repository that is the
51
51
  # Repository to which this revision is committed.
52
52
  def commit(repo)
53
+ repo.ctx.update(repo.wc_path) # Ensure everything up-to-date
53
54
  root = Directory.new(repo.ctx, repo.wc_path)
54
55
  root.instance_eval(&@block) if @block
55
56
  ci = repo.ctx.ci(repo.wc_path)
@@ -59,6 +60,7 @@ module SvnFixture
59
60
  repo.repos.fs.set_prop('svn:author', @author, rev) if @author
60
61
  repo.repos.fs.set_prop('svn:date', @date, rev) if @date
61
62
  @revprops.each do | key, val |
63
+ val = SvnFixture.svn_time(val) if val.respond_to?(:strftime)
62
64
  repo.repos.fs.set_prop(key.to_s, val.to_s, rev)
63
65
  end
64
66
  else
@@ -184,8 +184,28 @@ describe SvnFixture::Directory do
184
184
  'New Value'
185
185
  end
186
186
 
187
+ it 'should not set a property recursively by default' do
188
+ @dir.prop('prop:name', 'Prop Value')
189
+ rev = @ctx.ci(@wc_path).revision
190
+ @ctx.propget('prop:name', @path, rev)[@full_repos_path].should ==
191
+ 'Prop Value'
192
+ @ctx.propget('prop:name', @path + "/subdir", rev)[@full_repos_path + "/subdir"].should be_nil
193
+ @ctx.propget('prop:name', @path + "/file.txt", rev)[@full_repos_path + "/file.txt"].should be_nil
194
+ end
195
+
196
+ it 'should set a property recursively if told to' do
197
+ @dir.prop('prop:name', 'Prop Value', true)
198
+ rev = @ctx.ci(@wc_path).revision
199
+ @ctx.propget('prop:name', @path, rev)[@full_repos_path].should ==
200
+ 'Prop Value'
201
+ @ctx.propget('prop:name', @path + "/subdir", rev)[@full_repos_path + "/subdir"].should ==
202
+ 'Prop Value'
203
+ @ctx.propget('prop:name', @path + "/file.txt", rev)[@full_repos_path + "/file.txt"].should ==
204
+ 'Prop Value'
205
+ end
206
+
187
207
  it 'should format a Time correctly' do
188
- @dir.prop('prop:timeval', Time.parse('2009-06-18 14:00'))
208
+ @dir.prop('prop:timeval', Time.parse('2009-06-18 14:00 UTC'))
189
209
  rev = @ctx.ci(@wc_path).revision
190
210
  @ctx.propget('prop:timeval', @path, rev)[@full_repos_path].should ==
191
211
  '2009-06-18T14:00:00.000000Z'
@@ -49,7 +49,7 @@ describe SvnFixture::File do
49
49
  end
50
50
 
51
51
  it 'should format a Time correctly' do
52
- @file.prop('prop:timeval', Time.parse('2009-06-18 14:00'))
52
+ @file.prop('prop:timeval', Time.parse('2009-06-18 14:00 UTC'))
53
53
  rev = @ctx.ci(@wc_path).revision
54
54
  @ctx.propget('prop:timeval', @path, rev)[@full_repos_path].should ==
55
55
  '2009-06-18T14:00:00.000000Z'
@@ -321,6 +321,20 @@ describe SvnFixture::Repository do
321
321
  end
322
322
  end
323
323
 
324
+ describe '#wc_path' do
325
+ it 'should be the absolute path to the working copy' do
326
+ r = @klass.new('test1', '/test/repos', '/test/wc')
327
+ r.wc_path.should == '/test/wc'
328
+ end
329
+ end
330
+
331
+ describe '#repos_path' do
332
+ it 'should be the absolute path to the repository' do
333
+ r = @klass.new('test1', '/test/repos', '/test/wc')
334
+ r.repos_path.should == '/test/repos'
335
+ end
336
+ end
337
+
324
338
  describe '#uri' do
325
339
  it 'should return the uri for accessing the Repository' do
326
340
  r = @klass.new('test1', '/test/path')
@@ -29,7 +29,14 @@ describe SvnFixture::Revision do
29
29
  @repos = SvnFixture::repo('file_test').checkout
30
30
  # @repos_path = @repos.instance_variable_get(:@repos_path)
31
31
  @wc_path = @repos.instance_variable_get(:@wc_path)
32
- @rev = @klass.new(1, 'msg', :author => 'author', :date => Time.parse('2009-01-01 12:00:00Z'), 'other:revprop' => 20) do
32
+ options = {
33
+ :author => 'author',
34
+ :date => Time.parse('2009-01-01 12:00:00Z'),
35
+ 'other:revprop' => 20,
36
+ 'other:timeprop' => Time.parse('2009-01-01 12:00:01.0912Z')
37
+ }
38
+
39
+ @rev = @klass.new(1, 'msg', options) do
33
40
  dir('test-dir')
34
41
  end
35
42
  @rev.commit(@repos)
@@ -63,6 +70,7 @@ describe SvnFixture::Revision do
63
70
 
64
71
  it 'should set additional revprops if given' do
65
72
  @fs.prop('other:revprop', 1).should == '20'
73
+ @fs.prop('other:timeprop', 1).should == '2009-01-01T12:00:01.091200Z'
66
74
  end
67
75
 
68
76
  it 'should print warning if no changes' do
@@ -4,7 +4,7 @@ describe SvnFixture do
4
4
 
5
5
  describe '.svn_time' do
6
6
  it 'should format as expected by ::Svn::Client::Context#propset' do
7
- t = Time.parse('2009-06-18 13:00')
7
+ t = Time.parse('2009-06-18 13:00 UTC')
8
8
  SvnFixture.svn_time(t).should == '2009-06-18T13:00:00.000000Z'
9
9
 
10
10
  d = Date.parse('2009-06-19')
@@ -12,8 +12,8 @@ describe SvnFixture do
12
12
  end
13
13
 
14
14
  it 'should parse the #to_s value if not a Date or Time or nil' do
15
- t = '2009-06-18 13:00'
16
- SvnFixture.svn_time(t).should == '2009-06-18T13:00:00.000000Z'
15
+ t = '2009-06-18 13:00:01.002 UTC'
16
+ SvnFixture.svn_time(t).should == '2009-06-18T13:00:01.002000Z'
17
17
  end
18
18
 
19
19
  it 'should return nil if value is nil' do
@@ -23,8 +23,8 @@ describe SvnFixture do
23
23
 
24
24
  describe '.svn_prop' do
25
25
  it 'should format Time/Date as expected by ::Svn::Client::Context#propset' do
26
- t = Time.parse('2009-06-18 13:00')
27
- SvnFixture.svn_prop(t).should == '2009-06-18T13:00:00.000000Z'
26
+ t = Time.parse('2009-06-18 13:00:01.002111 UTC')
27
+ SvnFixture.svn_prop(t).should == '2009-06-18T13:00:01.002111Z'
28
28
 
29
29
  d = Date.parse('2009-06-19')
30
30
  SvnFixture.svn_prop(d).should == '2009-06-19T00:00:00.000000Z'
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{svn-fixture}
8
- s.version = "0.1.3"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jared Morgan"]
12
- s.date = %q{2009-10-17}
12
+ s.date = %q{2009-10-18}
13
13
  s.description = %q{svn-fixture simplifies creating (or updating) a Subversion repository. It is
14
14
  designed to be used in tests that require a Subversion repo, but can also be
15
15
  used to initialize a repository according to some template. svn-fixture depends
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: svn-fixture
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jared Morgan
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-17 00:00:00 -05:00
12
+ date: 2009-10-18 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies: []
15
15