heirloom 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,10 @@
1
1
  require "heirloom/acl"
2
2
  require "heirloom/aws"
3
- require "heirloom/artifact"
4
3
  require "heirloom/config"
4
+ require "heirloom/logger"
5
+ require "heirloom/artifact"
5
6
  require "heirloom/directory"
6
7
  require "heirloom/uploader"
8
+ require "heirloom/downloader"
7
9
  require "heirloom/destroyer"
8
10
  require "heirloom/version"
@@ -16,10 +16,11 @@ module Heirloom
16
16
 
17
17
  key = "#{key_folder}/#{key_name}.tar.gz"
18
18
 
19
- current_acls = s3.get_bucket_acl(bucket)
19
+ current_acls = s3.get_bucket_acl bucket
20
20
 
21
21
  name = current_acls['Owner']['Name']
22
22
  id = current_acls['Owner']['ID']
23
+
23
24
  grants = build_bucket_grants :id => id,
24
25
  :name => name,
25
26
  :accounts => @accounts
@@ -1,7 +1,9 @@
1
1
  require 'heirloom/artifact/artifact_lister.rb'
2
2
  require 'heirloom/artifact/artifact_reader.rb'
3
3
  require 'heirloom/artifact/artifact_builder.rb'
4
+ require 'heirloom/artifact/artifact_updater.rb'
4
5
  require 'heirloom/artifact/artifact_uploader.rb'
6
+ require 'heirloom/artifact/artifact_downloader.rb'
5
7
  require 'heirloom/artifact/artifact_authorizer.rb'
6
8
  require 'heirloom/artifact/artifact_destroyer.rb'
7
9
 
@@ -11,48 +13,56 @@ module Heirloom
11
13
 
12
14
  def initialize(args)
13
15
  @config = Config.new :config => args[:config]
14
- @logger = args[:logger] ||= Logger.new(STDOUT)
15
-
16
- @logger.datetime_format = "%Y-%m-%d %H:%M:%S"
17
- @logger.formatter = proc do |severity, datetime, progname, msg|
18
- "#{datetime}: #{msg}\n"
19
- end
16
+ @logger = HeirloomLogger.new :logger => args[:logger]
20
17
  end
21
18
 
22
19
  def build(args)
23
- if artifact_reader.exists?(args)
20
+ if artifact_reader.exists? args
24
21
  @logger.info "Destroying existing artifact."
25
22
  destroy(args)
26
23
  end
27
24
 
28
- file = artifact_builder.build(args)
25
+ file = artifact_builder.build args
29
26
 
30
27
  artifact_uploader.upload :id => args[:id],
31
28
  :name => args[:name],
32
- :file => file,
33
- :public_readable => args[:public]
29
+ :public_readable => args[:public],
30
+ :file => file
34
31
 
35
- unless args[:public]
36
- artifact_authorizer.authorize :id => args[:id],
37
- :name => args[:name],
38
- :public_readable => args[:public_readable]
39
- end
32
+ artifact_authorizer.authorize :id => args[:id],
33
+ :name => args[:name],
34
+ :public_readable => args[:public]
35
+
36
+ artifact_builder.cleanup
37
+
38
+ @logger.info "Artifact build completed."
39
+ end
40
+
41
+ def update(args)
42
+ artifact_updater.update(args)
43
+ @logger.info "Artifact update completed."
44
+ end
45
+
46
+ def download(args)
47
+ artifact_downloader.download(args)
48
+ @logger.info "Artifact download completed."
40
49
  end
41
50
 
42
51
  def destroy(args)
43
52
  artifact_destroyer.destroy(args)
53
+ @logger.info "Artifact destroyed."
44
54
  end
45
55
 
46
56
  def show(args)
47
- artifact_reader.show(args)[args[:id]]
57
+ artifact_reader.show(args)
48
58
  end
49
59
 
50
- def versions(args)
51
- artifact_lister.versions(args)
60
+ def list(args)
61
+ artifact_lister.list(args)
52
62
  end
53
63
 
