s3up 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/s3up +13 -8
  2. data/lib/s3up.rb +45 -5
  3. 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 :verbose, "verbose logging"
9
- opt :'generate-manifest', "create a json manifest file"
10
- opt :dump, "show the manifest output"
11
- opt :folder, "folders to include", :default => '**'
12
- opt :types, "file types to include", :default => 'jpg,mp3'
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[ :'generate-manifest' ]
25
- s3up.generate_manifest
25
+ if options[ :init ]
26
+ s3up.init
26
27
  else
27
- s3up.upload
28
+ if options[ :'generate-manifest' ]
29
+ s3up.generate_manifest
30
+ else
31
+ s3up.upload
32
+ end
28
33
  end
@@ -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
- key.put( File.open( filename ).read, 'public-read' )
41
- puts "uploaded: #{ key.full_name }" if @options[ :verbose ]
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.1.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: 2011-01-11 00:00:00.000000000 -08:00
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: &2153277080 !ruby/object:Gem::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: *2153277080
25
+ version_requirements: *2157185420
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: work_queue
28
- requirement: &2153276520 !ruby/object:Gem::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: *2153276520
36
+ version_requirements: *2157184720
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: aws
39
- requirement: &2153275920 !ruby/object:Gem::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: *2153275920
47
+ version_requirements: *2157184120
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: mime-types
50
- requirement: &2153275360 !ruby/object:Gem::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: *2153275360
58
+ version_requirements: *2157183540
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: json
61
- requirement: &2153274720 !ruby/object:Gem::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: *2153274720
70
- description: Directory recursive multithreaded s3 uploader
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: http://rubygems.org/gems/s3up
80
+ homepage: https://github.com/Dashwire/s3up
81
81
  licenses: []
82
82
  post_install_message:
83
83
  rdoc_options: []