six-rsync 0.6.1 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ require 'rake/testtask'
12
12
 
13
13
  spec = Gem::Specification.new do |s|
14
14
  s.name = 'six-rsync'
15
- s.version = '0.6.1'
15
+ s.version = '0.6.3'
16
16
  s.has_rdoc = true
17
17
  s.extra_rdoc_files = ['README', 'LICENSE']
18
18
  s.summary = 'Your summary here'
data/lib/six/rsync/lib.rb CHANGED
@@ -88,6 +88,16 @@ module Six
88
88
  @logger.info "Removed: #{key}"
89
89
  end
90
90
  end
91
+
92
+ @repos_local[:pack].each_pair do |key, value|
93
+ i += 1
94
+ localkey = "#{key}"
95
+ localkey.gsub!(/\.gz$/, "")
96
+ if @repos_local[:wd][localkey].nil?
97
+ @logger.info "Removed: #{key}"
98
+ end
99
+ end
100
+
91
101
  end
92
102
 
93
103
  def init
@@ -216,11 +226,26 @@ module Six
216
226
 
217
227
  @logger.info "Removing: #{packed}"
218
228
  @repos_local[:wd].delete key
219
- @repos_local[:pack].delete packed
229
+ @repos_local[:pack].delete packed
230
+ FileUtils.rm_f(file) if File.exists?(file)
231
+ end
232
+ end
233
+
234
+ @repos_local[:pack].each_pair do |key, value|
235
+ i += 1
236
+ localkey = "#{key}"
237
+ localkey.gsub!(/\.gz$/, "")
238
+ if @repos_local[:wd][localkey].nil?
239
+ @logger.info "Removing: #{key}"
240
+
241
+ change = true
242
+ file = pack_path(key)
243
+ @repos_local[:pack].delete key
220
244
  FileUtils.rm_f(file) if File.exists?(file)
221
245
  end
222
246
  end
223
247
 
248
+
224
249
  if change
225
250
  @logger.info "Changes found!"
226
251
  save_repos(:local)
@@ -282,10 +307,10 @@ module Six
282
307
  @logger = opts[:log] if opts[:log]
283
308
 
284
309
  case repository
285
- when Array
286
- config[:hosts] += repository
287
- when String
288
- config[:hosts] << repository
310
+ when Array
311
+ config[:hosts] += repository
312
+ when String
313
+ config[:hosts] << repository
289
314
  end
290
315
 
291
316
  # TODO: Eval move to update?
@@ -434,67 +459,67 @@ module Six
434
459
 
435
460
  if mismatch.size > 0
436
461
  case typ
437
- when :pack
438
- # direct unpack of gz into working folder
439
- done = false
440
-
441
- ## Pack
442
- if online
443
- hosts = config[:hosts].clone
444
- host = hosts.sample unless host
445
- b, i = false, 0
446
- until hosts.empty? || done do
447
- i += 1
448
- # FIXME: Nasty
449
- if b
450
- host = hosts.sample
451
- @logger.info "Trying #{i}/#{config[:hosts].size}: #{host}"
462
+ when :pack
463
+ # direct unpack of gz into working folder
464
+ done = false
465
+
466
+ ## Pack
467
+ if online
468
+ hosts = config[:hosts].clone
469
+ host = hosts.sample unless host
470
+ b, i = false, 0
471
+ until hosts.empty? || done do
472
+ i += 1
473
+ # FIXME: Nasty
474
+ if b
475
+ host = hosts.sample
476
+ @logger.info "Trying #{i}/#{config[:hosts].size}: #{host}"
477
+ end
478
+ slist = nil
479
+ b = true
480
+ hosts -= [host]
481
+
482
+ # TODO: Progress bar
483
+ arr_opts = []
484
+ arr_opts << PARAMS
485
+ arr_opts << @rsh if host[/^(\w)*\@/]
486
+
487
+ if mismatch.size > (@repos_remote[typ].size / 2)
488
+ # Process full folder
489
+ @logger.info "Many files mismatched (#{mismatch.size}), running full update on .pack folder"
490
+ else
491
+ # Process only selective
492
+ @logger.info "Fetching #{mismatch.size} files... Please wait"
493
+ slist = File.join(TEMP_PATH, ".six-rsync_#{rand 9999}-list")
494
+ slist.gsub!("\\", "/")
495
+ File.open(slist, 'w') { |f| mismatch.each { |e| f.puts e } }
496
+
497
+ arr_opts << "--files-from=#{win2cyg("\"#{slist}\"")}"
498
+ end
499
+
500
+ begin
501
+ arr_opts << esc(File.join(host, '.pack/.'))
502
+ arr_opts << esc(pack_path)
503
+ command('', arr_opts)
504
+
505
+ done = true
506
+ rescue => e
507
+ @logger.debug "ERROR: #{e.class} #{e.message} #{e.backtrace.join("\n")}"
508
+ ensure
509
+ FileUtils.rm_f slist if slist
510
+ end
452
511
  end
