svn_wc 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README.rdoc +10 -12
  2. data/lib/svn_wc.rb +65 -34
  3. data/test/svn_wc_test.rb +53 -8
  4. metadata +2 -2
data/README.rdoc CHANGED
@@ -5,37 +5,35 @@ Operate on the working copy of a (remote) Subversion (svn) repository.
5
5
 
6
6
  == VERSION:
7
7
 
8
- Version 0.0.1
8
+ Version 0.0.2
9
9
 
10
10
 
11
11
  == SYNOPSIS:
12
- ruby code
13
12
 
14
13
  require 'svn_wc'
15
14
 
16
- # assumes a previous initial checkout
17
15
  svn_wc = SvnWc::RepoAccess.new
18
16
 
19
17
  svn_wc.set_conf 'svn_wc_conf.yaml'
20
18
 
21
19
  # checkout, needed first time only,
22
20
  # 'true', force overwrite of working copy directory path
23
- #svn_wc.do_checkout true
21
+ svn_wc.do_checkout true
24
22
 
25
23
  file = Tempfile.new('test_', svn_wc.svn_repo_working_copy).path
24
+
26
25
  begin
26
+
27
27
  svn_wc.add file
28
- puts "svn Added file: #{file}"
28
+
29
29
  rev = svn_wc.commit file
30
- raise 'commit failed' unless rev >= 1
30
+
31
31
  puts "svn committed file: #{file}, revision #{rev}"
32
- svn_wc.delete file
33
- # commit our delete
34
- rev = svn_wc.commit file
35
- puts "svn deleted file: #{file}, revision #{rev}"
36
- raise 'commit failed' unless rev >= 1
32
+
37
33
  rescue SvnWc::RepoAccessError, Exception => e
34
+
38
35
  raise e.message
36
+
39
37
  end
40
38
 
41
39
 
@@ -267,7 +265,7 @@ See the ChangeLog file for details.
267
265
  Copyright 2009 David Wright (david_v_wright@yahoo.com), all rights reserved.
268
266
 
269
267
 
270
- SvnWc::RepoAccess 0.1.0 is released under the LGPL license.
268
+ SvnWc::RepoAccess 0.0.2 is released under the LGPL license.
271
269
 
272
270
 
273
271
  == AUTHOR:
data/lib/svn_wc.rb CHANGED
@@ -110,6 +110,18 @@ require 'svn/error'
110
110
  # #assert(wc_status.entry.normal?)
111
111
  # #ctx.prop_set(Svn::Core::PROP_IGNORE, file2, dir_path)
112
112
  #++
113
+ #module Svn
114
+ # class Error
115
+ # #WC_NOT_DIRECTORY # 1.4.2
116
+ # class WcNotDirectory # 1.6.6
117
+ # raise StandardError.new(
118
+ # #WC_NOT_DIRECTORY # 1.4.2
119
+ # end
120
+ # class AuthnNoProvider
121
+ # raise StandardError
122
+ # end
123
+ # end
124
+ #end
113
125
 
114
126
  module SvnWc
115
127
 
@@ -118,7 +130,7 @@ module SvnWc
118
130
 
119
131
  class RepoAccess
120
132
 
121
- VERSION = '0.0.1'
133
+ VERSION = '0.0.2'
122
134
 
123
135
  DEFAULT_CONF_FILE = File.join(File.dirname(File.dirname(\
124
136
  File.expand_path(__FILE__))), 'svn_wc_conf.yaml')
@@ -146,6 +158,9 @@ module SvnWc
146
158
  attr_reader :ctx, :repos
147
159
 
148
160
  def do_checkout(force=false)
161
+ if @svn_repo_working_copy.nil?
162
+ raise RepoAccessError, 'conf file not loaded! - Fatal Error'
163
+ end
149
164
  ## do checkout if not exists at specified local path
150
165
  if File.directory? @svn_repo_working_copy and not force
151
166
  raise RepoAccessError, 'target local directory ' << \
@@ -189,9 +204,10 @@ module SvnWc
189
204
  svn_session() { |ctx|
190
205
  ctx.checkout(@svn_repo_master, @svn_repo_working_copy)
191
206
  }
192
- rescue Svn::Error::RaLocalReposOpenFailed,
193
- Svn::Error::FsAlreadyExists,
194
- Exception => e
207
+ #rescue Svn::Error::RaLocalReposOpenFailed,
208
+ # Svn::Error::FsAlreadyExists,
209
+ # Exception => e
210
+ rescue Exception => e
195
211
  raise RepoAccessError, e.message
