frm 0.0.3 → 0.0.4
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.
- data/.gitignore +3 -0
- data/Rakefile +5 -2
- data/bin/frm +5 -2
- data/frm.gemspec +5 -0
- data/lib/frm/base.rb +81 -0
- data/lib/frm/deb.rb +1 -123
- data/lib/frm/s3.rb +1 -1
- data/lib/frm/version.rb +1 -1
- data/lib/frm.rb +3 -3
- data/test/Packages.txt +155 -0
- data/test/{deb_test2.rb → deb.rb} +4 -9
- data/test/deb_test.rb +53 -172
- data/test/debs/frm_bar-1.0.0.deb +0 -0
- data/test/debs/frm_foo-1.0.0.deb +0 -0
- data/test/lib/test.rb +13 -0
- data/test/rake.rb +27 -0
- data/test/s3.rb +2 -4
- metadata +38 -9
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
|
-
frm_base = File.dirname __FILE__
|
4
|
+
@frm_base = File.dirname __FILE__
|
5
|
+
|
6
|
+
require File.join @frm_base, 'test', 'rake'
|
7
|
+
|
5
8
|
|
6
9
|
namespace :bump do
|
7
10
|
|
8
11
|
desc "bump the patch version number"
|
9
12
|
task :patch do
|
10
|
-
version_file_path = File.join frm_base, 'lib', 'frm', 'version.rb'
|
13
|
+
version_file_path = File.join @frm_base, 'lib', 'frm', 'version.rb'
|
11
14
|
current_version_file = File.read version_file_path
|
12
15
|
current_version_file =~ /VERSION[^\d]+(\d+)\.(\d+)\.(\d+)(\.([^'"]*))?/
|
13
16
|
major,minor,patch = $1, $2, $3
|
data/bin/frm
CHANGED
@@ -19,7 +19,10 @@ def print_and_exit(message)
|
|
19
19
|
end
|
20
20
|
|
21
21
|
optparse = OptionParser.new do|opts|
|
22
|
-
opts.banner = "
|
22
|
+
opts.banner = "Welcome to Effin Repo Manager
|
23
|
+
FRM allows you to easily create debian repos on S3
|
24
|
+
|
25
|
+
Usage: frm [options] package1 [package2] ..."
|
23
26
|
|
24
27
|
options[:access_key] = nil
|
25
28
|
opts.on( '-a', '--access-key ACCESS_KEY', 'S3 public access key' ) do |key|
|
@@ -80,7 +83,7 @@ end
|
|
80
83
|
Dir.chdir(File.dirname(File.dirname(__FILE__)))
|
81
84
|
|
82
85
|
# require the necessary FRM libs
|
83
|
-
require File.join Dir.pwd, 'lib', '
|
86
|
+
require File.join Dir.pwd, 'lib', 'frm'
|
84
87
|
|
85
88
|
puts "creating release..."
|
86
89
|
package_release = FRM::PackageRelease.new(packages)
|
data/frm.gemspec
CHANGED
@@ -19,4 +19,9 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["bin"]
|
21
21
|
s.require_paths = ["lib"]
|
22
|
+
|
23
|
+
s.add_dependency('aws-s3')
|
24
|
+
|
25
|
+
s.add_development_dependency('mock-aws-s3')
|
22
26
|
end
|
27
|
+
|
data/lib/frm/base.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
module FRM
|
2
|
+
class Base
|
3
|
+
# my_dir = File.dirname __FILE__
|
4
|
+
# require File.join my_dir, 's3'
|
5
|
+
require 'zlib'
|
6
|
+
require 'tempfile'
|
7
|
+
require 'digest/md5'
|
8
|
+
require 'digest/sha1'
|
9
|
+
require 'digest/sha2'
|
10
|
+
|
11
|
+
def compute_md5(string)
|
12
|
+
Digest::MD5.hexdigest(string)
|
13
|
+
end
|
14
|
+
|
15
|
+
def compute_sha1(string)
|
16
|
+
Digest::SHA1.hexdigest(string)
|
17
|
+
end
|
18
|
+
|
19
|
+
def compute_sha2(string)
|
20
|
+
Digest::SHA2.hexdigest(string)
|
21
|
+
end
|
22
|
+
|
23
|
+
# TODO:
|
24
|
+
# there has to be a better way to use gpg withen ruby. found many
|
25
|
+
# broken solutions :\
|
26
|
+
def gpg_clearsign(message)
|
27
|
+
`echo "#{message}" | gpg --clearsign`
|
28
|
+
end
|
29
|
+
|
30
|
+
# TODO: same as above
|
31
|
+
def gpg_detached(message)
|
32
|
+
`echo "#{message}" | gpg -abs`
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def generate_gzip_pipe(contents)
|
37
|
+
read_buffer, write_buffer = IO.pipe
|
38
|
+
gzip_writer = Zlib::GzipWriter.new write_buffer
|
39
|
+
gzip_writer.mtime = 1 # ensure that the header is determinstic
|
40
|
+
gzip_writer.write contents
|
41
|
+
gzip_writer.close
|
42
|
+
read_buffer
|
43
|
+
end
|
44
|
+
|
45
|
+
def gunzip_pipe(gziped_pipe)
|
46
|
+
gzip_reader = Zlib::GzipReader.new gziped_pipe
|
47
|
+
unzipped_string = gzip_reader.read
|
48
|
+
gzip_reader.close
|
49
|
+
return unzipped_string
|
50
|
+
end
|
51
|
+
|
52
|
+
def parse_package_stub(read_buffer)
|
53
|
+
package = {}
|
54
|
+
stub = ""
|
55
|
+
while line = read_buffer.gets
|
56
|
+
return nil if line.strip.empty?
|
57
|
+
raise "bad input" unless (match = line.match /^\w+\-?\w+?: /)
|
58
|
+
stub << line
|
59
|
+
key = match[0].delete ': ' # if match
|
60
|
+
value = match.post_match.strip
|
61
|
+
package[key] = value
|
62
|
+
if key == 'Description'
|
63
|
+
while (line = read_buffer.gets).strip != ""
|
64
|
+
package['Description'] << line
|
65
|
+
stub << line
|
66
|
+
end
|
67
|
+
package['Description'].rstrip!
|
68
|
+
return package, stub
|
69
|
+
end
|
70
|
+
end
|
71
|
+
nil
|
72
|
+
end
|
73
|
+
|
74
|
+
def merge_package_file(in_pipe,out_pipe,package_list)
|
75
|
+
sorted_list = package_list.sort { |a,b| a['Package'] <=> b['Package'] }
|
76
|
+
# while (next_stub = parse_package_stub in_pipe)
|
77
|
+
# STDERR.puts "next_stub[0] = #{next_stub[0]}"
|
78
|
+
# end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/lib/frm/deb.rb
CHANGED
@@ -2,93 +2,12 @@ DEFAULT_HOST = 's3-us-west-1.amazonaws.com' # stupid hack to point to
|
|
2
2
|
# the right region
|
3
3
|
|
4
4
|
module FRM
|
5
|
-
|
6
|
-
|
7
|
-
class Base
|
8
|
-
my_dir = File.dirname __FILE__
|
9
|
-
require File.join my_dir, 's3'
|
10
|
-
require 'zlib'
|
11
|
-
require 'tempfile'
|
12
|
-
require 'digest/md5'
|
13
|
-
require 'digest/sha1'
|
14
|
-
require 'digest/sha2'
|
15
|
-
|
16
|
-
def compute_md5(string)
|
17
|
-
Digest::MD5.hexdigest(string)
|
18
|
-
end
|
19
|
-
|
20
|
-
def compute_sha1(string)
|
21
|
-
Digest::SHA1.hexdigest(string)
|
22
|
-
end
|
23
|
-
|
24
|
-
def compute_sha2(string)
|
25
|
-
Digest::SHA2.hexdigest(string)
|
26
|
-
end
|
27
|
-
|
28
|
-
# TODO:
|
29
|
-
# there has to be a better way to use gpg withen ruby. found many
|
30
|
-
# broken solutions :\
|
31
|
-
def gpg_clearsign(message)
|
32
|
-
`echo "#{message}" | gpg --clearsign`
|
33
|
-
end
|
34
|
-
|
35
|
-
# TODO: same as above
|
36
|
-
def gpg_detached(message)
|
37
|
-
`echo "#{message}" | gpg -abs`
|
38
|
-
end
|
39
|
-
|
40
|
-
|
41
|
-
def generate_gzip_pipe(contents)
|
42
|
-
read_buffer, write_buffer = IO.pipe
|
43
|
-
gzip_writer = Zlib::GzipWriter.new write_buffer
|
44
|
-
gzip_writer.mtime = 1 # ensure that the header is determinstic
|
45
|
-
gzip_writer.write contents
|
46
|
-
gzip_writer.close
|
47
|
-
read_buffer
|
48
|
-
end
|
49
|
-
|
50
|
-
def gunzip_pipe(gziped_pipe)
|
51
|
-
gzip_reader = Zlib::GzipReader.new gziped_pipe
|
52
|
-
unzipped_string = gzip_reader.read
|
53
|
-
gzip_reader.close
|
54
|
-
return unzipped_string
|
55
|
-
end
|
56
|
-
|
57
|
-
def parse_package_stub(read_buffer)
|
58
|
-
package = {}
|
59
|
-
stub = ""
|
60
|
-
while line = read_buffer.gets
|
61
|
-
return nil if line.strip.empty?
|
62
|
-
raise "bad input" unless (match = line.match /^\w+\-?\w+?: /)
|
63
|
-
stub << line
|
64
|
-
key = match[0].delete ': ' # if match
|
65
|
-
value = match.post_match.strip
|
66
|
-
package[key] = value
|
67
|
-
if key == 'Description'
|
68
|
-
while (line = read_buffer.gets).strip != ""
|
69
|
-
package['Description'] << line
|
70
|
-
stub << line
|
71
|
-
end
|
72
|
-
package['Description'].rstrip!
|
73
|
-
return package, stub
|
74
|
-
end
|
75
|
-
end
|
76
|
-
nil
|
77
|
-
end
|
78
|
-
|
79
|
-
def merge_package_file(in_pipe,out_pipe,package_list)
|
80
|
-
sorted_list = package_list.sort { |a,b| a['Package'] <=> b['Package'] }
|
81
|
-
while (next_stub = parse_package_stub in_pipe)
|
82
|
-
STDERR.puts "next_stub[0] = #{next_stub[0]}"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
5
|
|
88
6
|
class Package < Base
|
89
7
|
attr_accessor :repo_filename
|
90
8
|
attr_reader :path, :content, :md5, :sha1, :sha2 , :size
|
91
9
|
def initialize(path)
|
10
|
+
raise "you need to specify a path!!!" if path.nil?
|
92
11
|
@path = path
|
93
12
|
raise "Can not find file '#{path}'" unless File.exists?(path)
|
94
13
|
begin
|
@@ -267,47 +186,6 @@ Description: Cloudscaling APT repository
|
|
267
186
|
end
|
268
187
|
|
269
188
|
|
270
|
-
def generate_release
|
271
|
-
return "Origin: apt.cloudscaling.com
|
272
|
-
Label: apt repository natty
|
273
|
-
Codename: natty
|
274
|
-
Date: Thu, 22 Dec 2011 00:29:55 UTC
|
275
|
-
Architectures: amd64
|
276
|
-
Components: main universe multiverse
|
277
|
-
Description: Cloudscaling APT repository
|
278
|
-
MD5Sum:
|
279
|
-
a4b943ff89790ccdc186875dad67827b 5813 main/binary-amd64/Packages
|
280
|
-
004fd3f868ebbe7501fb2e1c0c54e2a7 2148 main/binary-amd64/Packages.gz
|
281
|
-
79dd2fee35fba7255dcd40e1f6529591 134 main/binary-amd64/Release
|
282
|
-
d41d8cd98f00b204e9800998ecf8427e 0 universe/binary-amd64/Packages
|
283
|
-
7029066c27ac6f5ef18d660d5741979a 20 universe/binary-amd64/Packages.gz
|
284
|
-
018c8e37146b908a6bde46012a83d4ba 138 universe/binary-amd64/Release
|
285
|
-
d41d8cd98f00b204e9800998ecf8427e 0 multiverse/binary-amd64/Packages
|
286
|
-
7029066c27ac6f5ef18d660d5741979a 20 multiverse/binary-amd64/Packages.gz
|
287
|
-
4680f88c741bad22529909db5be4f608 140 multiverse/binary-amd64/Release
|
288
|
-
SHA1:
|
289
|
-
6e03924030eab56cb9735a52ec710537e682bcfc 5813 main/binary-amd64/Packages
|
290
|
-
5f2989bae96e148cb5f18accc4357305926ab1e1 2148 main/binary-amd64/Packages.gz
|
291
|
-
6d932af9af761f418e5374f73dcd09badb4fe57e 134 main/binary-amd64/Release
|
292
|
-
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 universe/binary-amd64/Packages
|
293
|
-
46c6643f07aa7f6bfe7118de926b86defc5087c4 20 universe/binary-amd64/Packages.gz
|
294
|
-
4d428e7ad434df47cffc40cabf8e238ee76ea434 138 universe/binary-amd64/Release
|
295
|
-
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 multiverse/binary-amd64/Packages
|
296
|
-
46c6643f07aa7f6bfe7118de926b86defc5087c4 20 multiverse/binary-amd64/Packages.gz
|
297
|
-
c8a7d2eb24ece57d460106506fcff99cb2ada015 140 multiverse/binary-amd64/Release
|
298
|
-
SHA256:
|
299
|
-
dd8283f06beb4a5fc06ac62d3ae098e5ba2717daef2a15b5f3e9233eb64e0227 5813 main/binary-amd64/Packages
|
300
|
-
b197c5a3c1fe6a6d286e9f066a0cade289e3a2fc485c90407179951634788aa8 2148 main/binary-amd64/Packages.gz
|
301
|
-
690b44df6fe65f40f260b73394e87804df78c9ccf13999889259faeed3eec40d 134 main/binary-amd64/Release
|
302
|
-
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 universe/binary-amd64/Packages
|
303
|
-
59869db34853933b239f1e2219cf7d431da006aa919635478511fabbfc8849d2 20 universe/binary-amd64/Packages.gz
|
304
|
-
32f35b1fc2bdc5a11b53abeadaaa77771b15acb5305777484bf4390d697ae5bd 138 universe/binary-amd64/Release
|
305
|
-
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 multiverse/binary-amd64/Packages
|
306
|
-
59869db34853933b239f1e2219cf7d431da006aa919635478511fabbfc8849d2 20 multiverse/binary-amd64/Packages.gz
|
307
|
-
f29816e3a4f90a8b4c688fdb2ac3056d5fb7349857c9ea8da2fbccf8e931baca 140 multiverse/binary-amd64/Release"
|
308
|
-
end
|
309
|
-
|
310
|
-
|
311
189
|
def generate_package_line(key='',value='')
|
312
190
|
valid_options = %w{Package Version Architecture Maintainer Standards-Version Homepage Priority Depends Filename Size SHA256 SHA1 MD5sum Description}
|
313
191
|
raise "Bogus option passed: #{key}" unless valid_options.include?(key)
|
data/lib/frm/s3.rb
CHANGED
data/lib/frm/version.rb
CHANGED
data/lib/frm.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require File.join @frm_base, 'lib', 'frm', 'base'
|
2
|
+
require File.join @frm_base, 'lib', 'frm', 's3'
|
3
|
+
require File.join @frm_base, 'lib', 'frm', 'deb'
|
data/test/Packages.txt
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
Package: kyotocabinet
|
2
|
+
Version: 1.2.68
|
3
|
+
Architecture: amd64
|
4
|
+
Maintainer: <jenkins@ci>
|
5
|
+
Standards-Version: 3.9.1
|
6
|
+
Homepage: http://nourlgiven.example.com/no/url/given
|
7
|
+
Priority: extra
|
8
|
+
Section: default
|
9
|
+
Filename: pool/main/k/kyotocabinet/kyotocabinet_1.2.68_amd64.deb
|
10
|
+
Size: 3718964
|
11
|
+
SHA256: 0646abf6c54a00afd213272386fb58ca777357bee99a53464b6f9a6e79344fde
|
12
|
+
SHA1: 6d2fb30095bb6ca876ca2ffc22523911aede9dfa
|
13
|
+
MD5sum: f1fc7e4c0bc8e3874d37c8df668c6fb3
|
14
|
+
Description: no description given
|
15
|
+
|
16
|
+
Package: pod-services
|
17
|
+
Version: 0.0.4
|
18
|
+
Architecture: amd64
|
19
|
+
Maintainer: <jenkins@ci>
|
20
|
+
Depends: zeromq, kyotocabinet, ruby1.9.2-full, libavahi-compat-libdnssd1, rubygem-bundler
|
21
|
+
Standards-Version: 3.9.1
|
22
|
+
Homepage: http://nourlgiven.example.com/no/url/given
|
23
|
+
Priority: extra
|
24
|
+
Section: default
|
25
|
+
Filename: pool/main/p/pod-services/pod-services_0.0.4_amd64.deb
|
26
|
+
Size: 59230358
|
27
|
+
SHA256: 6c5e8044d13dfb1c337767474a8094416c0913650aff71a2fe4aaec4d0f8ee9d
|
28
|
+
SHA1: 467fcc65ed729c845bad981743b5774e359a40df
|
29
|
+
MD5sum: 4b6ed193ca6d4d8002e39413b8966cca
|
30
|
+
Description: no description given
|
31
|
+
|
32
|
+
Package: python-kyotocabinet
|
33
|
+
Version: 1.1
|
34
|
+
Architecture: amd64
|
35
|
+
Maintainer: <jenkins@ci>
|
36
|
+
Depends: kyotocabinet
|
37
|
+
Standards-Version: 3.9.1
|
38
|
+
Homepage: http://fallabs.com/kyotocabinet/
|
39
|
+
Priority: extra
|
40
|
+
Section: default
|
41
|
+
Filename: pool/main/p/python-kyotocabinet/python-kyotocabinet_1.1_amd64.deb
|
42
|
+
Size: 1309704
|
43
|
+
SHA256: f71dcafe4074bbbe68105d9dcd4700313f2543147a88e10392761736719b83a1
|
44
|
+
SHA1: b0772977ec9c1d4b8313b76f20188b24646ea8fb
|
45
|
+
MD5sum: cf02d0adc90e110893165834a0993c0d
|
46
|
+
Description: a straightforward implementation of DBM
|
47
|
+
|
48
|
+
Package: python-netifaces
|
49
|
+
Version: 0.5
|
50
|
+
Architecture: amd64
|
51
|
+
Maintainer: <jenkins@ci>
|
52
|
+
Standards-Version: 3.9.1
|
53
|
+
Homepage: http://alastairs-place.net/netifaces
|
54
|
+
Priority: extra
|
55
|
+
Section: default
|
56
|
+
Filename: pool/main/p/python-netifaces/python-netifaces_0.5_amd64.deb
|
57
|
+
Size: 14126
|
58
|
+
SHA256: 433969c5ff6e56a5c5ca9925c01ecc1df591080e95544d4f0ee61fa9d263abf4
|
59
|
+
SHA1: 512bc3b46bbc8d7b45fda8ff496c6cee6208bf03
|
60
|
+
MD5sum: 66e6739aadb3c6e3def550b36ac10eeb
|
61
|
+
Description: Portable network interface information.
|
62
|
+
|
63
|
+
Package: python-pybonjour
|
64
|
+
Version: 1.1.1
|
65
|
+
Architecture: all
|
66
|
+
Maintainer: <jenkins@ci>
|
67
|
+
Depends: libavahi-compat-libdnssd1
|
68
|
+
Standards-Version: 3.9.1
|
69
|
+
Homepage: http://o2s.csail.mit.edu/o2s-wiki/pybonjour
|
70
|
+
Priority: extra
|
71
|
+
Section: default
|
72
|
+
Filename: pool/main/p/python-pybonjour/python-pybonjour_1.1.1_all.deb
|
73
|
+
Size: 30490
|
74
|
+
SHA256: 7e23aeb59599f60da61acd3275038d5603515e00b215a2dd94a222c648c2bc8a
|
75
|
+
SHA1: ae97584f4471165306fea16d9cd0628f1b7f797f
|
76
|
+
MD5sum: efa7004bbffc372abeb99070997e295b
|
77
|
+
Description: Pure-Python interface to Apple Bonjour and compatible DNS-SD libraries
|
78
|
+
|
79
|
+
Package: python-pyzmq
|
80
|
+
Version: 2.1.7.1
|
81
|
+
Architecture: amd64
|
82
|
+
Maintainer: <jenkins@ci>
|
83
|
+
Depends: zeromq
|
84
|
+
Standards-Version: 3.9.1
|
85
|
+
Homepage: http://github.com/zeromq/pyzmq
|
86
|
+
Priority: extra
|
87
|
+
Section: default
|
88
|
+
Filename: pool/main/p/python-pyzmq/python-pyzmq_2.1.7.1_amd64.deb
|
89
|
+
Size: 1198458
|
90
|
+
SHA256: 039fac7f7dbf0c5c8da6179a13756a216cf8c7d192c8c451631a005a10e6085d
|
91
|
+
SHA1: 6f34087234c6c64d5563249bcbe0ae789807cf50
|
92
|
+
MD5sum: bd0364643376bce244b87f6cc4824896
|
93
|
+
Description: Python bindings for 0MQ.
|
94
|
+
|
95
|
+
Package: python-thlayli
|
96
|
+
Version: 0.3
|
97
|
+
Architecture: all
|
98
|
+
Maintainer: <jenkins@ci>
|
99
|
+
Depends: python-netifaces (>= 0), python-kyotocabinet (>= 0), python-pybonjour (>= 0), python-pyzmq (>= 0)
|
100
|
+
Standards-Version: 3.9.1
|
101
|
+
Homepage: http://clouldscaling.com/
|
102
|
+
Priority: extra
|
103
|
+
Section: default
|
104
|
+
Filename: pool/main/p/python-thlayli/python-thlayli_0.3_all.deb
|
105
|
+
Size: 13426
|
106
|
+
SHA256: f860439b4db71b5bd85d103b4460dce8464c468d00a8632e3ae1a0a32cc35c57
|
107
|
+
SHA1: a457cfbc4737acbe1def6c49c0ca56ff5d425479
|
108
|
+
MD5sum: 3dd096d608ad55b04754bc1ad4ac3457
|
109
|
+
Description: Thlayli is a simple tuplespace for coordinating distributed work.
|
110
|
+
|
111
|
+
Package: ruby1.9.2-full
|
112
|
+
Version: 1.9.2
|
113
|
+
Architecture: amd64
|
114
|
+
Maintainer: <jenkins@ci>
|
115
|
+
Standards-Version: 3.9.1
|
116
|
+
Homepage: http://nourlgiven.example.com/no/url/given
|
117
|
+
Priority: extra
|
118
|
+
Section: default
|
119
|
+
Filename: pool/main/r/ruby1.9.2-full/ruby1.9.2-full_1.9.2_amd64.deb
|
120
|
+
Size: 10923378
|
121
|
+
SHA256: 1640650ad27b765681d9148f0e23f40b5d86ba6e60370f63bf6402fb0fec4f6f
|
122
|
+
SHA1: d9748b34ca4d2a284bac86ec3040f685adc4964c
|
123
|
+
MD5sum: 2baa87f011d61b8a884ded2a0ccf43d8
|
124
|
+
Description: no description given
|
125
|
+
|
126
|
+
Package: rubygem-bundler
|
127
|
+
Version: 1.0.18
|
128
|
+
Architecture: all
|
129
|
+
Maintainer: André Arko
|
130
|
+
Standards-Version: 3.9.1
|
131
|
+
Homepage: http://gembundler.com
|
132
|
+
Priority: extra
|
133
|
+
Section: Languages/Development/Ruby
|
134
|
+
Filename: pool/main/r/rubygem-bundler/rubygem-bundler_1.0.18_all.deb
|
135
|
+
Size: 341144
|
136
|
+
SHA256: b2e51a45a90707261ed36648847409783542fc092bc18a11a63a1db0b76ca4b3
|
137
|
+
SHA1: ca3d01e1e0e3608b785562bc5d31d413e74e0d77
|
138
|
+
MD5sum: 13d7db51446b5bbed40f8db407597733
|
139
|
+
Description: Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably
|
140
|
+
|
141
|
+
Package: zeromq
|
142
|
+
Version: 2.1.7
|
143
|
+
Architecture: amd64
|
144
|
+
Maintainer: <jenkins@ci>
|
145
|
+
Standards-Version: 3.9.1
|
146
|
+
Homepage: http://nourlgiven.example.com/no/url/given
|
147
|
+
Priority: extra
|
148
|
+
Section: default
|
149
|
+
Filename: pool/main/z/zeromq/zeromq_2.1.7_amd64.deb
|
150
|
+
Size: 1899468
|
151
|
+
SHA256: e41fcb46155591beb120a95f11a574e39e7a4e60e61f373ba1843d5fea63f280
|
152
|
+
SHA1: d25801f69462a1b9d1a91c396de98d9a7b4c2e95
|
153
|
+
MD5sum: 48b46e195bd4ea7d6140e1ca1520a199
|
154
|
+
Description: no description given
|
155
|
+
|
@@ -1,9 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'minitest/autorun'
|
4
|
-
|
5
|
-
my_dir = File.dirname __FILE__
|
6
|
-
require File.join my_dir, 'deb'
|
4
|
+
require 'mock-aws-s3'
|
7
5
|
|
8
6
|
class TestReleasePusher < MiniTest::Unit::TestCase
|
9
7
|
def setup
|
@@ -11,12 +9,9 @@ class TestReleasePusher < MiniTest::Unit::TestCase
|
|
11
9
|
@tempfile2 = File.open('/tmp/bar_1.2.3.4_amd64.deb','w+') { |f| f.write 'bar' }
|
12
10
|
@tempfile3 = File.open('/tmp/martin_1.2.3.4_amd64.deb','w+') { |f| f.write 'martin' }
|
13
11
|
|
14
|
-
hashes =
|
15
|
-
|
16
|
-
|
17
|
-
/home/martin/sheep/modules/substratum/debs/ruby1.9.2-1-amd64.deb
|
18
|
-
}
|
19
|
-
|
12
|
+
hashes = []
|
13
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_foo-1.0.0.deb')
|
14
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_bar-1.0.0.deb')
|
20
15
|
|
21
16
|
@package_release = FRM::PackageRelease.new(hashes)
|
22
17
|
@release_pusher = FRM::ReleasePusher.new(@package_release,'1234','abcd',\
|
data/test/deb_test.rb
CHANGED
@@ -11,52 +11,9 @@ class TestReleasePusher < MiniTest::Unit::TestCase
|
|
11
11
|
@tempfile2 = File.open('/tmp/bar_1.2.3.4_amd64.deb','w+') { |f| f.write 'bar' }
|
12
12
|
@tempfile3 = File.open('/tmp/martin_1.2.3.4_amd64.deb','w+') { |f| f.write 'martin' }
|
13
13
|
|
14
|
-
hashes = [
|
15
|
-
|
16
|
-
|
17
|
-
"Architecture" => "amd64",
|
18
|
-
"Maintainer" => "support@cloudscaling.com",
|
19
|
-
"Homepage" => "http://www.cloudscaling.com",
|
20
|
-
"Priority" => "extra",
|
21
|
-
"Depends" => %w{one two three},
|
22
|
-
"section" => "main",
|
23
|
-
"path_to_deb" => '/tmp/foo_1.2.68_amd64.deb',
|
24
|
-
"Description" => 'some
|
25
|
-
multiline
|
26
|
-
description'
|
27
|
-
},
|
28
|
-
{
|
29
|
-
"Package" => "bar",
|
30
|
-
"Version" => "1.2.3.4",
|
31
|
-
"Architecture" => "amd64",
|
32
|
-
"Maintainer" => "support@cloudscaling.com",
|
33
|
-
"Homepage" => "http://www.cloudscaling.com",
|
34
|
-
"Priority" => "extra",
|
35
|
-
"Depends" => %w{one two three},
|
36
|
-
"section" => "main",
|
37
|
-
"path_to_deb" => '/tmp/bar_1.2.3.4_amd64.deb'
|
38
|
-
},
|
39
|
-
{
|
40
|
-
"Package" => "martin",
|
41
|
-
"Version" => "1.2.3.4",
|
42
|
-
"Architecture" => "amd64",
|
43
|
-
"Maintainer" => "support@cloudscaling.com",
|
44
|
-
"Homepage" => "http://www.cloudscaling.com",
|
45
|
-
"Priority" => "extra",
|
46
|
-
"section" => "main",
|
47
|
-
"path_to_deb" => '/tmp/martin_1.2.3.4_amd64.deb'
|
48
|
-
},
|
49
|
-
{
|
50
|
-
"Package" => "cs-chef",
|
51
|
-
"Version" => "1.2.3.4",
|
52
|
-
"Architecture" => "amd64",
|
53
|
-
"Maintainer" => "support@cloudscaling.com",
|
54
|
-
"Homepage" => "http://www.cloudscaling.com",
|
55
|
-
"Priority" => "extra",
|
56
|
-
"section" => "main",
|
57
|
-
"path_to_deb" => '/tmp/debs/cs-chef-0.9.1-1782-all.deb'
|
58
|
-
}
|
59
|
-
]
|
14
|
+
hashes = []
|
15
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_foo-1.0.0.deb')
|
16
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_bar-1.0.0.deb')
|
60
17
|
|
61
18
|
@package_release = FRM::PackageRelease.new(hashes)
|
62
19
|
@release_pusher = FRM::ReleasePusher.new(@package_release,'abcd','1234',\
|
@@ -64,7 +21,7 @@ class TestReleasePusher < MiniTest::Unit::TestCase
|
|
64
21
|
end
|
65
22
|
|
66
23
|
def test
|
67
|
-
puts "@release_pusher.inspect = #{@release_pusher.inspect}"
|
24
|
+
# puts "@release_pusher.inspect = #{@release_pusher.inspect}"
|
68
25
|
end
|
69
26
|
|
70
27
|
end
|
@@ -74,68 +31,49 @@ end
|
|
74
31
|
@tempfile1 = File.open('/tmp/foo_1.2.68_amd64.deb','w+') { |f| f.write 'foo' }
|
75
32
|
@tempfile2 = File.open('/tmp/bar_1.2.3.4_amd64.deb','w+') { |f| f.write 'bar' }
|
76
33
|
|
77
|
-
hashes = [
|
78
|
-
|
79
|
-
|
80
|
-
"Architecture" => "amd64",
|
81
|
-
"Maintainer" => "support@cloudscaling.com",
|
82
|
-
"Homepage" => "http://www.cloudscaling.com",
|
83
|
-
"Priority" => "extra",
|
84
|
-
"Depends" => %w{one two three},
|
85
|
-
"section" => "main",
|
86
|
-
"path_to_deb" => '/tmp/foo_1.2.68_amd64.deb',
|
87
|
-
"Description" => 'some
|
88
|
-
multiline
|
89
|
-
description'
|
90
|
-
},
|
91
|
-
{
|
92
|
-
"Package" => "bar",
|
93
|
-
"Version" => "1.2.3.4",
|
94
|
-
"Architecture" => "amd64",
|
95
|
-
"Maintainer" => "support@cloudscaling.com",
|
96
|
-
"Homepage" => "http://www.cloudscaling.com",
|
97
|
-
"Priority" => "extra",
|
98
|
-
"Depends" => %w{one two three},
|
99
|
-
"section" => "main",
|
100
|
-
"path_to_deb" => '/tmp/bar_1.2.3.4_amd64.deb'
|
101
|
-
}
|
102
|
-
]
|
34
|
+
hashes = []
|
35
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_foo-1.0.0.deb')
|
36
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_bar-1.0.0.deb')
|
103
37
|
|
104
38
|
@package_release = FRM::PackageRelease.new(hashes)
|
105
39
|
end
|
106
40
|
|
107
41
|
def test()
|
108
|
-
correct_output = "Package: foo
|
109
|
-
Version: 1.
|
42
|
+
correct_output = "Package: frm-foo
|
43
|
+
Version: 1.0
|
44
|
+
License: unknown
|
45
|
+
Vendor: martin@host-c1e5ea34
|
110
46
|
Architecture: amd64
|
111
|
-
Maintainer: <
|
112
|
-
|
113
|
-
|
47
|
+
Maintainer: <martin@host-c1e5ea34>
|
48
|
+
Installed-Size: 0
|
49
|
+
#Pre-Depends:
|
50
|
+
Section: default
|
114
51
|
Priority: extra
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
52
|
+
Homepage: http://example.com/no-uri-given
|
53
|
+
Description: no description given
|
54
|
+
Filename: pool/main/f/frm-foo/frm_foo-1.0.0.deb
|
55
|
+
Size: 716
|
56
|
+
MD5sum: 0faf8cabf49a615adacbe6d80c4aee3b
|
57
|
+
SHA1: 78c6be70488c78d63b6eb233f891e80d3af0b779
|
58
|
+
SHA256: 5f0de3c65226c13e9c215478ba784afe54b0592aa46766ff19b1140644bbda71
|
59
|
+
|
60
|
+
Package: frm-bar
|
61
|
+
Version: 1.0
|
62
|
+
License: unknown
|
63
|
+
Vendor: martin@host-c1e5ea34
|
127
64
|
Architecture: amd64
|
128
|
-
Maintainer: <
|
129
|
-
|
130
|
-
|
65
|
+
Maintainer: <martin@host-c1e5ea34>
|
66
|
+
Installed-Size: 0
|
67
|
+
#Pre-Depends:
|
68
|
+
Section: default
|
131
69
|
Priority: extra
|
132
|
-
|
133
|
-
Filename: pool/main/b/bar/bar_1.2.3.4_amd64.deb
|
134
|
-
Size: 3
|
135
|
-
MD5sum: 37b51d194a7513e45b56f6524f2d51f2
|
136
|
-
SHA1: 62cdb7020ff920e5aa642c3d4066950dd1f01f4d
|
137
|
-
SHA256: fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9
|
70
|
+
Homepage: http://example.com/no-uri-given
|
138
71
|
Description: no description given
|
72
|
+
Filename: pool/main/f/frm-bar/frm_bar-1.0.0.deb
|
73
|
+
Size: 716
|
74
|
+
MD5sum: b21df912829a23f9846ddd022fc74c74
|
75
|
+
SHA1: 0592c2eb2f3f5a830109d63b83ab438c7c258d14
|
76
|
+
SHA256: 131f5d16fdd7ddf8bf9c4983d77022b268c02b2864ce9a9f841704631417515d
|
139
77
|
|
140
78
|
"
|
141
79
|
assert @package_release.package_file == correct_output
|
@@ -152,7 +90,6 @@ Description: Cloudscaling APT repository
|
|
152
90
|
end
|
153
91
|
|
154
92
|
def test_generate_release
|
155
|
-
# skip 'need to finish generate_release function'
|
156
93
|
correct_release_file = "Origin: apt.cloudscaling.com
|
157
94
|
Label: apt repository natty
|
158
95
|
Codename: natty
|
@@ -161,16 +98,16 @@ Architectures: amd64
|
|
161
98
|
Components: main universe multiverse
|
162
99
|
Description: Cloudscaling APT repository
|
163
100
|
MD5Sum:
|
164
|
-
|
165
|
-
|
101
|
+
c0ff97432f4ac04c99b2ddee0a1d5fed 986 main/binary-amd64/Packages
|
102
|
+
5bfa5912649f52c32d2e740fc727ebd5 462 main/binary-amd64/Packages.gz
|
166
103
|
79dd2fee35fba7255dcd40e1f6529591 134 main/binary-amd64/Release
|
167
104
|
SHA1:
|
168
|
-
|
169
|
-
|
105
|
+
2ecb580a151f0cf625016352b2a474b787cc0ac3 986 main/binary-amd64/Packages
|
106
|
+
80a6c1f004fb7b6bcb1ce3f86d16e53b5735ac84 462 main/binary-amd64/Packages.gz
|
170
107
|
6d932af9af761f418e5374f73dcd09badb4fe57e 134 main/binary-amd64/Release
|
171
108
|
SHA256:
|
172
|
-
|
173
|
-
|
109
|
+
ae8b50085f2405febff78f86fe7d89d93d9ff94ceccfbfa975c0bd79e63ce385 986 main/binary-amd64/Packages
|
110
|
+
cb8501ace11b9bdbfd0d65006a116313f5c6fda625d6383a549e80b982fc6eac 462 main/binary-amd64/Packages.gz
|
174
111
|
690b44df6fe65f40f260b73394e87804df78c9ccf13999889259faeed3eec40d 134 main/binary-amd64/Release
|
175
112
|
"
|
176
113
|
assert @package_release.release_file == correct_release_file
|
@@ -184,55 +121,24 @@ class TestPackage < MiniTest::Unit::TestCase
|
|
184
121
|
@tempfile1 = File.open('/tmp/foo','w+') { |f| f.write 'foo' }
|
185
122
|
@tempfile2 = File.open('/tmp/bar','w+') { |f| f.write 'bar' }
|
186
123
|
|
187
|
-
|
188
|
-
"Package" => "foo",
|
189
|
-
"Version" => "1.2.68",
|
190
|
-
"Architecture" => "amd64",
|
191
|
-
"Maintainer" => "support@cloudscaling.com",
|
192
|
-
"Homepage" => "http://www.cloudscaling.com",
|
193
|
-
"Priority" => "extra",
|
194
|
-
"Depends" => %w{one two three},
|
195
|
-
"section" => "main",
|
196
|
-
"path_to_deb" => '/tmp/foo',
|
197
|
-
"Description" => 'some
|
198
|
-
multiline
|
199
|
-
description'
|
200
|
-
}
|
124
|
+
package = File.join(@@frm_test_base, 'debs', 'frm_foo-1.0.0.deb')
|
201
125
|
|
202
|
-
@package1 = FRM::Package.new(
|
126
|
+
@package1 = FRM::Package.new(package)
|
203
127
|
end
|
204
128
|
|
205
|
-
def test()
|
206
|
-
assert @package1.name == 'foo'
|
207
|
-
assert @package1.content == 'foo'
|
208
|
-
end
|
209
|
-
|
210
129
|
def test_bad_file()
|
211
|
-
|
212
|
-
|
213
|
-
"Version" => "1.2.68",
|
214
|
-
"Architecture" => "amd64",
|
215
|
-
"Maintainer" => "support@cloudscaling.com",
|
216
|
-
"Homepage" => "http://www.cloudscaling.com",
|
217
|
-
"Priority" => "extra",
|
218
|
-
"Depends" => %w{one two three},
|
219
|
-
"section" => "main",
|
220
|
-
"path_to_deb" => '/some/bad/path',
|
221
|
-
"Description" => 'some
|
222
|
-
multiline
|
223
|
-
description'
|
224
|
-
}
|
225
|
-
assert_raises(RuntimeError) { FRM::Package.new(bad_hash) }
|
130
|
+
bad_package = "/some/bad/path"
|
131
|
+
assert_raises(RuntimeError) { FRM::Package.new(bad_package) }
|
226
132
|
end
|
227
133
|
|
228
134
|
def test_good_file()
|
229
|
-
assert @package1.content == '
|
135
|
+
assert Digest::MD5.hexdigest(@package1.content) == '0faf8cabf49a615adacbe6d80c4aee3b'
|
230
136
|
end
|
231
137
|
|
232
138
|
def test_hashes()
|
233
|
-
assert @package1.md5 == '
|
234
|
-
assert @package1.sha1 == '
|
235
|
-
assert @package1.sha2 == '
|
139
|
+
assert @package1.md5 == '0faf8cabf49a615adacbe6d80c4aee3b'
|
140
|
+
assert @package1.sha1 == '78c6be70488c78d63b6eb233f891e80d3af0b779'
|
141
|
+
assert @package1.sha2 == '5f0de3c65226c13e9c215478ba784afe54b0592aa46766ff19b1140644bbda71'
|
236
142
|
|
237
143
|
end
|
238
144
|
|
@@ -374,32 +280,7 @@ Description: Cloudscaling APT repository
|
|
374
280
|
"
|
375
281
|
assert @deb.generate_package_release == package_release_file
|
376
282
|
end
|
377
|
-
|
378
|
-
def test_generate_release
|
379
|
-
skip 'need to finish generate_release function'
|
380
|
-
release_file = "Origin: apt.cloudscaling.com
|
381
|
-
Label: apt repository natty
|
382
|
-
Codename: natty
|
383
|
-
Date: Thu, 22 Dec 2011 00:29:55 UTC
|
384
|
-
Architectures: amd64
|
385
|
-
;Components: main universe multiverse
|
386
|
-
Description: Cloudscaling APT repository
|
387
|
-
MD5Sum:
|
388
|
-
a4b943ff89790ccdc186875dad67827b 5813 main/binary-amd64/Packages
|
389
|
-
004fd3f868ebbe7501fb2e1c0c54e2a7 2148 main/binary-amd64/Packages.gz
|
390
|
-
79dd2fee35fba7255dcd40e1f6529591 134 main/binary-amd64/Release
|
391
|
-
SHA1:
|
392
|
-
6e03924030eab56cb9735a52ec710537e682bcfc 5813 main/binary-amd64/Packages
|
393
|
-
5f2989bae96e148cb5f18accc4357305926ab1e1 2148 main/binary-amd64/Packages.gz
|
394
|
-
6d932af9af761f418e5374f73dcd09badb4fe57e 134 main/binary-amd64/Release
|
395
|
-
SHA256:
|
396
|
-
dd8283f06beb4a5fc06ac62d3ae098e5ba2717daef2a15b5f3e9233eb64e0227 5813 main/binary-amd64/Packages
|
397
|
-
b197c5a3c1fe6a6d286e9f066a0cade289e3a2fc485c90407179951634788aa8 2148 main/binary-amd64/Packages.gz
|
398
|
-
690b44df6fe65f40f260b73394e87804df78c9ccf13999889259faeed3eec40d 134 main/binary-amd64/Release
|
399
|
-
"
|
400
|
-
assert @deb.generate_release == release_file
|
401
|
-
end
|
402
|
-
|
283
|
+
|
403
284
|
def generate_random_string
|
404
285
|
rand(36**rand(50)).to_s(36)
|
405
286
|
end
|
@@ -446,7 +327,7 @@ Description: no description given
|
|
446
327
|
|
447
328
|
|
448
329
|
def test_merge_package_file
|
449
|
-
package_file = File.open 'Packages.txt'
|
330
|
+
package_file = File.open File.join @@frm_test_base, 'Packages.txt'
|
450
331
|
read_buffer, write_buffer = IO.pipe
|
451
332
|
|
452
333
|
@deb.merge_package_file(package_file,write_buffer,@hash)
|
Binary file
|
Binary file
|
data/test/lib/test.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# this is the place to put common testing code
|
2
|
+
|
3
|
+
def compare_line_by_line(chunk1,chunk2)
|
4
|
+
arr1=chunk1.split("\n")
|
5
|
+
arr2=chunk2.split("\n")
|
6
|
+
arr1.each_with_index do |line,i|
|
7
|
+
unless line == arr2[i]
|
8
|
+
puts "line number #{i} is different:"
|
9
|
+
puts " #{line}"
|
10
|
+
puts " #{arr2[i]}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/test/rake.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
@@frm_test_base = File.join @frm_base, 'test'
|
2
|
+
|
3
|
+
require File.join @@frm_test_base, 'lib', 'test'
|
4
|
+
|
5
|
+
namespace :test do
|
6
|
+
|
7
|
+
desc "run the s3 test"
|
8
|
+
task :s3 do
|
9
|
+
require File.join @frm_base, 'lib', 'frm'
|
10
|
+
require File.join @@frm_test_base, 's3'
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "run the deb test"
|
14
|
+
task :deb do
|
15
|
+
require File.join @frm_base, 'lib', 'frm'
|
16
|
+
require File.join @@frm_test_base, 'deb'
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
desc "run the old deb test"
|
21
|
+
task :old_deb do
|
22
|
+
require File.join @frm_base, 'lib', 'frm'
|
23
|
+
require File.join @@frm_test_base, 'deb_test'
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
data/test/s3.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'minitest/autorun'
|
4
|
-
|
5
|
-
require File.join my_dir, 's3'
|
6
|
-
|
4
|
+
require 'mock-aws-s3'
|
7
5
|
|
8
6
|
# this is a stupid hack to get the @@bucket region set properly
|
9
7
|
DEFAULT_HOST = 's3-us-west-1.amazonaws.com'
|
@@ -14,7 +12,7 @@ class TestFRM < MiniTest::Unit::TestCase
|
|
14
12
|
@@access_key_id = 'abcd'
|
15
13
|
@@secret_key_id = '1234'
|
16
14
|
@@bucket = 'some-bucket'
|
17
|
-
@@prefix = 'testing/
|
15
|
+
@@prefix = 'testing/'
|
18
16
|
@@server = 's3-us-west-1.amazonaws.com'
|
19
17
|
@@timestamp = rand(9999).to_s
|
20
18
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Martin Rhoads
|
@@ -16,8 +16,33 @@ cert_chain: []
|
|
16
16
|
|
17
17
|
date: 2012-03-31 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: aws-s3
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: mock-aws-s3
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :development
|
45
|
+
version_requirements: *id002
|
21
46
|
description: FRM makes it easy to build package repositories on S3
|
22
47
|
email:
|
23
48
|
- ermal14@gmail.com
|
@@ -35,11 +60,17 @@ files:
|
|
35
60
|
- bin/frm
|
36
61
|
- frm.gemspec
|
37
62
|
- lib/frm.rb
|
63
|
+
- lib/frm/base.rb
|
38
64
|
- lib/frm/deb.rb
|
39
65
|
- lib/frm/s3.rb
|
40
66
|
- lib/frm/version.rb
|
67
|
+
- test/Packages.txt
|
68
|
+
- test/deb.rb
|
41
69
|
- test/deb_test.rb
|
42
|
-
- test/
|
70
|
+
- test/debs/frm_bar-1.0.0.deb
|
71
|
+
- test/debs/frm_foo-1.0.0.deb
|
72
|
+
- test/lib/test.rb
|
73
|
+
- test/rake.rb
|
43
74
|
- test/s3.rb
|
44
75
|
has_rdoc: true
|
45
76
|
homepage: https://github.com/ermal14/frm
|
@@ -73,7 +104,5 @@ rubygems_version: 1.3.7
|
|
73
104
|
signing_key:
|
74
105
|
specification_version: 3
|
75
106
|
summary: Effin Repo Manager
|
76
|
-
test_files:
|
77
|
-
|
78
|
-
- test/deb_test2.rb
|
79
|
-
- test/s3.rb
|
107
|
+
test_files: []
|
108
|
+
|