453
- slist = nil
454
- b = true
455
- hosts -= [host]
456
-
457
- # TODO: Progress bar
458
- arr_opts = []
459
- arr_opts << PARAMS
460
- arr_opts << @rsh if host[/^(\w)*\@/]
461
-
462
- if mismatch.size > (@repos_remote[typ].size / 2)
463
- # Process full folder
464
- @logger.info "Many files mismatched (#{mismatch.size}), running full update on .pack folder"
465
- else
466
- # Process only selective
467
- @logger.info "Fetching #{mismatch.size} files... Please wait"
468
- slist = File.join(TEMP_PATH, ".six-rsync_#{rand 9999}-list")
469
- slist.gsub!("\\", "/")
470
- File.open(slist, 'w') { |f| mismatch.each { |e| f.puts e } }
471
-
472
- arr_opts << "--files-from=#{win2cyg("\"#{slist}\"")}"
473
- end
474
-
475
- begin
476
- arr_opts << esc(File.join(host, '.pack/.'))
477
- arr_opts << esc(pack_path)
478
- command('', arr_opts)
479
-
480
- done = true
481
- rescue => e
482
- @logger.debug "ERROR: #{e.class} #{e.message} #{e.backtrace.join("\n")}"
483
- ensure
484
- FileUtils.rm_f slist if slist
512
+ unless done
513
+ @logger.warn "Exhausted all mirrors, please retry!"
514
+ raise RsyncError
485
515
  end
486
516
  end
487
- unless done
488
- @logger.warn "Exhausted all mirrors, please retry!"
489
- raise RsyncError
517
+ when :wd
518
+ mismatch.each_with_index do |e, index|
519
+ # TODO: Nicer progress bar...
520
+ @logger.info "Unpacking #{index + 1}/#{mismatch.size}: #{e}"
521
+ unpack(:path => "#{e}.gz")
490
522
  end
491
- end
492
- when :wd
493
- mismatch.each_with_index do |e, index|
494
- # TODO: Nicer progress bar...
495
- @logger.info "Unpacking #{index + 1}/#{mismatch.size}: #{e}"
496
- unpack(:path => "#{e}.gz")
497
- end
498
523
  end
499
524
  end
500
525
 
@@ -583,12 +608,12 @@ module Six
583
608
  @logger.debug "Calculating checksums of #{typ} files"
584
609
  ar = []
585
610
  reg = case typ
586
- when :pack
587
- ar = Dir[pack_path('**/*')]
588
- /^[\\|\/]\.rsync[\\|\/]\.pack[\\|\/]/
589
- when :wd
590
- ar = Dir[File.join(@rsync_work_dir, '/**/*')]
591
- /^[\\|\/]/
611
+ when :pack
612
+ ar = Dir[pack_path('**/*')]
613
+ /^[\\|\/]\.rsync[\\|\/]\.pack[\\|\/]/
614
+ when :wd
615
+ ar = Dir[File.join(@rsync_work_dir, '/**/*')]
616
+ /^[\\|\/]/
592
617
  end
593
618
  h = Hash.new
594
619
  ar.each do |file|
@@ -621,12 +646,12 @@ module Six
621
646
  def save_repos(typ = :local)
622
647
  file, config = nil, nil
623
648
  case typ
624
- when :local
625
- file = rsync_path('.repository.yml')
626
- config = @repos_local.clone
627
- when :remote
628
- file = pack_path('.repository.yml')
629
- config = @repos_remote.clone
649
+ when :local
650
+ file = rsync_path('.repository.yml')
651
+ config = @repos_local.clone
652
+ when :remote
653
+ file = pack_path('.repository.yml')
654
+ config = @repos_remote.clone
630
655
  end
