deb-s3 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 83e22542e348437549fe9d78648659ce10f64dd4
4
+ data.tar.gz: 1e0ca1bb8dc6c822b122c4e3d71199fa9e71398c
5
+ SHA512:
6
+ metadata.gz: 448a9252b80774397270906a81b49bb6be58d87bc5d89056a0ea2b468d8fe3bf8132d997d47fbf017b3ca24a8dc79f9c78486214dc7e3e0cc9db249675bf723d
7
+ data.tar.gz: 35f0553c9830f502bae6c587af1006096d1fb168fae984d580da4408d1500cb6d2bbc75d7e29bd8f98e3e3e0f0aa2e34d32b241aab52cfa9e079b0f18ca90c4f
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # deb-s3
2
2
 
3
+ [![Build Status](https://travis-ci.org/krobertson/deb-s3.svg?branch=master)](https://travis-ci.org/krobertson/deb-s3)
4
+
3
5
  `deb-s3` is a simple utility to make creating and managing APT repositories on
4
6
  S3.
5
7
 
@@ -1,5 +1,5 @@
1
1
  module Deb
2
2
  module S3
3
- VERSION = "0.6.0"
3
+ VERSION = "0.6.1"
4
4
  end
5
5
  end
@@ -95,7 +95,7 @@ class Deb::S3::CLI < Thor
95
95
  end
96
96
 
97
97
  # make sure all the files exists
98
- if missing_file = files.detect { |f| !File.exists?(f) }
98
+ if missing_file = files.find { |pattern| Dir.glob(pattern).empty? }
99
99
  error("File '#{missing_file}' doesn't exist")
100
100
  end
101
101
 
@@ -1,5 +1,7 @@
1
1
  require "tempfile"
2
2
  require "zlib"
3
+ require 'deb/s3/utils'
4
+ require 'deb/s3/package'
3
5
 
4
6
  class Deb::S3::Manifest
5
7
  include Deb::S3::Utils
@@ -10,6 +12,8 @@ class Deb::S3::Manifest
10
12
 
11
13
  attr_accessor :files
12
14
 
15
+ attr_reader :packages
16
+
13
17
  def initialize
14
18
  @packages = []
15
19
  @component = nil
@@ -41,17 +45,13 @@ class Deb::S3::Manifest
41
45
  end
42
46
  end
43
47
 
44
- def packages
45
- @packages
46
- end
47
-
48
48
  def add(pkg, preserve_versions)
49
49
  if preserve_versions
50
- @packages.delete_if { |p| p.name == pkg.name && p.version == pkg.version }
50
+ packages.delete_if { |p| p.name == pkg.name && p.full_version == pkg.full_version }
51
51
  else
52
- @packages.delete_if { |p| p.name == pkg.name }
52
+ packages.delete_if { |p| p.name == pkg.name }
53
53
  end
54
- @packages << pkg
54
+ packages << pkg
55
55
  pkg
56
56
  end
57
57
 
@@ -82,7 +82,7 @@ class Deb::S3::Manifest
82
82
  @packages.each do |pkg|
83
83
  if pkg.needs_uploading?
84
84
  yield pkg.url_filename if block_given?
85
- s3_store(pkg.filename, pkg.url_filename_encoded)
85
+ s3_store(pkg.filename, pkg.url_filename, 'application/octet-stream; charset=binary')
86
86
  end
87
87
  end
88
88
 
@@ -92,7 +92,7 @@ class Deb::S3::Manifest
92
92
  pkgs_temp.close
93
93
  f = "dists/#{@codename}/#{@component}/binary-#{@architecture}/Packages"
94
94
  yield f if block_given?
95
- s3_store(pkgs_temp.path, f)
95
+ s3_store(pkgs_temp.path, f, 'text/plain; charset=us-ascii')
96
96
  @files["#{@component}/binary-#{@architecture}/Packages"] = hashfile(pkgs_temp.path)
97
97
  pkgs_temp.unlink
98
98
 
@@ -102,7 +102,7 @@ class Deb::S3::Manifest
102
102
  Zlib::GzipWriter.open(gztemp.path) { |gz| gz.write manifest }
103
103
  f = "dists/#{@codename}/#{@component}/binary-#{@architecture}/Packages.gz"
104
104
  yield f if block_given?
105
- s3_store(gztemp.path, f)
105
+ s3_store(gztemp.path, f, 'application/x-gzip; charset=binary')
106
106
  @files["#{@component}/binary-#{@architecture}/Packages.gz"] = hashfile(gztemp.path)
107
107
  gztemp.unlink
108
108
 
@@ -3,6 +3,7 @@ require "digest/sha2"
3
3
  require "digest/md5"
4
4
  require "socket"
5
5
  require "tmpdir"
6
+ require 'deb/s3/utils'
6
7
 
7
8
  class Deb::S3::Package
8
9
  include Deb::S3::Utils
@@ -57,11 +58,23 @@ class Deb::S3::Package
57
58
  end
58
59
 
59
60
  def extract_control(package)
60
- if system("which dpkg 2>&1 >/dev/null")
61
+ if system("which dpkg &> /dev/null")
61
62
  `dpkg -f #{package}`
62
63
  else
64
+ # ar fails to find the control.tar.gz tarball within the .deb
65
+ # on Mac OS. Try using ar to list the control file, if found,
66
+ # use ar to extract, otherwise attempt with tar which works on OS X.
67
+ extract_control_tarball_cmd = "ar p #{package} control.tar.gz"
68
+
69
+ begin
70
+ safesystem("ar t #{package} control.tar.gz &> /dev/null")
71
+ rescue SafeSystemError
72
+ warn "Failed to find control data in .deb with ar, trying tar."
73
+ extract_control_tarball_cmd = "tar zxf #{package} --to-stdout control.tar.gz"
74
+ end
75
+
63
76
  Dir.mktmpdir do |path|
64
- safesystem("ar p #{package} control.tar.gz | tar -zxf - -C #{path}")
77
+ safesystem("#{extract_control_tarball_cmd} | tar -zxf - -C #{path}")
65
78
  File.read(File.join(path, "control"))
66
79
  end
67
80
  end
@@ -111,6 +124,11 @@ class Deb::S3::Package
111
124
  @needs_uploading = false
112
125
  end
113
126
 
127
+ def full_version
128
+ return nil if [epoch, version, iteration].all?(&:nil?)
129
+ [[epoch, version].compact.join(":"), iteration].compact.join("-")
130
+ end
131
+
114
132
  def filename=(f)
115
133
  @filename = f
116
134
  @needs_uploading = true
@@ -86,7 +86,7 @@ class Deb::S3::Release
86
86
  release_tmp.puts self.generate
87
87
  release_tmp.close
88
88
  yield self.filename if block_given?
89
- s3_store(release_tmp.path, self.filename)
89
+ s3_store(release_tmp.path, self.filename, 'text/plain; charset=us-ascii')
90
90
 
91
91
  # sign the file, if necessary
92
92
  if Deb::S3::Utils.signing_key
@@ -96,7 +96,7 @@ class Deb::S3::Release
96
96
  remote_file = self.filename+".gpg"
97
97
  yield remote_file if block_given?
98
98
  raise "Unable to locate Release signature file" unless File.exists?(local_file)
99
- s3_store(local_file, remote_file)
99
+ s3_store(local_file, remote_file, 'application/pgp-signature; charset=us-ascii')
100
100
  File.unlink(local_file)
101
101
  else
102
102
  raise "Signing the Release file failed."
@@ -18,10 +18,12 @@ module Deb::S3::Utils
18
18
  def prefix; @prefix end
19
19
  def prefix= v; @prefix = v end
20
20
 
21
+ class SafeSystemError < RuntimeError; end
22
+
21
23
  def safesystem(*args)
22
24
  success = system(*args)
23
25
  if !success
24
- raise "'system(#{args.inspect})' failed with error code: #{$?.exitstatus}"
26
+ raise SafeSystemError, "'system(#{args.inspect})' failed with error code: #{$?.exitstatus}"
25
27
  end
26
28
  return success
27
29
  end
@@ -58,7 +60,7 @@ module Deb::S3::Utils
58
60
  Deb::S3::Utils.s3.buckets[Deb::S3::Utils.bucket].objects[s3_path(path)].read
59
61
  end
60
62
 
61
- def s3_store(path, filename=nil)
63
+ def s3_store(path, filename=nil, content_type='application/octet-stream; charset=binary')
62
64
  filename = File.basename(path) unless filename
63
65
  obj = Deb::S3::Utils.s3.buckets[Deb::S3::Utils.bucket].objects[s3_path(filename)]
64
66
 
@@ -69,7 +71,7 @@ module Deb::S3::Utils
69
71
  end
70
72
 
71
73
  # upload the file
72
- obj.write(Pathname.new(path), :acl => Deb::S3::Utils.access_policy)
74
+ obj.write(Pathname.new(path), :acl => Deb::S3::Utils.access_policy, :content_type => content_type)
73
75
  end
74
76
 
75
77
  def s3_remove(path)
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deb-s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
5
- prerelease:
4
+ version: 0.6.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ken Robertson
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-28 00:00:00.000000000 Z
11
+ date: 2014-04-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: thor
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: aws-sdk
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,11 +34,38 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
45
40
  version: '1.18'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
46
69
  description: Easily create and manage an APT repository on S3.
47
70
  email: ken@invalidlogic.com
48
71
  executables:
@@ -51,37 +74,36 @@ extensions: []
51
74
  extra_rdoc_files: []
52
75
  files:
53
76
  - bin/deb-s3
77
+ - README.md
78
+ - lib/deb/s3/release.rb
79
+ - lib/deb/s3/package.rb
80
+ - lib/deb/s3/utils.rb
54
81
  - lib/deb/s3/cli.rb
55
82
  - lib/deb/s3/manifest.rb
56
- - lib/deb/s3/package.rb
57
- - lib/deb/s3/release.rb
58
- - lib/deb/s3/templates/package.erb
59
83
  - lib/deb/s3/templates/release.erb
60
- - lib/deb/s3/utils.rb
84
+ - lib/deb/s3/templates/package.erb
61
85
  - lib/deb/s3.rb
62
- - README.md
63
86
  homepage: http://invalidlogic.com/
64
87
  licenses: []
88
+ metadata: {}
65
89
  post_install_message:
66
90
  rdoc_options: []
67
91
  require_paths:
68
92
  - lib
69
93
  required_ruby_version: !ruby/object:Gem::Requirement
70
- none: false
71
94
  requirements:
72
- - - ! '>='
95
+ - - '>='
73
96
  - !ruby/object:Gem::Version
74
97
  version: '0'
75
98
  required_rubygems_version: !ruby/object:Gem::Requirement
76
- none: false
77
99
  requirements:
78
- - - ! '>='
100
+ - - '>='
79
101
  - !ruby/object:Gem::Version
80
102
  version: '0'
81
103
  requirements: []
82
104
  rubyforge_project:
83
- rubygems_version: 1.8.23
105
+ rubygems_version: 2.0.14
84
106
  signing_key:
85
- specification_version: 3
107
+ specification_version: 4
86
108
  summary: Easily create and manage an APT repository on S3.
87
109
  test_files: []