54
- def list
55
- artifact_lister.list
64
+ def names
65
+ artifact_lister.names
56
66
  end
57
67
 
58
68
  private
@@ -70,11 +80,21 @@ module Heirloom
70
80
  :logger => @logger
71
81
  end
72
82
 
83
+ def artifact_updater
84
+ @artifact_updater ||= ArtifactUpdater.new :config => @config,
85
+ :logger => @logger
86
+ end
87
+
73
88
  def artifact_uploader
74
89
  @artifact_uploader ||= ArtifactUploader.new :config => @config,
75
90
  :logger => @logger
76
91
  end
77
92
 
93
+ def artifact_downloader
94
+ @artifact_downloader ||= ArtifactDownloader.new :config => @config,
95
+ :logger => @logger
96
+ end
97
+
78
98
  def artifact_authorizer
79
99
  @artifact_authorizer ||= ArtifactAuthorizer.new :config => @config,
80
100
  :logger => @logger
@@ -12,7 +12,9 @@ module Heirloom
12
12
  name = args[:name]
13
13
  public_readable = args[:public_readable]
14
14
 
15
- unless @public_readable
15
+ unless public_readable
16
+ @logger.info "Authorizing access to artifact."
17
+
16
18
  @config.regions.each do |region|
17
19
  bucket = "#{@config.bucket_prefix}-#{region}"
18
20
 
@@ -13,14 +13,32 @@ module Heirloom
13
13
  def build(args)
14
14
  @name = args[:name]
15
15
  @id = args[:id]
16
- @public = args[:public]
17
- @git_directory = GitDirectory.new :directory => args[:directory],
18
- :logger => @logger
19
-
20
- @commit = @git_directory.commit @id
16
+ @exclude = args[:exclude]
17
+
18
+ directory = args[:directory] ||= '.'
19
+
20
+ @directory = Directory.new :directory => directory,
21
+ :exclude => @exclude,
22
+ :logger => @logger
23
+
24
+ @local_build = @directory.build_artifact_from_directory
21
25
 
22
26
  create_artifact_record
23
- @git_directory.build_artifact_from_directory
27
+
28
+ if args[:git]
29
+ git_directory = GitDirectory.new :directory => directory,
30
+ :logger => @logger
31
+ @logger.info "Adding git commit to attributes."
32
+ @commit = git_directory.commit @id
33
+ add_git_commit_to_artifact_record
34
+ end
35
+
36
+ @local_build
37
+ end
38
+
39
+ def cleanup
40
+ @logger.info "Cleaning up local build #{@local_build}."
41
+ File.delete @local_build
24
42
  end
25
43
 
26
44
  private
@@ -34,10 +52,21 @@ module Heirloom
34
52
  create_artifact_domain
35
53
  attributes = { 'built_by' => "#{user}@#{hostname}",
36
54
  'built_at' => Time.now.utc.iso8601,
37
- 'sha' => @id,
55
+ 'id' => @id }
56
+ @logger.info "Create artifact record #{@id}"
57
+ sdb.put_attributes @name, @id, attributes
58
+ end
59
+
60
+ def add_git_commit_to_artifact_record
61
+ attributes = { 'sha' => @id,
38
62
  'abbreviated_sha' => @commit.id_abbrev,
39
63
  'message' => @commit.message,
40
64
  'author' => @commit.author.name }
65
+ @logger.info "Git sha: #{@id}"
66
+ @logger.info "Git abbreviated_sha: #{@commit.id_abbrev}"
67
+ @logger.info "Git message: #{@commit.message}"
68
+ @logger.info "Git author: #{@commit.author.name}"
69
+
41
70
  sdb.put_attributes @name, @id, attributes
42
71
  end
43
72
 