631
656
  config[:pack] = config[:pack].sort
632
657
  config[:wd] = config[:wd].sort
@@ -635,10 +660,10 @@ module Six
635
660
 
636
661
  def load_repos(typ)
637
662
  config = case typ
638
- when :local
639
- YAML::load_file(rsync_path('.repository.yml'))
640
- when :remote
641
- YAML::load_file(pack_path('.repository.yml'))
663
+ when :local
664
+ YAML::load_file(rsync_path('.repository.yml'))
665
+ when :remote
666
+ YAML::load_file(pack_path('.repository.yml'))
642
667
  end
643
668
 
644
669
  [:wd, :pack].each do |t|
@@ -648,19 +673,19 @@ module Six
648
673
  end
649
674
 
650
675
  case typ
651
- when :local
652
- @repos_local = config
653
- when :remote
654
- @repos_remote = config
676
+ when :local
677
+ @repos_local = config
678
+ when :remote
679
+ @repos_remote = config
655
680
  end
656
681
  end
657
682
 
658
683
  def del_file(file, typ, opts = {})
659
684
  path = case typ
660
- when :pack
661
- File.join(@rsync_work_dir, DIR_PACK, file)
662
- when :wd
663
- File.join(@rsync_work_dir, file)
685
+ when :pack
686
+ File.join(@rsync_work_dir, DIR_PACK, file)
687
+ when :wd
688
+ File.join(@rsync_work_dir, file)
664
689
  end
665
690
  if File.exists?(path)
666
691
  FileUtils.rm_f File.join(path)
@@ -760,55 +785,106 @@ module Six
760
785
 
761
786
  @logger.debug(rsync_cmd) if @logger
762
787
 
763
- out = chdir && (Dir.getwd != path) ? Dir.chdir(path) { run_command(rsync_cmd, &block) } : run_command(rsync_cmd, &block)
788
+ out = chdir && (Dir.getwd != path) ? Dir.chdir(path) { run_command(rsync_cmd, &block) } : run_command(rsync_cmd, &block)
764
789
  out
765
790
  end
766
791
 
767
792
  def run_command(rsync_cmd, &block)
768
793
  out, err = '', ''
769
794
  buff = []
770
- status = nil
795
+ #status = nil
796
+ shebang = nil
771
797
  oldsync = STDOUT.sync
772
798
  STDOUT.sync = true
799
+ cmd = case RUBY_PLATFORM
800
+ when /-mingw32$/, /-mswin32$/
801
+ "ruby \"#{File.join(File.dirname(__FILE__), "..", "wrapper.rb")}\" #{rsync_cmd}"
802
+ else
803
+ rsync_cmd
804
+ end
773
805
 
774
- po = Open3.popen3(rsync_cmd) do |io_in, io_out, io_err, waitth|
806
+ po = IO.popen("#{cmd} 2>&1") do |io_out| #Open3.popen3(rsync_cmd) do |io_in, io_out, io_err, waitth|
807
+ #io_in.close
808
+ io_out.sync = true
775
809
  io_out.each_byte do |buffer|
776
810
  char = buffer.chr
777
811
  buff << char
778
812
  if ["\n", "\r"].include?(char)
779
- b = buff.join("")
780
- print b if @verbose
781
- out << b
813
+ msg = buff.join("")
814
+
815
+ case RUBY_PLATFORM
816
+ when /-mingw32$/, /-mswin32$/
817
+ if msg =~ /^SIX-SHEBANG: /
818
+ shebang = msg
819
+ else
820
+ print msg if @verbose
821
+ end
822
+ else
823
+ print msg if @verbose
824
+ end
825
+
826
+ out << msg
782
827
  buff = []
783
828
  end
784
829
  end
785
830
 
786
- io_err.each do |line|
787
- print line
788
- case line
789
- when /max connections \((.*)\) reached/
790
- @logger.warn "Server reached maximum connections."
791
- end
792
- err << line
793
- end
794
- status = waitth.value
831
+ #io_err.each do |line|
832
+ # print line
833
+ # case line
834
+ # when /max connections \((.*)\) reached/
835
+ # @logger.warn "Server reached maximum connections."
836
+ # end
837
+ # err << line
838
+ #end
839
+ #status = waitth.value
795
840
  end