196
212
  end
197
213
  end
@@ -242,10 +258,11 @@ module SvnWc
242
258
  files.each { |ef|
243
259
  svn.add(ef, true)
244
260
  }
245
- rescue Svn::Error::ENTRY_EXISTS,
246
- Svn::Error::AuthnNoProvider,
247
- Svn::Error::WcNotDirectory,
248
- Svn::Error::SvnError => e
261
+ #rescue Svn::Error::ENTRY_EXISTS,
262
+ # Svn::Error::AuthnNoProvider,
263
+ # #Svn::Error::WcNotDirectory,
264
+ # Svn::Error::SvnError => e
265
+ rescue Exception => e
249
266
  raise RepoAccessError, "Add Failed: #{e.message}"
250
267
  end
251
268
  end
@@ -264,10 +281,11 @@ module SvnWc
264
281
  svn_session() do |svn|
265
282
  begin
266
283
  svn.delete(files)
267
- rescue Svn::Error::AuthnNoProvider,
268
- Svn::Error::WcNotDirectory,
269
- Svn::Error::ClientModified,
270
- Svn::Error::SvnError => e
284
+ #rescue Svn::Error::AuthnNoProvider,
285
+ # #Svn::Error::WcNotDirectory,
286
+ # Svn::Error::ClientModified,
287
+ # Svn::Error::SvnError => e
288
+ rescue Exception => e
271
289
  raise RepoAccessError, "Delete Failed: #{e.message}"
272
290
  end
273
291
  end
@@ -293,10 +311,12 @@ module SvnWc
293
311
  svn_session(msg) do |svn|
294
312
  begin
295
313
  rev = svn.commit(files).revision
296
- rescue Svn::Error::WcNotDirectory,
297
- Svn::Error::AuthnNoProvider,
298
- Svn::Error::IllegalTarget,
299
- Svn::Error::EntryNotFound => e
314
+ #rescue Svn::Error::AuthnNoProvider,
315
+ # #Svn::Error::WcNotDirectory,
316
+ # Svn::Error::IllegalTarget,
317
+ # #Svn::Error::EntryNotFound => e
318
+ # Exception => e
319
+ rescue Exception => e
300
320
  raise RepoAccessError, "Commit Failed: #{e.message}"
301
321
  end
302
322
  end
@@ -349,9 +369,12 @@ module SvnWc
349
369
  begin
350
370
  #p svn.status paths
351
371
  rev = svn.update(paths, nil, 'infinity')
352
- rescue Svn::Error::WcNotDirectory,
353
- Svn::Error::AuthnNoProvider, #Svn::Error::FS_NO_SUCH_REVISION,
354
- Svn::Error::EntryNotFound => e
372
+ #rescue Svn::Error::AuthnNoProvider,
373
+ # #Svn::Error::FS_NO_SUCH_REVISION,
374
+ # #Svn::Error::WcNotDirectory,
375
+ # #Svn::Error::EntryNotFound => e
376
+ # Exception => e
377
+ rescue Exception => e
355
378
  raise RepoAccessError, "Update Failed: #{e.message}"
356
379
  end
357
380
  end
@@ -439,8 +462,9 @@ module SvnWc
439
462
  ) do |path, status|
440
463
  infos << [path, status]
441
464
  end
442
- rescue Svn::Error::WcNotDirectory,
443
- RuntimeError => svn_err
465
+ rescue RuntimeError,
466
+ #Svn::Error::WcNotDirectory,
467
+ Exception => svn_err
444
468
  raise RepoAccessError, "status check Failed: #{svn_err}"
445
469
  end
446
470
  end
@@ -498,10 +522,12 @@ module SvnWc
498
522
  f_rec[:last_changed_rev] = dirent.created_rev
499
523
  paths.push f_rec
500
524
  end
501
- rescue Svn::Error::WcNotDirectory,
502
- Svn::Error::AuthnNoProvider,
503
- Svn::Error::FS_NO_SUCH_REVISION,
504
- Svn::Error::EntryNotFound => e
525
+ #rescue Svn::Error::AuthnNoProvider,
526
+ # #Svn::Error::WcNotDirectory,
527
+ # Svn::Error::FS_NO_SUCH_REVISION,
528
+ # #Svn::Error::EntryNotFound => e
529
+ # Exception => e
530
+ rescue Exception => e
505
531
  raise RepoAccessError, "List Failed: #{e.message}"