@@ -0,0 +1,59 @@
1
+ module Heirloom
2
+
3
+ class ArtifactDownloader
4
+
5
+ def initialize(args)
6
+ @config = args[:config]
7
+ @logger = args[:logger]
8
+ end
9
+
10
+ def download(args)
11
+ @id = args[:id]
12
+ @name = args[:name]
13
+ @output = args[:output]
14
+ @region = args[:region]
15
+
16
+ s3_downloader = Downloader::S3.new :config => @config,
17
+ :logger => @logger,
18
+ :region => @region
19
+
20
+ @logger.info "Downloading s3://#{get_bucket}/#{get_key} from #{@region}."
21
+
22
+ file = s3_downloader.download_file :bucket => get_bucket,
23
+ :key => get_key
24
+
25
+ @logger.info "Writing file to #{@output}."
26
+
27
+ File.open(@output, 'w') do |local_file|
28
+ local_file.write file
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def get_bucket
35
+ artifact = artifact_reader.show :name => @name,
36
+ :id => @id
37
+
38
+ url = artifact["#{@region}-s3-url"].first
39
+
40
+ bucket = url.gsub('s3://', '').split('/').first
41
+ end
42
+
43
+ def get_key
44
+ artifact = artifact_reader.show :name => @name,
45
+ :id => @id
46
+
47
+ url = artifact["#{@region}-s3-url"].first
48
+
49
+ bucket = url.gsub('s3://', '').gsub(get_bucket, '')
50
+ bucket.slice!(0)
51
+ bucket
52
+ end
53
+
54
+ def artifact_reader
55
+ @artifact_reader ||= ArtifactReader.new :config => @config
56
+ end
57
+
58
+ end
59
+ end
@@ -6,12 +6,12 @@ module Heirloom
6
6
  @config = args[:config]
7
7
  end
8
8
 
9
- def versions(args)
9
+ def list(args)
10
10
  domain = args[:name]
11
11
  sdb.select("select * from #{domain}").keys.reverse
12
12
  end
13
13
 
14
- def list
14
+ def names
15
15
  sdb.domains
16
16
  end
17
17
 
@@ -9,11 +9,12 @@ module Heirloom
9
9
  def show(args)
10
10
  domain = args[:name]
11
11
  id = args[:id]
12
- sdb.select "select * from #{domain} where itemName() = '#{id}'"
12
+ items = sdb.select "select * from #{domain} where itemName() = '#{id}'"
13
+ items[id]
13
14
  end
14
15
 
15
16
  def exists?(args)
16
- show(args).any?
17
+ show(args) != nil
17
18
  end
18
19
 
19
20
  private
@@ -0,0 +1,27 @@
1
+ module Heirloom
2
+
3
+ class ArtifactUpdater
4
+
5
+ def initialize(args)
6
+ @config = args[:config]
7
+ @logger = args[:logger]
8
+ end
9
+
10
+ def update(args)
11
+ attribute = args[:attribute]
12
+ id = args[:id]
13
+ name = args[:name]
14
+ update = args[:update]
15
+
16
+ sdb.put_attributes name, id, { attribute => update }, { :replace => attribute }
17
+ @logger.info "Updated #{name} (#{id}): #{attribute} = #{update}"
18
+ end
19
+
20
+ private
21
+
22
+ def sdb
23
+ @sdb ||= AWS::SimpleDB.new :config => @config
24
+ end
25
+
26
+ end
27
+ end
@@ -9,50 +9,28 @@ module Heirloom
9
9
 
10
10
  def upload(args)
11
11
  id = args[:id]
12
- name = args[:name]
13
12
  file = args[:file]
14
- key = "#{id}.tar.gz"
13
+ key_folder = args[:name]
14
+ key_name = "#{id}.tar.gz"
15
+ name = args[:name]
15
16
  public_readable = args[:public_readable]
16
17
 
17
18
  @config.regions.each do |region|
18
19
  bucket = "#{@config.bucket_prefix}-#{region}"
19
20
 
20
21
  s3_uploader = Uploader::S3.new :config => @config,
22
+ :logger => @logger,
21
23
  :region => region
22
24
 
23
- s3_uploader.upload_file :file => file,
24
- :bucket => bucket,
25
- :key_name => key,
26
- :key_folder => name,
25
+ s3_uploader.upload_file :bucket => bucket,
26
+ :file => file,
27
+ :id => id,
28
+ :key_folder => key_folder,
29
+ :key_name => key_name,
30
+ :name => name,
27
31
  :public_readable => public_readable