796
841
 
797
- unless buff.empty?
798
- b = buff.join("")
799
- print b if @verbose
800
- out << b
842
+ pid, status = nil, 1
843
+ case RUBY_PLATFORM
844
+ when /-mingw32$/, /-mswin32$/
845
+ # Handle last bits in the buffer
846
+ unless buff.empty?
847
+ msg = buff.join("")
848
+ if msg =~ /^SIX-SHEBANG: /
849
+ shebang = msg
850
+ else
851
+ print msg if @verbose
852
+ end
853
+ end
854
+
855
+ if shebang
856
+ shebang[/^SIX-SHEBANG: ([0-9]*), ([0-9]*)/]
857
+ pid, status = $1.to_i, $2.to_i
858
+ end
859
+ else
860
+ # Handle last bits in the buffer
861
+ unless buff.empty?
862
+ msg = buff.join("")
863
+ print msg if @verbose
864
+ end
865
+ pid, status = $?.pid, $?.status
801
866
  end
802
867
 
803
- @logger.debug "Status: #{status}"
868
+
869
+ @logger.debug "Pid: #{pid} Status: #{status}"
804
870
  @logger.debug "Err: #{err}" # TODO: Throw this into the info/error log?
805
871
  @logger.debug "Output: #{out}"
806
872
 
807
- if status.exitstatus > 0
808
- #return 0 if status.exitstatus == 1 && out == ''
809
- raise Rsync::RsyncExecuteError.new(rsync_cmd + ':' + err + ':' + out)
873
+ if status > 0
874
+ case out
875
+ when /max connections \((.*)\) reached/
876
+ @logger.warn "Server reached maximum connections."
877
+ end
878
+ raise Rsync::RsyncExecuteError.new(rsync_cmd + ", [#{status}, #{pid}]" + ':' + out)
879
+ #messages << Log.new(:logsession_id => ses, :content => "Abnormal program termination. #{pid}: #{status}")
810
880
  end
811
881
 
882
+
883
+ # if status.exitstatus > 0
884
+ #return 0 if status.exitstatus == 1 && out == ''
885
+ #raise Rsync::RsyncExecuteError.new(rsync_cmd + ':' + err + ':' + out)
886
+ #end
887
+
812
888
  STDOUT.sync = false unless STDOUT.sync == oldsync
813
889
 
814
890
  status
data/lib/six/rsync-app.rb CHANGED
@@ -90,7 +90,7 @@ module Six
90
90
  if options[:logging]
91
91
  o_file = Log4r::FileOutputter.new "#{COMPONENT}-file",
92
92
  'level' => 0, # All
93
- :filename => File.join(DATA_PATH, 'logs', "#{COMPONENT}-file"),
93
+ :filename => File.join(DATA_PATH, 'logs', "#{COMPONENT}.log"),
94
94
  'formatter' => format2
95
95
  #:maxsize => 1024
96
96
  @@log.outputters << o_file
data/lib/six/rsync.rb CHANGED
@@ -27,7 +27,7 @@ module Six
27
27
 
28
28
  module Rsync
29
29
  COMPONENT = 'six-rsync'
30
- VERSION = '0.6.1'
30
+ VERSION = '0.6.3'
31
31
  BASE_PATH = Dir.pwd
32
32
 
33
33
  case RUBY_PLATFORM
@@ -0,0 +1,3 @@
1
+ $stdout.sync = true
2
+ system "#{ARGV.join(" ")} 2>&1"
3
+ puts "SIX-SHEBANG: #{$?.pid}, #{$?.exitstatus}"
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 6
8
- - 1
9
- version: 0.6.1
8
+ - 3
9
+ version: 0.6.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sickboy
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-08 00:00:00 +02:00
17
+ date: 2010-05-09 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -56,6 +56,7 @@ files:
56
56
  - lib/six/rsync-app.rb
57
57
  - lib/six/rsync-mirror.rb
58
58
  - lib/six/rsync.rb
59
+ - lib/six/wrapper.rb
59
60
  has_rdoc: true
60
61
  homepage:
61
62
  licenses: []