s3up 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/s3up +13 -8
- data/lib/s3up.rb +45 -5
- metadata +14 -14
data/bin/s3up
CHANGED
@@ -5,11 +5,12 @@ require 'trollop'
|
|
5
5
|
require 's3up'
|
6
6
|
|
7
7
|
options = Trollop::options do
|
8
|
-
opt :
|
9
|
-
opt :
|
10
|
-
opt :
|
11
|
-
opt :
|
12
|
-
opt :
|
8
|
+
opt :init, 'create .s3uprc file in current directory'
|
9
|
+
opt :verbose, 'verbose logging'
|
10
|
+
opt :'generate-manifest', 'create a json manifest file'
|
11
|
+
opt :dump, 'show the manifest output'
|
12
|
+
opt :folder, 'folders to include', :default => '**'
|
13
|
+
opt :types, 'file types to include', :type => :string
|
13
14
|
opt :manifest, 'specify file name for the json manifest', :default => 'manifest.json', :type => :string
|
14
15
|
opt :bucket, 'destination bucket', :type => :string
|
15
16
|
opt :prefix, 'destination key prefix', :type => :string
|
@@ -21,8 +22,12 @@ end
|
|
21
22
|
|
22
23
|
s3up = S3up.new( options )
|
23
24
|
|
24
|
-
if options[ :
|
25
|
-
s3up.
|
25
|
+
if options[ :init ]
|
26
|
+
s3up.init
|
26
27
|
else
|
27
|
-
|
28
|
+
if options[ :'generate-manifest' ]
|
29
|
+
s3up.generate_manifest
|
30
|
+
else
|
31
|
+
s3up.upload
|
32
|
+
end
|
28
33
|
end
|
data/lib/s3up.rb
CHANGED
@@ -14,6 +14,26 @@ class S3up
|
|
14
14
|
@files = Dir.glob( glob, File::FNM_CASEFOLD )
|
15
15
|
end
|
16
16
|
|
17
|
+
def init
|
18
|
+
keys = @command_line_options.keys.select { | k | k.match( /_given/ ) }.map { | k | k[ 0 .. -7 ] }
|
19
|
+
init_options = @command_line_options.select {|k| keys.include?( k.to_s ) }
|
20
|
+
init_options.delete( :init )
|
21
|
+
options = {
|
22
|
+
:id => 'AWS_ACCESS_KEY_ID',
|
23
|
+
:key => 'AWS_SECRET_ACCESS_KEY',
|
24
|
+
:bucket => 's3up.test.bucket',
|
25
|
+
:prefix => 'key_prefix/',
|
26
|
+
:types => 'jpg,png,mp3,json',
|
27
|
+
:threads => 10
|
28
|
+
}
|
29
|
+
options.merge!( init_options )
|
30
|
+
File.open( './.s3uprc', 'w' ) do | file |
|
31
|
+
options.each do | key, value |
|
32
|
+
file.puts "#{ key }: #{ value }"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
17
37
|
def overwrite_options( options )
|
18
38
|
options.each { | key, value | @options[ key.to_sym ] = value if value }
|
19
39
|
end
|
@@ -21,11 +41,12 @@ class S3up
|
|
21
41
|
def load_options( file )
|
22
42
|
if File.exists?( File.expand_path( file ) )
|
23
43
|
options = YAML.load_file( File.expand_path( file ) )
|
24
|
-
overwrite_options( options )
|
44
|
+
overwrite_options( options ) if options
|
25
45
|
end
|
26
46
|
end
|
27
47
|
|
28
48
|
def setup_options( options )
|
49
|
+
@command_line_options = options
|
29
50
|
@options = {}
|
30
51
|
load_options( '~/.s3uprc' )
|
31
52
|
load_options( './.s3uprc' )
|
@@ -33,18 +54,37 @@ class S3up
|
|
33
54
|
puts @options if @options[ :verbose ]
|
34
55
|
end
|
35
56
|
|
57
|
+
def file_changed( key, file )
|
58
|
+
stat = File.stat( file )
|
59
|
+
key.refresh( true )
|
60
|
+
if stat.size != key.size
|
61
|
+
puts "file changed" if @options[ :verbose ]
|
62
|
+
true
|
63
|
+
else
|
64
|
+
puts "file not changed" if @options[ :verbose ]
|
65
|
+
false
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def s3
|
70
|
+
@s3 ||= Aws::S3.new( @options[ :id ], @options[ :key ], :connection_mode => :per_thread )
|
71
|
+
end
|
72
|
+
|
36
73
|
def upload_file( bucket_name, filename, key_name = filename )
|
37
|
-
s3 = Aws::S3.new( @options[ :id ], @options[ :key ], :connection_mode => :per_thread )
|
38
74
|
bucket = s3.bucket( bucket_name )
|
39
75
|
key = Aws::S3::Key.create( bucket ,key_name )
|
40
|
-
|
41
|
-
|
76
|
+
if @options[ :force ] || file_changed( key, filename )
|
77
|
+
key.put( File.open( filename ).read, 'public-read' )
|
78
|
+
puts "uploaded: #{ key.full_name }"
|
79
|
+
else
|
80
|
+
puts "skipped: #{ key.full_name }"
|
81
|
+
end
|
42
82
|
rescue Exception => e
|
43
83
|
puts e
|
44
84
|
end
|
45
85
|
|
46
86
|
def create_bucket( bucket_name )
|
47
|
-
s3 = Aws::S3.new( @options[ :id ], @options[ :key ] )
|
87
|
+
# s3 = Aws::S3.new( @options[ :id ], @options[ :key ] )
|
48
88
|
bucket = s3.bucket( bucket_name, true, 'public-read' )
|
49
89
|
rescue Exception => e
|
50
90
|
puts e
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: s3up
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-11 00:00:00.000000000 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: trollop
|
17
|
-
requirement: &
|
17
|
+
requirement: &2157185420 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2157185420
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: work_queue
|
28
|
-
requirement: &
|
28
|
+
requirement: &2157184720 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2157184720
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: aws
|
39
|
-
requirement: &
|
39
|
+
requirement: &2157184120 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2157184120
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: mime-types
|
50
|
-
requirement: &
|
50
|
+
requirement: &2157183540 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2157183540
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: json
|
61
|
-
requirement: &
|
61
|
+
requirement: &2157182900 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,8 +66,8 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
70
|
-
description: Directory
|
69
|
+
version_requirements: *2157182900
|
70
|
+
description: Directory recursing multi-threaded S3 uploader
|
71
71
|
email: opensource@dashwire.com
|
72
72
|
executables:
|
73
73
|
- s3up
|
@@ -77,7 +77,7 @@ files:
|
|
77
77
|
- lib/s3up.rb
|
78
78
|
- bin/s3up
|
79
79
|
has_rdoc: true
|
80
|
-
homepage:
|
80
|
+
homepage: https://github.com/Dashwire/s3up
|
81
81
|
licenses: []
|
82
82
|
post_install_message:
|
83
83
|
rdoc_options: []
|