506
532
  end
507
533
  end
@@ -682,34 +708,38 @@ module SvnWc
682
708
  r_info[:last_changed_rev] = type.last_changed_rev
683
709
  r_info[:last_changed_date] = type.last_changed_date
684
710
  r_info[:conflict_old] = type.conflict_old
685
- r_info[:tree_conflict] = type.tree_conflict
711
+ #r_info[:tree_conflict] = type.tree_conflict
686
712
  r_info[:repos_root_url] = type.repos_root_url
687
713
  r_info[:repos_root_URL] = type.repos_root_URL
688
714
  r_info[:copyfrom_rev] = type.copyfrom_rev
689
715
  r_info[:copyfrom_url] = type.copyfrom_url
690
- r_info[:working_size] = type.working_size
716
+ #r_info[:working_size] = type.working_size
691
717
  r_info[:conflict_wrk] = type.conflict_wrk
692
718
  r_info[:conflict_new] = type.conflict_new
693
719
  r_info[:has_wc_info] = type.has_wc_info
694
720
  r_info[:repos_UUID] = type.repos_UUID
695
- r_info[:changelist] = type.changelist
721
+ #r_info[:changelist] = type.changelist
696
722
  r_info[:prop_time] = type.prop_time
697
723
  r_info[:text_time] = type.text_time
698
724
  r_info[:checksum] = type.checksum
699
725
  r_info[:prejfile] = type.prejfile
700
726
  r_info[:schedule] = type.schedule
701
727
  r_info[:taguri] = type.taguri
702
- r_info[:depth] = type.depth
728
+ #r_info[:depth] = type.depth
703
729
  r_info[:lock] = type.lock
704
- r_info[:size] = type.size
730
+ #r_info[:size] = type.size
705
731
  r_info[:url] = type.url
706
732
  r_info[:dup] = type.dup
707
733
  r_info[:URL] = type.URL
708
734
  r_info[:rev] = type.rev
709
735
  end
710
- rescue Svn::Error::EntryNotFound,
711
- Svn::Error::RaIllegalUrl,
712
- Svn::Error::WcNotDirectory => e
736
+ #rescue Svn::Error::WcNotDirectory => e
737
+ # #Svn::Error::RaIllegalUrl,
738
+ # #Svn::Error::EntryNotFound,
739
+ # #Svn::Error::RaIllegalUrl,
740
+ # #Svn::Error::WC_NOT_DIRECTORY
741
+ # #Svn::Error::WcNotDirectory => e
742
+ rescue Exception => e
713
743
  raise RepoAccessError, "cant get info: #{e.message}"
714
744
  end
715
745
  r_info
@@ -776,7 +806,8 @@ module SvnWc
776
806
  svn_session() do |svn|
777
807
  begin
778
808
  svn.diff([], file, rev, file, "WORKING", out_file.path, err_file.path)
779
- rescue Svn::Error::EntryNotFound => e
809
+ rescue Exception => e
810
+ #Svn::Error::EntryNotFound => e
780
811
  raise RepoAccessError, "Diff Failed: #{e.message}"
781
812
  end
782
813
  end
data/test/svn_wc_test.rb CHANGED
@@ -164,7 +164,8 @@ class TestSvnWc < Test::Unit::TestCase
164
164
  end
165
165
 
166
166
  # the 'dot' dirs
167
- assert_equal 2, Dir.entries(@conf['svn_repo_working_copy']).count
167
+ #assert_equal 2, Dir.entries(@conf['svn_repo_working_copy']).count # 1.8.7 >
168
+ assert_equal 2, Dir.entries(@conf['svn_repo_working_copy']).size # 1.8.6 <
168
169
 
169
170
  assert_raise SvnWc::RepoAccessError do
170
171
  # already exists, wont overwrite dir
@@ -172,12 +173,14 @@ class TestSvnWc < Test::Unit::TestCase
172
173
  end
173
174
 
174
175
  # the 'dot' dirs
175
- assert_equal 2, Dir.entries(@conf['svn_repo_working_copy']).count
176
+ #assert_equal 2, Dir.entries(@conf['svn_repo_working_copy']).count # 1.8.7 >
177
+ assert_equal 2, Dir.entries(@conf['svn_repo_working_copy']).size # 1.8.6 <
176
178
 