28
- sdb.put_attributes name, id, { "#{region}-s3-url" =>
29
- "s3://#{bucket}/#{name}/#{key}" }
30
-
31
- @logger.info "Uploading s3://#{bucket}/#{name}/#{key}"
32
-
33
- sdb.put_attributes name, id, { "#{region}-http-url" =>
34
- "http://#{s3_endpoints[region]}/#{bucket}/#{name}/#{key}" }
35
- @logger.info "Uploading http://#{s3_endpoints[region]}/#{bucket}/#{name}/#{key}"
36
-
37
- sdb.put_attributes name, id, { "#{region}-https-url" =>
38
- "https://#{s3_endpoints[region]}/#{bucket}/#{name}/#{key}" }
39
- @logger.info "Uploading https://#{s3_endpoints[region]}/#{bucket}/#{name}/#{key}"
40
32
  end
41
33
  end
42
34
 
43
- private
44
-
45
- def s3_endpoints
46
- {
47
- 'us-east-1' => 's3.amazonaws.com',
48
- 'us-west-1' => 's3-us-west-1.amazonaws.com',
49
- 'us-west-2' => 's3-us-west-2.amazonaws.com'
50
- }
51
- end
52
-
53
- def sdb
54
- @sdb ||= AWS::SimpleDB.new :config => @config
55
- end
56
-
57
35
  end
58
36
  end
@@ -22,6 +22,10 @@ module Heirloom
22
22
  @s3.directories.get bucket
23
23
  end
24
24
 
25
+ def get_object(bucket_name, object_name)
26
+ @s3.get_object(bucket_name, object_name).body
27
+ end
28
+
25
29
  def get_bucket_acl(bucket)
26
30
  @s3.get_bucket_acl(bucket).body
27
31
  end
@@ -19,8 +19,8 @@ module Heirloom
19
19
  @sdb.create_domain(domain) unless domains.include? domain
20
20
  end
21
21
 
22
- def put_attributes(domain, key, args)
23
- @sdb.put_attributes domain, key, args
22
+ def put_attributes(domain, key, attributes, options = {})
23
+ @sdb.put_attributes domain, key, attributes, options
24
24
  end
25
25
 
26
26
  def select(query)
@@ -5,43 +5,73 @@ module Heirloom
5
5
  def self.start
6
6
  @opts = Trollop::options do
7
7
  banner <<-EOS
8
+
8
9
  I build and manage artifacts
9
10
 
10
11
  Usage:
11
12
 
12
- heirloom list
13
- heirloom versions -n NAME
14
- heirloom show -n NAME -i VERSION
15
- heirloom build -n NAME -i VERSION -d DIRECTORY [-p]
16
- heirloom destroy -n NAME -i VERSION
13
+ heirloom names
14
+ heirloom list -n NAME
15
+ heirloom show -n NAME -i ID
16
+ heirloom build -n NAME -i ID [-d DIRECTORY] [-p] [-g]
17
+ heirloom download -n NAME -i ID -r REGION -o OUTPUT_FILE
18
+ heirloom update -n NAME -i ID -a ATTRIBUTE -u UPDATE
19
+ heirloom destroy -n NAME -i ID
20
+
17
21
  EOS
18
22
  opt :help, "Display Help"
19
- opt :directory, "Source directory of artifact build.", :type => :string
23
+ opt :attribute, "Attribute to update.", :type => :string
24
+ opt :directory, "Source directory of build.", :type => :string,
25
+ :default => '.'
26
+ opt :exclude, "Comma spereate list of files or directories to exclude.", :type => :string,
27
+ :default => '.git'
28
+ opt :git, "Read git commit information from directory."
20
29
  opt :id, "Id of artifact.", :type => :string
21
30
  opt :name, "Name of artifact.", :type => :string
