s3_meta_sync 0.1.5 → 0.1.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f29dd0019e474ba1364be76ebfd587faff17782
4
- data.tar.gz: a849c0d899cc4165741cda9c222ff8c817bd54c2
3
+ metadata.gz: b2ae988de36b8fabaa5dfa6f19726fc971b46133
4
+ data.tar.gz: 50e7f0a149cb5ed3bd3d6c09c9b32e2998118996
5
5
  SHA512:
6
- metadata.gz: a0e544f47de061d2acb397f36474d2c91c69688ec1588b818a93c16b592c0862f906f9cb4f749c348008f15a1eacb534d8d549c6d30fee077983296f5fde0cd3
7
- data.tar.gz: 317dd76fb942a58c8f60ccd41f2d27fe2a2bb2cd7acf54b7dca3ac21c7a60fa738dbbaa3162efdfb2368de3423f215134fc2c1275f825828463e4784c35fa157
6
+ metadata.gz: fa22acee1c5ecac7af983b52fa856948fb7c98f8b66bd374f5f869b24d08d725f6c083ebd89c6c440df3cd14ec50cfa0603546c8bfe899cf3bf1e5ddd09428fb
7
+ data.tar.gz: c6e7d3927654ec728757431865ced2cd2a08db8f5b78e9fe9a306f55a9b4c3527af8d114dffd5c2d3aa1fb92d5efdef22682787597bbf3a62270dcc71d3b42de
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,3 +1,3 @@
1
1
  module S3MetaSync
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
data/lib/s3_meta_sync.rb CHANGED
@@ -34,31 +34,33 @@ module S3MetaSync
34
34
  remote_info = begin
35
35
  download_meta(destination)
36
36
  rescue RemoteWithoutMeta
37
+ log "Remote has no .s3-meta-sync, uploading everything"
37
38
  {}
38
39
  end
39
40
  generate_meta(source)
40
41
  local_info = read_meta(source)
42
+ upload = local_info.select { |path, md5| remote_info[path] != md5 }.map(&:first)
43
+ delete = remote_info.keys - local_info.keys
41
44
 
42
- in_multiple_processes(local_info) do |path, md5|
43
- next if remote_info[path] == md5
44
- upload_file(source, path, destination)
45
- end
46
-
47
- delete_remote_files(destination, remote_info.keys - local_info.keys)
48
-
45
+ upload_files(source, destination, upload)
46
+ delete_remote_files(destination, delete)
49
47
  upload_file(source, META_FILE, destination)
50
48
  end
51
49
 
52
50
  def upload_file(source, path, destination)
51
+ log "Uploading #{path}"
53
52
  s3.objects["#{destination}/#{path}"].write File.read("#{source}/#{path}"), :acl => :public_read
54
53
  end
55
54
 
56
55
  def delete_remote_files(remote, paths)
56
+ paths.each { |path| log "Deleting #{@bucket}:#{remote}/#{path}" }
57
57
  s3.objects.delete paths.map { |path| "#{remote}/#{path}" }
58
58
  end
59
59
 
60
60
  def delete_local_files(local, paths)
61
- File.delete(*paths.map { |path| "#{local}/#{path}" })
61
+ paths = paths.map { |path| "#{local}/#{path}" }
62
+ paths.each { |path| log "Deleting #{path}" }
63
+ File.delete(*paths)
62
64
  end
63
65
 
64
66
  def s3
@@ -94,6 +96,7 @@ module S3MetaSync
94
96
  end
95
97
 
96
98
  def download_content(path)
99
+ log "Downloading #{path}"
97
100
  url = "https://s3#{"-#{region}" if region}.amazonaws.com/#{@bucket}/#{path}"
98
101
  open(url).read
99
102
  rescue OpenURI::HTTPError
@@ -103,27 +106,39 @@ module S3MetaSync
103
106
  def download(source, destination)
104
107
  remote_info = download_meta(source)
