frm 0.0.5 → 0.0.7
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/lib/frm/base.rb +50 -10
- data/lib/frm/deb.rb +1 -148
- data/lib/frm/package.rb +24 -0
- data/lib/frm/release.rb +107 -0
- data/lib/frm/release_pusher.rb +52 -0
- data/lib/frm/version.rb +1 -1
- data/lib/frm.rb +12 -0
- data/test/deb_test.rb +32 -8
- metadata +60 -60
data/lib/frm/base.rb
CHANGED
@@ -1,12 +1,5 @@
|
|
1
1
|
module FRM
|
2
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
3
|
|
11
4
|
def compute_md5(string)
|
12
5
|
Digest::MD5.hexdigest(string)
|
@@ -73,9 +66,56 @@ module FRM
|
|
73
66
|
|
74
67
|
def merge_package_file(in_pipe,out_pipe,package_list)
|
75
68
|
sorted_list = package_list.sort { |a,b| a['Package'] <=> b['Package'] }
|
76
|
-
|
77
|
-
# STDERR.puts "next_stub[0] = #{next_stub[0]}"
|
78
|
-
# end
|
69
|
+
merge(in_pipe,out_pipe,sorted_list)
|
79
70
|
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def create_package_stub(package_hash)
|
75
|
+
return_value = ''
|
76
|
+
package_hash.each do |key,value|
|
77
|
+
return_value << "#{key}: #{value}\n"
|
78
|
+
end
|
79
|
+
return_value << "\n"
|
80
|
+
end
|
81
|
+
|
82
|
+
def merge(in_pipe,out_pipe,package_list)
|
83
|
+
return if out_pipe.closed?
|
84
|
+
return if in_pipe.closed? and package_list.empty
|
85
|
+
|
86
|
+
if package_list.empty?
|
87
|
+
while line = in_pipe.gets
|
88
|
+
out_pipe.puts line
|
89
|
+
end
|
90
|
+
in_pipe.close
|
91
|
+
out_pipe.close
|
92
|
+
return
|
93
|
+
end
|
94
|
+
|
95
|
+
if in_pipe.closed?
|
96
|
+
package_list.each {|package_hash| out_pipe.write(create_package_stub(package_hash)) }
|
97
|
+
out_pipe.close
|
98
|
+
return
|
99
|
+
end
|
100
|
+
|
101
|
+
current_package, stub = parse_package_stub in_pipe
|
102
|
+
|
103
|
+
if current_package['Package'] < package_list.first['Package']
|
104
|
+
out_pipe.puts stub
|
105
|
+
out_pipe.puts ""
|
106
|
+
merge(in_pipe,out_pipe,package_list)
|
107
|
+
return
|
108
|
+
elsif current_package['Package'] > package_list.first['Package']
|
109
|
+
while ( ! package_list.empty? ) and current_package['Package'] > package_list.first['Package']
|
110
|
+
out_pipe.write create_package_stub(package_list.shift)
|
111
|
+
end
|
112
|
+
elsif current_package['Package'] == package_list.first['Package']
|
113
|
+
out_pipe.write create_package_stub(package_list.shift)
|
114
|
+
end
|
115
|
+
|
116
|
+
merge(in_pipe,out_pipe,package_list)
|
117
|
+
return nil
|
118
|
+
end
|
119
|
+
|
80
120
|
end
|
81
121
|
end
|
data/lib/frm/deb.rb
CHANGED
@@ -1,152 +1,5 @@
|
|
1
|
-
DEFAULT_HOST = 's3-us-west-1.amazonaws.com' # stupid hack to point to
|
2
|
-
# the right region
|
3
|
-
|
4
1
|
module FRM
|
5
2
|
|
6
|
-
class Package < Base
|
7
|
-
attr_accessor :repo_filename
|
8
|
-
attr_reader :path, :content, :md5, :sha1, :sha2 , :size, :release
|
9
|
-
def initialize(path,release='natty')
|
10
|
-
raise "you need to specify a path!!!" if path.nil?
|
11
|
-
@path = path
|
12
|
-
raise "Can not find file '#{path}'" unless File.exists?(path)
|
13
|
-
@release = release
|
14
|
-
begin
|
15
|
-
@content = File.read(path)
|
16
|
-
rescue Object => o
|
17
|
-
STDERR.puts "Could not open file '#{path}'. Exiting..."
|
18
|
-
STDERR.puts o.inspect
|
19
|
-
STDERR.puts o.backtrace
|
20
|
-
raise "Could not open file '#{path}'. Exiting..."
|
21
|
-
end
|
22
|
-
@size = File.size(@path)
|
23
|
-
@md5 = compute_md5(@content)
|
24
|
-
@sha1 = compute_sha1(@content)
|
25
|
-
@sha2 = compute_sha2(@content)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class PackageRelease < Base
|
30
|
-
attr_reader :packages, :standards_version, :priority, :package_file, :gzipped_package_file, :release_file, :short_release_file, :component, :release
|
31
|
-
def initialize(packages={},release='natty',component='main/binary-amd64')
|
32
|
-
@release = release
|
33
|
-
@component = component
|
34
|
-
@standards_version = standards_version
|
35
|
-
@priority = priority
|
36
|
-
@packages = []
|
37
|
-
packages.each { |package| @packages << Package.new(package,@release) }
|
38
|
-
@package_file = generate_package_file
|
39
|
-
@gzipped_package_file = generate_gzip_pipe(@package_file).read
|
40
|
-
@short_release_file = generate_short_release_file
|
41
|
-
@release_file = generate_release_file
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
|
46
|
-
def generate_release_file()
|
47
|
-
partial_release_file = "Origin: apt.cloudscaling.com
|
48
|
-
Label: apt repository #{@release}
|
49
|
-
Codename: #{@release}
|
50
|
-
Date: Thu, 22 Dec 2011 00:29:55 UTC
|
51
|
-
Architectures: amd64
|
52
|
-
Components: main universe multiverse
|
53
|
-
Description: Cloudscaling APT repository
|
54
|
-
MD5Sum:
|
55
|
-
#{compute_md5(@package_file)} #{@package_file.size} #{@component}/Packages
|
56
|
-
#{compute_md5(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
|
57
|
-
#{compute_md5(@short_release_file)} #{@short_release_file.size} #{@component}/Release
|
58
|
-
SHA1:
|
59
|
-
#{compute_sha1(@package_file)} #{@package_file.size} #{@component}/Packages
|
60
|
-
#{compute_sha1(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
|
61
|
-
#{compute_sha1(@short_release_file)} #{@short_release_file.size} #{@component}/Release
|
62
|
-
SHA256:
|
63
|
-
#{compute_sha2(@package_file)} #{@package_file.size} #{@component}/Packages
|
64
|
-
#{compute_sha2(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
|
65
|
-
#{compute_sha2(@short_release_file)} #{@short_release_file.size} #{@component}/Release
|
66
|
-
"
|
67
|
-
return partial_release_file
|
68
|
-
end
|
69
|
-
|
70
|
-
def generate_short_release_file
|
71
|
-
"Component: main
|
72
|
-
Origin: apt.cloudscaling.com
|
73
|
-
Label: apt repository #{@release}
|
74
|
-
Architecture: amd64
|
75
|
-
Description: Cloudscaling APT repository
|
76
|
-
"
|
77
|
-
end
|
78
|
-
|
79
|
-
|
80
|
-
def filename(package)
|
81
|
-
filename = File.basename package.path
|
82
|
-
shortname = `dpkg --field #{package.path} Package`.chomp
|
83
|
-
first_letter = shortname[0]
|
84
|
-
package.repo_filename = "pool/main/#{first_letter}/#{shortname}/#{filename}"
|
85
|
-
end
|
86
|
-
|
87
|
-
def generate_package_file()
|
88
|
-
package_file = ''
|
89
|
-
@packages.each { |package| package_file << generate_package_stub(package) }
|
90
|
-
return package_file
|
91
|
-
end
|
92
|
-
|
93
|
-
def generate_package_stub(package)
|
94
|
-
package_stub = ''
|
95
|
-
package_stub << `dpkg --field #{package.path}`
|
96
|
-
package_stub << "Filename: #{filename(package)}\n"
|
97
|
-
package_stub << "Size: #{package.size}\n"
|
98
|
-
package_stub << "MD5sum: #{package.md5}\n"
|
99
|
-
package_stub << "SHA1: #{package.sha1}\n"
|
100
|
-
package_stub << "SHA256: #{package.sha2}\n"
|
101
|
-
package_stub << "\n"
|
102
|
-
return package_stub
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
class ReleasePusher < Base
|
107
|
-
def initialize(package_release,access_key,secret_key,bucket,prefix,server='s3-us-west-1.amazonaws.com')
|
108
|
-
@release = package_release.release
|
109
|
-
@bucket = bucket
|
110
|
-
@prefix = prefix
|
111
|
-
@s3 = FRM::S3.new(access_key,secret_key,server)
|
112
|
-
push_packages(package_release.packages)
|
113
|
-
push_release_files(package_release)
|
114
|
-
end
|
115
|
-
|
116
|
-
private
|
117
|
-
|
118
|
-
|
119
|
-
def push_release_files(package_release)
|
120
|
-
# TODO: un-hardcode this
|
121
|
-
release_path = @prefix + "/dists/#{@release}/Release"
|
122
|
-
@s3.put(release_path,package_release.release_file,@bucket)
|
123
|
-
|
124
|
-
in_release_path = @prefix + "/dists/#{@release}/InRelease"
|
125
|
-
@s3.put(in_release_path,gpg_clearsign(package_release.release_file),@bucket)
|
126
|
-
|
127
|
-
gpg_release_path = @prefix + "/dists/#{@release}/Release.gpg"
|
128
|
-
@s3.put(gpg_release_path,gpg_detached(package_release.release_file),@bucket)
|
129
|
-
|
130
|
-
release_file_path = @prefix + "/dists/#{@release}/" + package_release.component
|
131
|
-
@s3.put(release_file_path + '/Release',package_release.short_release_file,@bucket)
|
132
|
-
@s3.put(release_file_path + '/Packages',package_release.package_file,@bucket)
|
133
|
-
@s3.put(release_file_path + '/Packages.gz',package_release.gzipped_package_file,@bucket)
|
134
|
-
end
|
135
|
-
|
136
|
-
|
137
|
-
def push_packages(packages)
|
138
|
-
packages.each { |package| push_package(package) }
|
139
|
-
end
|
140
|
-
|
141
|
-
def push_package(package)
|
142
|
-
remote_path = @prefix + '/' + package.repo_filename
|
143
|
-
@s3.put(remote_path,package.content,@bucket)
|
144
|
-
end
|
145
|
-
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
|
-
|
150
3
|
|
151
4
|
class Deb < Base
|
152
5
|
|
@@ -154,7 +7,7 @@ Description: Cloudscaling APT repository
|
|
154
7
|
end
|
155
8
|
|
156
9
|
def generate_package_file(in_packages=[])
|
157
|
-
packages = in_packages.
|
10
|
+
packages = in_packages.sort { |a,b| a['Package'] <=> b['Package'] }
|
158
11
|
package_file = ''
|
159
12
|
packages.each { |package| package_file << generate_package_stub(package) }
|
160
13
|
return package_file
|
data/lib/frm/package.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module FRM
|
2
|
+
class Package < Base
|
3
|
+
attr_accessor :repo_filename
|
4
|
+
attr_reader :path, :content, :md5, :sha1, :sha2 , :size, :release
|
5
|
+
def initialize(path,release='natty')
|
6
|
+
raise "you need to specify a path!!!" if path.nil?
|
7
|
+
@path = path
|
8
|
+
raise "Can not find file '#{path}'" unless File.exists?(path)
|
9
|
+
@release = release
|
10
|
+
begin
|
11
|
+
@content = File.read(path)
|
12
|
+
rescue Object => o
|
13
|
+
STDERR.puts "Could not open file '#{path}'. Exiting..."
|
14
|
+
STDERR.puts o.inspect
|
15
|
+
STDERR.puts o.backtrace
|
16
|
+
raise "Could not open file '#{path}'. Exiting..."
|
17
|
+
end
|
18
|
+
@size = File.size(@path)
|
19
|
+
@md5 = compute_md5(@content)
|
20
|
+
@sha1 = compute_sha1(@content)
|
21
|
+
@sha2 = compute_sha2(@content)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/frm/release.rb
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
module FRM
|
2
|
+
|
3
|
+
class PackageRelease < Base
|
4
|
+
attr_reader :packages, :standards_version, :priority, :package_file, :gzipped_package_file, :release_file, :short_release_file, :component, :release, :i386_release_file, :i386_packages_file, :gzipped_i386_packages_file
|
5
|
+
def initialize(packages={},release='natty',component='main/binary-amd64')
|
6
|
+
@release = release
|
7
|
+
@component = component
|
8
|
+
@standards_version = standards_version
|
9
|
+
@priority = priority
|
10
|
+
@packages = []
|
11
|
+
packages.each { |package| @packages << Package.new(package,@release) }
|
12
|
+
if component == 'main/binary-amd64'
|
13
|
+
generate_i386_stubs
|
14
|
+
end
|
15
|
+
@i386_release_file = <<EOF
|
16
|
+
Component: main
|
17
|
+
Origin: apt.cloudscaling.com
|
18
|
+
Label: apt repository #{@release}
|
19
|
+
Architecture: i386
|
20
|
+
Description: Cloudscaling APT repository
|
21
|
+
EOF
|
22
|
+
@i386_packages_file = ""
|
23
|
+
@gzipped_i386_packages_file = generate_gzip_pipe(@i386_packages_file).read
|
24
|
+
@package_file = generate_package_file
|
25
|
+
@gzipped_package_file = generate_gzip_pipe(@package_file).read
|
26
|
+
@short_release_file = generate_short_release_file
|
27
|
+
@release_file = generate_release_file
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
|
33
|
+
# ubuntu precicse 64 wants i386 debs by default :\
|
34
|
+
def generate_i386_stubs()
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def generate_release_file()
|
39
|
+
partial_release_file = "Origin: apt.cloudscaling.com
|
40
|
+
Label: apt repository #{@release}
|
41
|
+
Codename: #{@release}
|
42
|
+
Date: Thu, 22 Dec 2011 00:29:55 UTC
|
43
|
+
Architectures: amd64 i386
|
44
|
+
Components: main universe multiverse
|
45
|
+
Description: Cloudscaling APT repository
|
46
|
+
MD5Sum:
|
47
|
+
#{compute_md5(@package_file)} #{@package_file.size} #{@component}/Packages
|
48
|
+
#{compute_md5(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
|
49
|
+
#{compute_md5(@short_release_file)} #{@short_release_file.size} #{@component}/Release
|
50
|
+
#{compute_md5(@i386_packages_file)} #{@i386_packages_file.size} main/binary-i386/Packages
|
51
|
+
#{compute_md5(@gzipped_i386_packages_file)} #{@gzipped_i386_packages_file.size} main/binary-i386/Packages.gz
|
52
|
+
#{compute_md5(@i386_release_file)} #{@i386_release_file.size} main/binary-i386/Release
|
53
|
+
SHA1:
|
54
|
+
#{compute_sha1(@package_file)} #{@package_file.size} #{@component}/Packages
|
55
|
+
#{compute_sha1(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
|
56
|
+
#{compute_sha1(@short_release_file)} #{@short_release_file.size} #{@component}/Release
|
57
|
+
#{compute_sha1(@i386_packages_file)} #{@i386_packages_file.size} main/binary-i386/Packages
|
58
|
+
#{compute_sha1(@gzipped_i386_packages_file)} #{@gzipped_i386_packages_file.size} main/binary-i386/Packages.gz
|
59
|
+
#{compute_sha1(@i386_release_file)} #{@i386_release_file.size} main/binary-i386/Release
|
60
|
+
SHA256:
|
61
|
+
#{compute_sha2(@package_file)} #{@package_file.size} #{@component}/Packages
|
62
|
+
#{compute_sha2(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
|
63
|
+
#{compute_sha2(@short_release_file)} #{@short_release_file.size} #{@component}/Release
|
64
|
+
#{compute_sha2(@i386_packages_file)} #{@i386_packages_file.size} main/binary-i386/Packages
|
65
|
+
#{compute_sha2(@gzipped_i386_packages_file)} #{@gzipped_i386_packages_file.size} main/binary-i386/Packages.gz
|
66
|
+
#{compute_sha2(@i386_release_file)} #{@i386_release_file.size} main/binary-i386/Release
|
67
|
+
"
|
68
|
+
return partial_release_file
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
def generate_short_release_file
|
73
|
+
"Component: main
|
74
|
+
Origin: apt.cloudscaling.com
|
75
|
+
Label: apt repository #{@release}
|
76
|
+
Architecture: amd64
|
77
|
+
Description: Cloudscaling APT repository
|
78
|
+
"
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
def filename(package)
|
83
|
+
filename = File.basename package.path
|
84
|
+
shortname = `dpkg --field #{package.path} Package`.chomp
|
85
|
+
first_letter = shortname[0]
|
86
|
+
package.repo_filename = "pool/main/#{first_letter}/#{shortname}/#{filename}"
|
87
|
+
end
|
88
|
+
|
89
|
+
def generate_package_file()
|
90
|
+
package_file = ''
|
91
|
+
@packages.each { |package| package_file << generate_package_stub(package) }
|
92
|
+
return package_file
|
93
|
+
end
|
94
|
+
|
95
|
+
def generate_package_stub(package)
|
96
|
+
package_stub = ''
|
97
|
+
package_stub << `dpkg --field #{package.path}`
|
98
|
+
package_stub << "Filename: #{filename(package)}\n"
|
99
|
+
package_stub << "Size: #{package.size}\n"
|
100
|
+
package_stub << "MD5sum: #{package.md5}\n"
|
101
|
+
package_stub << "SHA1: #{package.sha1}\n"
|
102
|
+
package_stub << "SHA256: #{package.sha2}\n"
|
103
|
+
package_stub << "\n"
|
104
|
+
return package_stub
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module FRM
|
2
|
+
|
3
|
+
class ReleasePusher < Base
|
4
|
+
def initialize(package_release,access_key,secret_key,bucket,prefix,server='s3-us-west-1.amazonaws.com')
|
5
|
+
@release = package_release.release
|
6
|
+
@bucket = bucket
|
7
|
+
@prefix = prefix
|
8
|
+
@s3 = FRM::S3.new(access_key,secret_key,server)
|
9
|
+
push_packages(package_release.packages)
|
10
|
+
push_release_files(package_release)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
|
16
|
+
def push_release_files(package_release)
|
17
|
+
# TODO: un-hardcode this
|
18
|
+
release_path = @prefix + "/dists/#{@release}/Release"
|
19
|
+
@s3.put(release_path,package_release.release_file,@bucket)
|
20
|
+
|
21
|
+
in_release_path = @prefix + "/dists/#{@release}/InRelease"
|
22
|
+
@s3.put(in_release_path,gpg_clearsign(package_release.release_file),@bucket)
|
23
|
+
|
24
|
+
gpg_release_path = @prefix + "/dists/#{@release}/Release.gpg"
|
25
|
+
@s3.put(gpg_release_path,gpg_detached(package_release.release_file),@bucket)
|
26
|
+
|
27
|
+
release_file_path = @prefix + "/dists/#{@release}/" + package_release.component
|
28
|
+
@s3.put(release_file_path + '/Release',package_release.short_release_file,@bucket)
|
29
|
+
@s3.put(release_file_path + '/Packages',package_release.package_file,@bucket)
|
30
|
+
@s3.put(release_file_path + '/Packages.gz',package_release.gzipped_package_file,@bucket)
|
31
|
+
|
32
|
+
|
33
|
+
i386_release_file_path = @prefix + "/dists/#{@release}/" + 'main/binary-i386'
|
34
|
+
@s3.put(i386_release_file_path + '/Release',package_release.i386_release_file,@bucket)
|
35
|
+
@s3.put(i386_release_file_path + '/Packages',package_release.i386_packages_file,@bucket)
|
36
|
+
@s3.put(i386_release_file_path + '/Packages.gz',package_release.gzipped_i386_packages_file,@bucket)
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
def push_packages(packages)
|
41
|
+
packages.each { |package| push_package(package) }
|
42
|
+
end
|
43
|
+
|
44
|
+
def push_package(package)
|
45
|
+
remote_path = @prefix + '/' + package.repo_filename
|
46
|
+
@s3.put(remote_path,package.content,@bucket)
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data/lib/frm/version.rb
CHANGED
data/lib/frm.rb
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
DEFAULT_HOST = 's3-us-west-1.amazonaws.com' # stupid hack to point to the right s3 region
|
2
|
+
|
3
|
+
require 'zlib'
|
4
|
+
require 'tempfile'
|
5
|
+
require 'digest/md5'
|
6
|
+
require 'digest/sha1'
|
7
|
+
require 'digest/sha2'
|
8
|
+
|
1
9
|
require 'frm/base'
|
2
10
|
require 'frm/s3'
|
11
|
+
require 'frm/package'
|
12
|
+
require 'frm/release'
|
13
|
+
require 'frm/release_pusher'
|
3
14
|
require 'frm/deb'
|
15
|
+
|
data/test/deb_test.rb
CHANGED
@@ -94,7 +94,7 @@ Description: Cloudscaling APT repository
|
|
94
94
|
Label: apt repository natty
|
95
95
|
Codename: natty
|
96
96
|
Date: Thu, 22 Dec 2011 00:29:55 UTC
|
97
|
-
Architectures: amd64
|
97
|
+
Architectures: amd64 i386
|
98
98
|
Components: main universe multiverse
|
99
99
|
Description: Cloudscaling APT repository
|
100
100
|
MD5Sum:
|
@@ -178,6 +178,17 @@ class TestDeb < MiniTest::Unit::TestCase
|
|
178
178
|
"Depends" => %w{one two three},
|
179
179
|
"section" => "main",
|
180
180
|
"path_to_deb" => '/tmp/bar_1.2.3.4_amd64.deb'
|
181
|
+
},
|
182
|
+
{
|
183
|
+
"Package" => "qqq",
|
184
|
+
"Version" => "1.2.3.4",
|
185
|
+
"Architecture" => "amd64",
|
186
|
+
"Maintainer" => "support@cloudscaling.com",
|
187
|
+
"Homepage" => "http://www.cloudscaling.com",
|
188
|
+
"Priority" => "extra",
|
189
|
+
"Depends" => %w{one two three},
|
190
|
+
"section" => "main",
|
191
|
+
"path_to_deb" => '/tmp/bar_1.2.3.4_amd64.deb'
|
181
192
|
}
|
182
193
|
]
|
183
194
|
end
|
@@ -214,7 +225,21 @@ Description: some
|
|
214
225
|
|
215
226
|
|
216
227
|
def test_generate_package_file
|
217
|
-
|
228
|
+
correct_output = 'Package: bar
|
229
|
+
Version: 1.2.3.4
|
230
|
+
Architecture: amd64
|
231
|
+
Maintainer: <support@cloudscaling.com>
|
232
|
+
Homepage: http://www.cloudscaling.com
|
233
|
+
Priority: extra
|
234
|
+
Depends: one, two, three
|
235
|
+
Filename: pool/main/b/bar/bar_1.2.3.4_amd64.deb
|
236
|
+
Size: 3
|
237
|
+
MD5sum: 37b51d194a7513e45b56f6524f2d51f2
|
238
|
+
SHA1: 62cdb7020ff920e5aa642c3d4066950dd1f01f4d
|
239
|
+
SHA256: fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9
|
240
|
+
Description: no description given
|
241
|
+
|
242
|
+
Package: foo
|
218
243
|
Version: 1.2.68
|
219
244
|
Architecture: amd64
|
220
245
|
Maintainer: <support@cloudscaling.com>
|
@@ -230,21 +255,21 @@ Description: some
|
|
230
255
|
multiline
|
231
256
|
description
|
232
257
|
|
233
|
-
Package:
|
258
|
+
Package: qqq
|
234
259
|
Version: 1.2.3.4
|
235
260
|
Architecture: amd64
|
236
261
|
Maintainer: <support@cloudscaling.com>
|
237
262
|
Homepage: http://www.cloudscaling.com
|
238
263
|
Priority: extra
|
239
264
|
Depends: one, two, three
|
240
|
-
Filename: pool/main/
|
265
|
+
Filename: pool/main/q/qqq/qqq_1.2.3.4_amd64.deb
|
241
266
|
Size: 3
|
242
267
|
MD5sum: 37b51d194a7513e45b56f6524f2d51f2
|
243
268
|
SHA1: 62cdb7020ff920e5aa642c3d4066950dd1f01f4d
|
244
269
|
SHA256: fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9
|
245
270
|
Description: no description given
|
246
271
|
|
247
|
-
|
272
|
+
'
|
248
273
|
assert @deb.generate_package_file(@hash) == correct_output
|
249
274
|
end
|
250
275
|
|
@@ -329,9 +354,8 @@ Description: no description given
|
|
329
354
|
def test_merge_package_file
|
330
355
|
package_file = File.open File.join @@frm_test_base, 'Packages.txt'
|
331
356
|
read_buffer, write_buffer = IO.pipe
|
332
|
-
|
333
|
-
|
334
|
-
|
357
|
+
merged_list = @deb.merge_package_file(package_file,write_buffer,@hash)
|
358
|
+
assert true
|
335
359
|
end
|
336
360
|
|
337
361
|
|
metadata
CHANGED
@@ -1,58 +1,56 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: frm
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 5
|
9
|
-
version: 0.0.5
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.7
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Martin Rhoads
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-08-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: aws-s3
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
31
22
|
type: :runtime
|
32
|
-
version_requirements: *id001
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: mock-aws-s3
|
35
23
|
prerelease: false
|
36
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: mock-aws-s3
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
37
33
|
none: false
|
38
|
-
requirements:
|
39
|
-
- -
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
|
42
|
-
- 0
|
43
|
-
version: "0"
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
44
38
|
type: :development
|
45
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
46
|
description: FRM makes it easy to build package repositories on S3
|
47
|
-
email:
|
47
|
+
email:
|
48
48
|
- ermal14@gmail.com
|
49
|
-
executables:
|
49
|
+
executables:
|
50
50
|
- frm
|
51
51
|
extensions: []
|
52
|
-
|
53
52
|
extra_rdoc_files: []
|
54
|
-
|
55
|
-
files:
|
53
|
+
files:
|
56
54
|
- .gitignore
|
57
55
|
- Gemfile
|
58
56
|
- LICENSE
|
@@ -63,6 +61,9 @@ files:
|
|
63
61
|
- lib/frm.rb
|
64
62
|
- lib/frm/base.rb
|
65
63
|
- lib/frm/deb.rb
|
64
|
+
- lib/frm/package.rb
|
65
|
+
- lib/frm/release.rb
|
66
|
+
- lib/frm/release_pusher.rb
|
66
67
|
- lib/frm/s3.rb
|
67
68
|
- lib/frm/version.rb
|
68
69
|
- test/Packages.txt
|
@@ -73,37 +74,36 @@ files:
|
|
73
74
|
- test/lib/test.rb
|
74
75
|
- test/rake.rb
|
75
76
|
- test/s3.rb
|
76
|
-
has_rdoc: true
|
77
77
|
homepage: https://github.com/ermal14/frm
|
78
78
|
licenses: []
|
79
|
-
|
80
79
|
post_install_message:
|
81
80
|
rdoc_options: []
|
82
|
-
|
83
|
-
require_paths:
|
81
|
+
require_paths:
|
84
82
|
- lib
|
85
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
84
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
|
91
|
-
|
92
|
-
version: "0"
|
93
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
90
|
none: false
|
95
|
-
requirements:
|
96
|
-
- -
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
|
99
|
-
- 0
|
100
|
-
version: "0"
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
101
95
|
requirements: []
|
102
|
-
|
103
96
|
rubyforge_project: frm
|
104
|
-
rubygems_version: 1.
|
97
|
+
rubygems_version: 1.8.23
|
105
98
|
signing_key:
|
106
99
|
specification_version: 3
|
107
100
|
summary: Effin Repo Manager
|
108
|
-
test_files:
|
109
|
-
|
101
|
+
test_files:
|
102
|
+
- test/Packages.txt
|
103
|
+
- test/deb.rb
|
104
|
+
- test/deb_test.rb
|
105
|
+
- test/debs/frm_bar-1.0.0.deb
|
106
|
+
- test/debs/frm_foo-1.0.0.deb
|
107
|
+
- test/lib/test.rb
|
108
|
+
- test/rake.rb
|
109
|
+
- test/s3.rb
|