22
- opt :public, "Is this artifact public?"
31
+ opt :output, "Output download to file.", :type => :string
32
+ opt :public, "Set this artifact as public readable?"
33
+ opt :region, "Region to download artifact.", :type => :string,
34
+ :default => 'us-west-1'
35
+ opt :update, "Update value of attribute.", :type => :string
23
36
  end
24
37
 
25
38
  cmd = ARGV.shift
26
39
  a = Artifact.new :config => nil
27
40
 
28
41
  case cmd
42
+ when 'names'
43
+ puts a.names
29
44
  when 'list'
30
- puts a.list
31
- when 'versions', 'artifacts'
32
- puts a.versions :name => @opts[:name]
45
+ unless @opts[:name]
46
+ puts "Please specify an artifact name."
47
+ puts a.names
48
+ exit 1
49
+ end
50
+ puts a.list :name => @opts[:name]
33
51
  when 'show'
34
52
  puts a.show(:name => @opts[:name],
35
- :id => @opts[:id]).to_yaml
53
+ :id => @opts[:id]).to_yaml
36
54
  when 'build'
37
- a.build :name => @opts[:name],
38
- :id => @opts[:id],
39
- :accounts => @opts[:accounts],
55
+ a.build :name => @opts[:name],
56
+ :id => @opts[:id],
57
+ :accounts => @opts[:accounts],
40
58
  :directory => @opts[:directory],
41
- :public => @opts[:public]
59
+ :exclude => @opts[:exclude].split(','),
60
+ :public => @opts[:public],
61
+ :git => @opts[:git]
62
+ when 'update'
63
+ a.update :name => @opts[:name],
64
+ :id => @opts[:id],
65
+ :attribute => @opts[:attribute],
66
+ :update => @opts[:update]
67
+ when 'download'
68
+ a.download :name => @opts[:name],
69
+ :id => @opts[:id],
70
+ :output => @opts[:output],
71
+ :region => @opts[:region]
42
72
  when 'destroy', 'delete'
43
73
  a.destroy :name => @opts[:name],
44
- :id => @opts[:id]
74
+ :id => @opts[:id]
45
75
  else
46
76
  puts "Unkown command: '#{cmd}'."
47
77
  end
@@ -1 +1,2 @@
1
+ require 'heirloom/directory/directory'
1
2
  require 'heirloom/directory/git_directory'
@@ -0,0 +1,39 @@
1
+ require 'zlib'
2
+ require 'archive/tar/minitar'
3
+ require 'tmpdir'
4
+
5
+ include Archive::Tar
6
+
7
+ module Heirloom
8
+
9
+ class Directory
10
+
11
+ def initialize(args)
12
+ @directory = args[:directory]
13
+ @exclude = args[:exclude]
14
+ @logger = args[:logger]
15
+ end
16
+
17
+ def build_artifact_from_directory
18
+ random_text = (0...8).map{65.+(rand(25)).chr}.join
19
+ temp_file_name = File.join(Dir.tmpdir, random_text + ".tar.gz")
20
+
21
+ @logger.info "Building artifact '#{temp_file_name}' from '#{@directory}'."
22
+ @logger.info "Excluding #{@exclude.to_s}."
23
+ @logger.info "Adding #{files_to_pack.to_s}."
24
+
25
+ tgz = Zlib::GzipWriter.new File.open(temp_file_name, 'wb')
26
+
27
+ Minitar.pack(files_to_pack, tgz)
28
+ temp_file_name
29
+ end
30
+
31
+ private
32
+
33
+ def files_to_pack
34
+ Dir.entries(@directory) - ['.', '..'] - @exclude
35
+ end
36
+
37
+
38
+ end
39
+ end
@@ -1,9 +1,5 @@
1
- require 'zlib'
2
- require 'archive/tar/minitar'
3
- require 'tmpdir'
4
1
  require 'grit'
5
2
 
6
- include Archive::Tar
7
3
  include Grit
8
4
 
9
5
  module Heirloom
@@ -20,16 +16,5 @@ module Heirloom
20
16
  sha ? r.commits(sha).first : r.commits.first
21
17
  end
22
18
 