105
108
  generate_meta(destination)
106
- local_info = read_meta(destination) # TODO maybe generate !?
107
-
108
- in_multiple_processes(remote_info) do |path, md5|
109
- next if local_info[path] == md5
110
- download_file(source, path, destination)
111
- end
112
-
113
- delete_local_files(destination, local_info.keys - remote_info.keys)
109
+ local_info = read_meta(destination)
110
+ download = remote_info.select { |path, md5| local_info[path] != md5 }.map(&:first)
111
+ delete = local_info.keys - remote_info.keys
114
112
 
113
+ download_files(source, destination, download)
114
+ delete_local_files(destination, delete)
115
115
  download_file(source, META_FILE, destination)
116
+ delete_empty_folders(destination)
117
+ end
116
118
 
119
+ def delete_empty_folders(destination)
117
120
  `find #{destination} -depth -empty -delete`
118
121
  end
119
122
 
123
+ def download_files(source, destination, paths)
124
+ in_parallel(:threads, paths) { |path| download_file(source, path, destination) }
125
+ end
126
+
127
+ def upload_files(source, destination, paths)
128
+ in_parallel(:processes, paths) { |path| upload_file(source, path, destination) }
129
+ end
130
+
120
131
  def region
121
132
  @config[:region] unless @config[:region].to_s.empty?
122
133
  end
123
134
 
124
- def in_multiple_processes(data, &block)
135
+ def in_parallel(way, data, &block)
125
136
  processes = [@config[:parallel] || 10, data.size].min
126
- Parallel.each(data, :in_processes => processes, &block) # we tried threads but that blew up with weird errors when having lot's of uploads :/
137
+ Parallel.each(data, :"in_#{way}" => processes, &block) # we tried threads but that blew up with weird errors when having lot's of uploads :/
138
+ end
139
+
140
+ def log(text)
141
+ $stderr.puts text if @config[:verbose]
127
142
  end
128
143
  end
129
144
 
@@ -157,6 +172,7 @@ module S3MetaSync
157
172
  opts.on("-s", "--secret SECRET", "AWS secret key") { |c| options[:secret] = c }
158
173
  opts.on("-r", "--region REGION", "AWS region if not us-standard") { |c| options[:region] = c }
159
174
  opts.on("-p", "--parallel COUNT", Integer, "Use COUNT processes for download/upload default: 10") { |c| options[:parallel] = c }
175
+ opts.on("-V", "--verbose", "Verbose mode"){ options[:verbose] = true }
160
176
  opts.on("-h", "--help", "Show this.") { puts opts; exit }
161
177
  opts.on("-v", "--version", "Show Version"){ puts VERSION; exit}
162
178
  end.parse!(argv)
data.tar.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- f�1]a��Q�׭I������u}��X��fƍ[$iG�(D=�e�`J,ږN]
2
- #�:��v�N���Ciu(����Qx_Ǹ��s%�S���/�$���K`+�у�I4
1
+
2
+ l�.N�!�hD��j���������N���7$u+�D��=��ݤ&Hl��$6���^���/vq<�n�L����rj0�^����6*:2 �\��Ѿe� �An�{��-f^<��������uUe��f�0����V�g�_�&(w˦���(JGU���,�(�=O������6��!�*3_+rr��.�������}GT�Ԯ0����w��R���z!�cB��%G�M����ɿ��r�2a�heV���8�
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3_meta_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
@@ -29,7 +29,7 @@ cert_chain:
29
29
  y0kCSWmK6D+x/SbfS6r7Ke07MRqziJdB9GuE1+0cIRuFh8EQ+LN6HXCKM5pon/GU
30
30
  ycwMXfl0
31
31
  -----END CERTIFICATE-----
32
- date: 2013-09-26 00:00:00.000000000 Z
32
+ date: 2013-09-27 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: aws-sdk
metadata.gz.sig CHANGED
Binary file