177
179
  SvnWc::RepoAccess.new(YAML::dump(@conf), true, true)
178
180
 
179
181
  # did a checkout, now more than 2 files
180
- assert Dir.entries(@conf['svn_repo_working_copy']).count > 2
182
+ #assert Dir.entries(@conf['svn_repo_working_copy']).count > 2 # 1.8.7 >
183
+ assert Dir.entries(@conf['svn_repo_working_copy']).size > 2 # 1.8.6 <
181
184
  end
182
185
 
183
186
  ## NOTE too much 'system' setup work
@@ -233,7 +236,7 @@ class TestSvnWc < Test::Unit::TestCase
233
236
  assert_equal @conf['svn_repo_master'], svn.info[:repos_root_url]
234
237
 
235
238
  # now have a working copy
236
- assert File.directory? @conf['svn_repo_working_copy']
239
+ assert File.directory?(@conf['svn_repo_working_copy'])
237
240
 
238
241
  end
239
242
 
@@ -376,7 +379,7 @@ class TestSvnWc < Test::Unit::TestCase
376
379
  assert_equal rev+1, n_rev
377
380
 
378
381
  assert ! File.file?(f[4])
379
- assert File.file? f[3]
382
+ assert File.file?(f[3])
380
383
  assert FileUtils.rm_rf(File.dirname(f[3]))
381
384
  end
382
385
 
@@ -445,7 +448,7 @@ class TestSvnWc < Test::Unit::TestCase
445
448
  assert_equal rev+1, rev1
446
449
 
447
450
  fe = Array.new
448
- files.each { |e| fe.push File.basename e}
451
+ files.each { |e| fe.push File.basename(e)}
449
452
  assert_equal \
450
453
  [(rev + 1), ["A\t#{fe[0]}", "A\t#{fe[1]}", "A\t#{fe[2]}"]],
451
454
  svn.update, 'added 3 files into another working copy of the repo, update
@@ -462,7 +465,7 @@ class TestSvnWc < Test::Unit::TestCase
462
465
  )
463
466
  # add 1 file, in another repo
464
467
  (rev3, file) = check_out_new_working_copy_add_and_commit_new_entries
465
- fe.push File.basename file[0]
468
+ fe.push File.basename(file[0])
466
469
 
467
470
  assert_equal \
468
471
  [(rev + 3), ["M\t#{fe[0]}", "A\t#{fe[3]}", "D\t#{fe[1]}", "D\t#{fe[2]}"]],
@@ -516,7 +519,7 @@ class TestSvnWc < Test::Unit::TestCase
516
519
 
517
520
  the_diff = r_list - d_list
518
521
  # not cross platform
519
- assert_equal the_diff, [File.join @conf['svn_repo_working_copy'], '/']
522
+ assert_equal the_diff, [File.join(@conf['svn_repo_working_copy'], '/')]
520
523
  #puts the_diff
521
524
  #p d_list.length
522
525
  #p r_list.length
@@ -671,3 +674,45 @@ class TestSvnWc < Test::Unit::TestCase
671
674
 
672
675
  end
673
676
 
677
+ if VERSION < '1.8.7'
678
+ # File lib/tmpdir.rb, line 99
679
+ def Dir.mktmpdir(prefix_suffix=nil, tmpdir=nil)
680
+ case prefix_suffix
681
+ when nil
682
+ prefix = "d"
683
+ suffix = ""
684
+ when String
685
+ prefix = prefix_suffix
686
+ suffix = ""
687
+ when Array
688
+ prefix = prefix_suffix[0]
689
+ suffix = prefix_suffix[1]
690
+ else
691
+ raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
692
+ end
693
+ tmpdir ||= Dir.tmpdir
694
+ t = Time.now.strftime("%Y%m%d")
695
+ n = nil
696
+ begin
697
+ path = "#{tmpdir}/#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
698
+ path << "-#{n}" if n
699
+ path << suffix
700
+ Dir.mkdir(path, 0700)
701
+ rescue Errno::EEXIST
702
+ n ||= 0
703
+ n += 1
704
+ retry
705
+ end
706
+
707
+ if block_given?
708
+ begin
709
+ yield path
710
+ ensure
711
+ FileUtils.remove_entry_secure path
712
+ end
713
+ else
714
+ path
715
+ end
716
+ end
717
+ end
718
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: svn_wc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Wright
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-27 00:00:00 -08:00
12
+ date: 2010-02-17 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15