23
- def build_artifact_from_directory
24
- random_text = (0...8).map{65.+(rand(25)).chr}.join
25
- temp_file_name = File.join(Dir.tmpdir, random_text + ".tar.gz")
26
-
27
- @logger.info "Building artifact '#{temp_file_name}' from '#{@directory}'."
28
-
29
- tgz = Zlib::GzipWriter.new File.open(temp_file_name, 'wb')
30
- Minitar.pack(@directory, tgz)
31
- temp_file_name
32
- end
33
-
34
19
  end
35
20
  end
@@ -0,0 +1 @@
1
+ require 'heirloom/downloader/s3'
@@ -0,0 +1,21 @@
1
+ module Heirloom
2
+ module Downloader
3
+ class S3
4
+
5
+ def initialize(args)
6
+ @config = args[:config]
7
+ @region = args[:region]
8
+ @logger = args[:logger]
9
+ end
10
+
11
+ def download_file(args)
12
+ s3.get_object args[:bucket], args[:key]
13
+ end
14
+
15
+ def s3
16
+ @s3 ||= AWS::S3.new :config => @config,
17
+ :region => @region
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module Heirloom
2
+ class HeirloomLogger
3
+
4
+ def initialize(args)
5
+ @logger = args[:logger] ||= Logger.new(STDOUT)
6
+
7
+ @logger.datetime_format = "%Y-%m-%d %H:%M:%S"
8
+ @logger.formatter = proc do |severity, datetime, progname, msg|
9
+ "#{datetime}: #{msg}\n"
10
+ end
11
+
12
+ @logger
13
+ end
14
+
15
+ def info(msg)
16
+ @logger.info msg
17
+ end
18
+ end
19
+ end
@@ -5,29 +5,74 @@ module Heirloom
5
5
  def initialize(args)
6
6
  @config = args[:config]
7
7
  @region = args[:region]
8
+ @logger = args[:logger]
8
9
  end
9
10
 
10
11
  def upload_file(args)
12
+ bucket = args[:bucket]
11
13
  file = args[:file]
14
+ id = args[:id]
12
15
  key_name = args[:key_name]
13
16
  key_folder = args[:key_folder]
17
+ name = args[:name]
14
18
  public_readable = args[:public_readable]
15
- bucket = args[:bucket]
16
19
 
17
20
  s3_bucket = s3.get_bucket bucket
18
21
 
22
+ @logger.info "Uploading s3://#{bucket}/#{key_folder}/#{key_name}"
23
+
19
24
  s3_bucket.files.create :key => "#{key_folder}/#{key_name}",
20
25
  :body => File.open(file),
21
26
  :public => public_readable
27
+
28
+ @logger.info "File is readable by the public internet." if public_readable
29
+
30
+ add_endpoint_attributes :bucket => bucket,
31
+ :id => id,
32
+ :key_folder => key_folder,
33
+ :key_name => key_name,
34
+ :name => name
22
35
  end
23
36
 
24
37
  private
25
38
 
39
+ def add_endpoint_attributes(args)
40
+ bucket = args[:bucket]
41
+ id = args[:id]
42
+ key_name = args[:key_name]
43
+ key_folder = args[:key_folder]
44
+ name = args[:name]
45
+
46
+ s3_endpoint = "s3://#{bucket}/#{key_folder}/#{key_name}"
47
+ http_endpoint = "http://#{endpoints[@region]}/#{bucket}/#{key_folder}/#{key_name}"
48
+ https_endpoint = "https://#{endpoints[@region]}/#{bucket}/#{key_folder}/#{key_name}"
49
+
50
+ sdb.put_attributes name, id, { "#{@region}-s3-url" => s3_endpoint }
51
+ @logger.info "Adding attribute #{s3_endpoint}."
52
+
53
+ sdb.put_attributes name, id, { "#{@region}-http-url" => http_endpoint }
54
+ @logger.info "Adding attribute #{http_endpoint}."
55
+
56
+ sdb.put_attributes name, id, { "#{@region}-https-url" => https_endpoint }
57
+ @logger.info "Adding attribute #{https_endpoint}."
58
+ end
59
+
60
+ def endpoints
61
+ {
62
+ 'us-east-1' => 's3.amazonaws.com',
63
+ 'us-west-1' => 's3-us-west-1.amazonaws.com',
64
+ 'us-west-2' => 's3-us-west-2.amazonaws.com'
65
+ }
66
+ end
67
+
26
68
  def s3
27
69
  @s3 ||= AWS::S3.new :config => @config,
28
70
  :region => @region
29
71
  end
30
72
 
73
+ def sdb
74
+ @sdb ||= AWS::SimpleDB.new :config => @config
75
+ end
31
76
  end
32
77
  end
33
78
  end
@@ -1,3 +1,3 @@
1
1
  module Heirloom
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heirloom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-16 00:00:00.000000000 Z
12
+ date: 2012-06-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70154642035480 !ruby/object:Gem::Requirement
16
+ requirement: &70254605304040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70154642035480
24
+ version_requirements: *70254605304040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: fog
27
- requirement: &70154641926000 !ruby/object:Gem::Requirement
27
+ requirement: &70254605302600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70154641926000
35
+ version_requirements: *70254605302600
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: grit
38
- requirement: &70154641925560 !ruby/object:Gem::Requirement
38
+ requirement: &70254605300080 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70154641925560
46
+ version_requirements: *70254605300080
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: logger
49
- requirement: &70154641925040 !ruby/object:Gem::Requirement
49
+ requirement: &70254605298600 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70154641925040
57
+ version_requirements: *70254605298600
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: minitar
60
- requirement: &70154641924620 !ruby/object:Gem::Requirement
60
+ requirement: &70254605296660 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70154641924620
68
+ version_requirements: *70254605296660
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: trollop
71
- requirement: &70154641923840 !ruby/object:Gem::Requirement
71
+ requirement: &70254605294980 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70154641923840
79
+ version_requirements: *70254605294980
80
80
  description: I help build and manage artifacts
81
81
  email:
82
82
  - brett@weav.net
@@ -98,8 +98,10 @@ files:
98
98
  - lib/heirloom/artifact/artifact_authorizer.rb
99
99
  - lib/heirloom/artifact/artifact_builder.rb
100
100
  - lib/heirloom/artifact/artifact_destroyer.rb
101
+ - lib/heirloom/artifact/artifact_downloader.rb
101
102
  - lib/heirloom/artifact/artifact_lister.rb
102
103
  - lib/heirloom/artifact/artifact_reader.rb
104
+ - lib/heirloom/artifact/artifact_updater.rb
103
105
  - lib/heirloom/artifact/artifact_uploader.rb
104
106
  - lib/heirloom/aws.rb
105
107
  - lib/heirloom/aws/s3.rb
@@ -109,7 +111,11 @@ files:
109
111
  - lib/heirloom/destroyer.rb
110
112
  - lib/heirloom/destroyer/s3.rb
111
113
  - lib/heirloom/directory.rb
114
+ - lib/heirloom/directory/directory.rb
112
115
  - lib/heirloom/directory/git_directory.rb
116
+ - lib/heirloom/downloader.rb
117
+ - lib/heirloom/downloader/s3.rb
118
+ - lib/heirloom/logger.rb
113
119
  - lib/heirloom/uploader.rb
114
120
  - lib/heirloom/uploader/s3.rb
115
121
  - lib/heirloom/version.rb
@@ -130,7 +136,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
136
  version: '0'
131
137
  segments:
132
138
  - 0
133
- hash: -261224512882545988
139
+ hash: 4250445776269630544
134
140
  required_rubygems_version: !ruby/object:Gem::Requirement
135
141
  none: false
136
142
  requirements:
@@ -139,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
145
  version: '0'
140
146
  segments:
141
147
  - 0
142
- hash: -261224512882545988
148
+ hash: 4250445776269630544
143
149
  requirements: []
144
150
  rubyforge_project: heirloom
145
151
  rubygems_version: 1.8.16