dpkg-tools 0.3.3
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/CHANGES +198 -0
- data/MIT-LICENSE +20 -0
- data/README +17 -0
- data/Rakefile +1 -0
- data/bin/dpkg-etc +6 -0
- data/bin/dpkg-gem +6 -0
- data/bin/dpkg-rails +6 -0
- data/lib/dpkg-tools.rb +6 -0
- data/lib/dpkg-tools/command_line.rb +142 -0
- data/lib/dpkg-tools/package.rb +30 -0
- data/lib/dpkg-tools/package/builder.rb +112 -0
- data/lib/dpkg-tools/package/config.rb +96 -0
- data/lib/dpkg-tools/package/control_files.rb +24 -0
- data/lib/dpkg-tools/package/control_files/base.rb +75 -0
- data/lib/dpkg-tools/package/control_files/changelog.rb +23 -0
- data/lib/dpkg-tools/package/control_files/control.rb +148 -0
- data/lib/dpkg-tools/package/control_files/copyright.rb +27 -0
- data/lib/dpkg-tools/package/control_files/rakefile.rb +28 -0
- data/lib/dpkg-tools/package/control_files/rules.rb +29 -0
- data/lib/dpkg-tools/package/data.rb +125 -0
- data/lib/dpkg-tools/package/etc.rb +26 -0
- data/lib/dpkg-tools/package/etc/builder.rb +19 -0
- data/lib/dpkg-tools/package/etc/control_files.rb +22 -0
- data/lib/dpkg-tools/package/etc/control_files/changelog.rb +30 -0
- data/lib/dpkg-tools/package/etc/control_files/rakefile.rb +18 -0
- data/lib/dpkg-tools/package/etc/data.rb +48 -0
- data/lib/dpkg-tools/package/etc/rake.rb +31 -0
- data/lib/dpkg-tools/package/etc/setup.rb +30 -0
- data/lib/dpkg-tools/package/fs_methods.rb +10 -0
- data/lib/dpkg-tools/package/gem.rb +43 -0
- data/lib/dpkg-tools/package/gem/builder.rb +77 -0
- data/lib/dpkg-tools/package/gem/control_files.rb +23 -0
- data/lib/dpkg-tools/package/gem/control_files/changelog.rb +19 -0
- data/lib/dpkg-tools/package/gem/control_files/copyright.rb +24 -0
- data/lib/dpkg-tools/package/gem/control_files/rakefile.rb +19 -0
- data/lib/dpkg-tools/package/gem/data.rb +115 -0
- data/lib/dpkg-tools/package/gem/gem_format.rb +10 -0
- data/lib/dpkg-tools/package/gem/rake.rb +37 -0
- data/lib/dpkg-tools/package/gem/setup.rb +159 -0
- data/lib/dpkg-tools/package/rails.rb +26 -0
- data/lib/dpkg-tools/package/rails/builder.rb +77 -0
- data/lib/dpkg-tools/package/rails/cap.rb +30 -0
- data/lib/dpkg-tools/package/rails/control_files.rb +22 -0
- data/lib/dpkg-tools/package/rails/control_files/changelog.rb +19 -0
- data/lib/dpkg-tools/package/rails/control_files/rakefile.rb +24 -0
- data/lib/dpkg-tools/package/rails/data.rb +160 -0
- data/lib/dpkg-tools/package/rails/rake.rb +40 -0
- data/lib/dpkg-tools/package/rails/setup.rb +84 -0
- data/lib/dpkg-tools/package/rake.rb +90 -0
- data/lib/dpkg-tools/package/setup.rb +145 -0
- data/lib/dpkg-tools/version.rb +23 -0
- data/spec/dpkg-tools/command_line_spec.rb +9 -0
- data/spec/dpkg-tools/package/builder_spec.rb +159 -0
- data/spec/dpkg-tools/package/config_spec.rb +150 -0
- data/spec/dpkg-tools/package/control_files/base_spec.rb +111 -0
- data/spec/dpkg-tools/package/control_files/changelog_spec.rb +22 -0
- data/spec/dpkg-tools/package/control_files/control_spec.rb +131 -0
- data/spec/dpkg-tools/package/control_files/copyright_spec.rb +29 -0
- data/spec/dpkg-tools/package/control_files/rakefile_spec.rb +37 -0
- data/spec/dpkg-tools/package/control_files/rules_spec.rb +16 -0
- data/spec/dpkg-tools/package/control_files_spec.rb +12 -0
- data/spec/dpkg-tools/package/data_spec.rb +115 -0
- data/spec/dpkg-tools/package/etc/builder_spec.rb +28 -0
- data/spec/dpkg-tools/package/etc/control_files/changelog_spec.rb +21 -0
- data/spec/dpkg-tools/package/etc/control_files/rakefile_spec.rb +16 -0
- data/spec/dpkg-tools/package/etc/control_files_spec.rb +12 -0
- data/spec/dpkg-tools/package/etc/data_spec.rb +74 -0
- data/spec/dpkg-tools/package/etc/rake_spec.rb +71 -0
- data/spec/dpkg-tools/package/etc/setup_spec.rb +62 -0
- data/spec/dpkg-tools/package/etc_spec.rb +39 -0
- data/spec/dpkg-tools/package/fs_methods_spec.rb +33 -0
- data/spec/dpkg-tools/package/gem/builder_spec.rb +84 -0
- data/spec/dpkg-tools/package/gem/control_files/changelog_spec.rb +25 -0
- data/spec/dpkg-tools/package/gem/control_files/copyright_spec.rb +28 -0
- data/spec/dpkg-tools/package/gem/control_files/rakefile_spec.rb +17 -0
- data/spec/dpkg-tools/package/gem/control_files_spec.rb +12 -0
- data/spec/dpkg-tools/package/gem/data_spec.rb +176 -0
- data/spec/dpkg-tools/package/gem/gem_format_spec.rb +26 -0
- data/spec/dpkg-tools/package/gem/rake_spec.rb +102 -0
- data/spec/dpkg-tools/package/gem/setup_spec.rb +274 -0
- data/spec/dpkg-tools/package/gem_spec.rb +68 -0
- data/spec/dpkg-tools/package/rails/builder_spec.rb +113 -0
- data/spec/dpkg-tools/package/rails/cap_spec.rb +37 -0
- data/spec/dpkg-tools/package/rails/control_files/changelog_spec.rb +25 -0
- data/spec/dpkg-tools/package/rails/control_files/rakefile_spec.rb +24 -0
- data/spec/dpkg-tools/package/rails/control_files_spec.rb +12 -0
- data/spec/dpkg-tools/package/rails/data_spec.rb +178 -0
- data/spec/dpkg-tools/package/rails/rake_spec.rb +78 -0
- data/spec/dpkg-tools/package/rails/setup_spec.rb +152 -0
- data/spec/dpkg-tools/package/rails_spec.rb +27 -0
- data/spec/dpkg-tools/package/rake_spec.rb +87 -0
- data/spec/dpkg-tools/package/setup_spec.rb +247 -0
- data/spec/dpkg-tools/package_spec.rb +34 -0
- data/spec/fixtures/BlueCloth-1.0.0.gem +1190 -0
- data/spec/fixtures/database.yml +33 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +52 -0
- data/tasks/dist.rake +118 -0
- data/tasks/rspec.rake +21 -0
- metadata +165 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module DpkgTools
|
|
2
|
+
module Package
|
|
3
|
+
module FSMethods
|
|
4
|
+
def create_dir_if_needed(target_path)
|
|
5
|
+
FileUtils.mkdir_p(target_path) unless File.exists?(target_path)
|
|
6
|
+
raise IOError, "the path '#{target_path}' points to a file, so we can't make a directory there." if File.file?(target_path)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'dpkg-tools/package/gem/data'
|
|
2
|
+
require 'dpkg-tools/package/gem/setup'
|
|
3
|
+
require 'dpkg-tools/package/gem/control_files'
|
|
4
|
+
require 'dpkg-tools/package/gem/builder'
|
|
5
|
+
require 'dpkg-tools/package/gem/rake'
|
|
6
|
+
|
|
7
|
+
module DpkgTools
|
|
8
|
+
module Package
|
|
9
|
+
module Gem
|
|
10
|
+
class << self
|
|
11
|
+
def setup_from_path(gem_path, options = {})
|
|
12
|
+
Setup.from_path(gem_path).create_structure
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def setup_from_name(gem_name, options = {})
|
|
16
|
+
setup = Setup.from_name(gem_name)
|
|
17
|
+
unless options[:ignore_dependencies]
|
|
18
|
+
setup.fetch_dependencies.each do |dependency|
|
|
19
|
+
dependency.create_structure
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
setup.create_structure
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def create_builder(path_to_gem_file)
|
|
26
|
+
Builder.from_file_path(path_to_gem_file)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def config_cache(name_version_pair)
|
|
30
|
+
name, version = name_version_pair
|
|
31
|
+
@config_cache ||= {}
|
|
32
|
+
@config_cache[name_version_pair] ||= DpkgTools::Package::Config.new(name, version, :suffix => 'rubygem')
|
|
33
|
+
yield(@config_cache[name_version_pair]) if block_given?
|
|
34
|
+
@config_cache[name_version_pair]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def rubygems_version
|
|
38
|
+
"0.9.4"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require 'rake'
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
require 'rubygems/installer'
|
|
4
|
+
require 'rubygems/doc_manager'
|
|
5
|
+
|
|
6
|
+
require 'fileutils'
|
|
7
|
+
|
|
8
|
+
# module GemBindir
|
|
9
|
+
# class << self
|
|
10
|
+
# def bindir(install_dir = nil)
|
|
11
|
+
#
|
|
12
|
+
# end
|
|
13
|
+
# end
|
|
14
|
+
|
|
15
|
+
module DpkgTools
|
|
16
|
+
module Package
|
|
17
|
+
module Gem
|
|
18
|
+
class Builder < DpkgTools::Package::Builder
|
|
19
|
+
class << self
|
|
20
|
+
include DpkgTools::Package::Gem::GemFormat
|
|
21
|
+
|
|
22
|
+
def from_file_path(gem_file_path)
|
|
23
|
+
format, gem_byte_string = format_and_file_from_file_path(gem_file_path)
|
|
24
|
+
data = Data.new(format, gem_byte_string)
|
|
25
|
+
self.new(data)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def format_and_file_from_file_path(gem_file_path)
|
|
29
|
+
gem_file = File.open(gem_file_path, 'rb')
|
|
30
|
+
gem_byte_string = gem_file.read
|
|
31
|
+
format = format_from_string(gem_byte_string)
|
|
32
|
+
[format, gem_byte_string]
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def config_options
|
|
37
|
+
{:suffix => 'rubygem'}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def gem_byte_string
|
|
41
|
+
data.gem_byte_string
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def create_install_dirs
|
|
45
|
+
create_dir_if_needed(config.gem_install_path)
|
|
46
|
+
create_dir_if_needed(config.bin_install_path)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def override_gem_bindir
|
|
50
|
+
::Gem.module_eval %q{def self.bindir(install_dir = nil) "} + config.bin_install_path + %q{" end}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def install_gem
|
|
54
|
+
override_gem_bindir
|
|
55
|
+
installer = ::Gem::Installer.new(config.gem_path, {:wrappers => true, :env_shebang => true})
|
|
56
|
+
installer.install(false, config.gem_install_path)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# installs RDoc / RI docs
|
|
60
|
+
def install_docs(installed_gem_spec)
|
|
61
|
+
doc_manager = ::Gem::DocManager.new(installed_gem_spec)
|
|
62
|
+
doc_manager.generate_ri
|
|
63
|
+
doc_manager.generate_rdoc
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def build_package_files
|
|
67
|
+
installed_gem_spec = install_gem
|
|
68
|
+
install_docs(installed_gem_spec)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def install_package_files
|
|
72
|
+
sh "chown -R root:root \"#{config.buildroot}\""
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'dpkg-tools/package/gem/control_files/copyright'
|
|
2
|
+
require 'dpkg-tools/package/gem/control_files/changelog'
|
|
3
|
+
require 'dpkg-tools/package/gem/control_files/rakefile'
|
|
4
|
+
|
|
5
|
+
module DpkgTools
|
|
6
|
+
module Package
|
|
7
|
+
module Gem
|
|
8
|
+
module ControlFiles
|
|
9
|
+
class << self
|
|
10
|
+
def classes
|
|
11
|
+
[
|
|
12
|
+
DpkgTools::Package::Gem::ControlFiles::Changelog,
|
|
13
|
+
DpkgTools::Package::ControlFiles::Control,
|
|
14
|
+
DpkgTools::Package::Gem::ControlFiles::Copyright,
|
|
15
|
+
DpkgTools::Package::Gem::ControlFiles::Rakefile,
|
|
16
|
+
DpkgTools::Package::ControlFiles::Rules
|
|
17
|
+
]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module DpkgTools
|
|
2
|
+
module Package
|
|
3
|
+
module Gem
|
|
4
|
+
module ControlFiles
|
|
5
|
+
class Changelog < DpkgTools::Package::ControlFiles::Changelog
|
|
6
|
+
def change_time
|
|
7
|
+
Time.now.rfc822
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def changelog
|
|
11
|
+
"#{config.package_name} (#{config.deb_version(data.debian_revision)}) cp-gutsy; urgency=low\n"\
|
|
12
|
+
" * Packaged up #{data.full_name}\n"\
|
|
13
|
+
" -- Matt Patterson <matt@reprocessed.org> #{self.change_time}\n"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module DpkgTools
|
|
2
|
+
module Package
|
|
3
|
+
module Gem
|
|
4
|
+
module ControlFiles
|
|
5
|
+
class Copyright < DpkgTools::Package::ControlFiles::Copyright
|
|
6
|
+
def license_file
|
|
7
|
+
# first, look for LICENSE or MIT-LICENSE in the gem
|
|
8
|
+
licenses = data.files.select do |file_path|
|
|
9
|
+
(file_path.match(/license/i) || file_path.match(/copying/i)) unless file_path.nil?
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
if licenses.size == 1
|
|
13
|
+
license_path = licenses.first
|
|
14
|
+
license_files = data.file_entries.select do |meta, data|
|
|
15
|
+
meta["path"] == license_path
|
|
16
|
+
end
|
|
17
|
+
license_files.first[1]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module DpkgTools
|
|
2
|
+
module Package
|
|
3
|
+
module Gem
|
|
4
|
+
module ControlFiles
|
|
5
|
+
class Rakefile < DpkgTools::Package::ControlFiles::Rakefile
|
|
6
|
+
def rakefile
|
|
7
|
+
"require 'rubygems'\n" \
|
|
8
|
+
"require 'dpkg-tools'\n" \
|
|
9
|
+
"\n" \
|
|
10
|
+
"DpkgTools::Package::Gem::BuildTasks.new do |t|\n" \
|
|
11
|
+
" t.root_path = File.dirname(Rake.original_dir)\n" \
|
|
12
|
+
" t.gem_path = File.join(Rake.original_dir, '#{config.gem_filename}')\n" \
|
|
13
|
+
"end\n"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
module DpkgTools
|
|
2
|
+
module Package
|
|
3
|
+
module Gem
|
|
4
|
+
class Data < DpkgTools::Package::Data
|
|
5
|
+
class << self
|
|
6
|
+
def resources_dirname
|
|
7
|
+
'gem'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def process_extensions_map(input_hash)
|
|
11
|
+
output_hash = {}
|
|
12
|
+
input_hash.each do |gem_name, value|
|
|
13
|
+
case value
|
|
14
|
+
when Hash
|
|
15
|
+
output_hash[gem_name] = {}
|
|
16
|
+
value.each do |version_key, deps|
|
|
17
|
+
version_key = version_key.to_s
|
|
18
|
+
case deps
|
|
19
|
+
when Array
|
|
20
|
+
output_hash[gem_name][version_key] = deps.collect { |dep| {:name => dep} }
|
|
21
|
+
when String
|
|
22
|
+
output_hash[gem_name][version_key] = [{:name => deps}]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
when Array
|
|
26
|
+
output_hash[gem_name] = {'all' => value.collect { |dep| {:name => dep} }}
|
|
27
|
+
when String
|
|
28
|
+
output_hash[gem_name] = {'all' => [{:name => value}]}
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
output_hash
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def native_extensions_deps_map
|
|
35
|
+
@native_extensions_deps_map ||= process_extensions_map(YAML.load_file(File.join(resources_path, 'gems_to_deps.yml')))
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def native_extension_deps(name, version)
|
|
39
|
+
deps_map = native_extensions_deps_map[name]
|
|
40
|
+
return [] if deps_map.nil?
|
|
41
|
+
deps = deps_map[version]
|
|
42
|
+
deps = deps_map['all'] if deps.nil?
|
|
43
|
+
return [] if deps.nil?
|
|
44
|
+
deps
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
attr_reader :spec, :config, :gem_byte_string
|
|
49
|
+
|
|
50
|
+
def initialize(format, gem_byte_string)
|
|
51
|
+
@format = format
|
|
52
|
+
@gem_byte_string = gem_byte_string
|
|
53
|
+
@spec = format.spec
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def name
|
|
57
|
+
@spec.name
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def version
|
|
61
|
+
@version ||= @spec.version.to_s
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def full_name
|
|
65
|
+
@spec.full_name
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def debian_arch
|
|
69
|
+
return 'all' if @spec.extensions.empty?
|
|
70
|
+
'i386'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def build_dependencies
|
|
74
|
+
[{:name => "rubygems", :requirements => [">= #{Gem.rubygems_version}-1"]},
|
|
75
|
+
{:name => "rake-rubygem", :requirements => [">= 0.7.0-1"]},
|
|
76
|
+
{:name => "dpkg-tools-rubygem", :requirements => [">= #{DpkgTools::VERSION::STRING}-1"]}] \
|
|
77
|
+
+ base_deps \
|
|
78
|
+
+ self.class.native_extension_deps(name, version)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def dependencies
|
|
82
|
+
[{:name => "rubygems", :requirements => [">= #{Gem.rubygems_version}-1"]}] + base_deps
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def summary
|
|
86
|
+
@spec.summary
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def files
|
|
90
|
+
@spec.files
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def file_entries
|
|
94
|
+
@format.file_entries
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
|
|
99
|
+
def base_deps
|
|
100
|
+
return @base_deps unless @base_deps.nil?
|
|
101
|
+
@base_deps = []
|
|
102
|
+
@spec.dependencies.each do |dependency|
|
|
103
|
+
dep_conf = DpkgTools::Package::Config.new(dependency.name, nil, :suffix => 'rubygem')
|
|
104
|
+
entry = {:name => dep_conf.package_name, :requirements => []}
|
|
105
|
+
dependency.version_requirements.as_list.each do |version|
|
|
106
|
+
entry[:requirements] << "#{version}-1"
|
|
107
|
+
end
|
|
108
|
+
@base_deps << entry
|
|
109
|
+
end
|
|
110
|
+
@base_deps
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require 'rubygems/old_format'
|
|
2
|
+
require 'rubygems/format'
|
|
3
|
+
|
|
4
|
+
module DpkgTools::Package::Gem::GemFormat
|
|
5
|
+
def format_from_string(gem_byte_string)
|
|
6
|
+
gem_io = StringIO.new(gem_byte_string)
|
|
7
|
+
return ::Gem::OldFormat.from_io(gem_io) if gem_byte_string[0,20].include?("MD5SUM =")
|
|
8
|
+
::Gem::Format.from_io(gem_io)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module DpkgTools
|
|
2
|
+
module Package
|
|
3
|
+
module Gem
|
|
4
|
+
class BuildTasks < DpkgTools::Package::BuildTasks
|
|
5
|
+
attr_accessor :gem_path, :root_path
|
|
6
|
+
|
|
7
|
+
def check_setup
|
|
8
|
+
raise ArgumentError, "Needs to have gem_path and root_path set" unless @gem_path && @root_path
|
|
9
|
+
DpkgTools::Package::Config.root_path = self.root_path
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def create_builder
|
|
13
|
+
DpkgTools::Package::Gem.create_builder(@gem_path)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def define_tasks
|
|
17
|
+
# build
|
|
18
|
+
task "build-arch" do
|
|
19
|
+
create_builder.build_package
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
task "build-indep" do
|
|
23
|
+
create_builder.build_package
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
task "binary-arch" do
|
|
27
|
+
create_builder.binary_package
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
task "binary-indep" do
|
|
31
|
+
create_builder.binary_package
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
require 'stringio'
|
|
2
|
+
require 'zlib'
|
|
3
|
+
require 'rubygems/package'
|
|
4
|
+
require 'rubygems/specification'
|
|
5
|
+
require 'rubygems/remote_fetcher'
|
|
6
|
+
|
|
7
|
+
require File.join(File.dirname(__FILE__), 'gem_format')
|
|
8
|
+
|
|
9
|
+
module DpkgTools
|
|
10
|
+
module Package
|
|
11
|
+
module Gem
|
|
12
|
+
class Setup < DpkgTools::Package::Setup
|
|
13
|
+
class << self
|
|
14
|
+
include DpkgTools::Package::Gem::GemFormat
|
|
15
|
+
|
|
16
|
+
def write_gem_file(config, gem_byte_string)
|
|
17
|
+
File.open(config.gem_path, 'wb') {|f| f.write(gem_byte_string)}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def most_recent_spec_n_source(specs_n_sources)
|
|
21
|
+
specs_n_sources.select {|spec, source| spec.platform == ::Gem::Platform::RUBY || spec.platform.nil?}.first
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def specs_n_sources_for_name(gem_name)
|
|
25
|
+
::Gem::RemoteInstaller.new.specs_n_sources_matching(gem_name, nil)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def spec_n_source_for_name(gem_name)
|
|
29
|
+
most_recent_spec_n_source(specs_n_sources_for_name(gem_name))
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def most_recent_spec_n_source_satisfying_requirement(requirement, specs_n_sources)
|
|
33
|
+
okay_specs = specs_n_sources.select do |spec, source|
|
|
34
|
+
(spec.platform == ::Gem::Platform::RUBY || spec.platform.nil?) && requirement.satisfied_by?(spec.version)
|
|
35
|
+
end
|
|
36
|
+
okay_specs.first
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def spec_n_source_for_name_and_requirement(gem_name, requirement)
|
|
40
|
+
most_recent_spec_n_source_satisfying_requirement(requirement, specs_n_sources_for_name(gem_name))
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def gem_file_from_uri(uri)
|
|
44
|
+
::Gem::RemoteFetcher.fetcher.fetch_path(uri)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def gem_uri_from_spec_n_source(spec, source_uri)
|
|
48
|
+
source_uri + "/gems/#{spec.full_name}.gem"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def format_and_file_from_path(gem_path)
|
|
52
|
+
gem_byte_string = File.read(gem_path)
|
|
53
|
+
format = format_from_string(gem_byte_string)
|
|
54
|
+
[format, gem_byte_string]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def cache_key_from_spec(spec)
|
|
58
|
+
"#{spec.name}-#{spec.version}"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def from_spec_and_source(spec, source)
|
|
62
|
+
gem_byte_string = gem_file_from_uri(gem_uri_from_spec_n_source(spec, source))
|
|
63
|
+
self.new(DpkgTools::Package::Gem::Data.new(format_from_string(gem_byte_string), gem_byte_string))
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def from_spec_and_source_via_cache(spec, source)
|
|
67
|
+
cache_key = cache_key_from_spec(spec)
|
|
68
|
+
return dependency_cache[cache_key] if dependency_cache.has_key?(cache_key)
|
|
69
|
+
dependency_cache[cache_key] = from_spec_and_source(spec, source)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def from_name(gem_name)
|
|
73
|
+
from_spec_and_source_via_cache(*spec_n_source_for_name(gem_name))
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def from_name_and_requirement(gem_name, requirement)
|
|
77
|
+
from_spec_and_source_via_cache(*spec_n_source_for_name_and_requirement(gem_name, requirement))
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def from_path(gem_path)
|
|
81
|
+
format, gem_byte_string = format_and_file_from_path(gem_path)
|
|
82
|
+
self.new(DpkgTools::Package::Gem::Data.new(format, gem_byte_string))
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def write_orig_tarball(config, gem_byte_string)
|
|
86
|
+
output_io = StringIO.new
|
|
87
|
+
gz_io = Zlib::GzipWriter.new(output_io)
|
|
88
|
+
tar_io = StringIO.new
|
|
89
|
+
::Gem::Package::TarWriter.new(tar_io) do |tar_stream|
|
|
90
|
+
tar_stream.mkdir(config.package_dir_name, 0755)
|
|
91
|
+
tar_stream.add_file("#{config.package_dir_name}/#{config.gem_filename}", 0644) {|f| f.write(gem_byte_string) }
|
|
92
|
+
end
|
|
93
|
+
tar_io.flush
|
|
94
|
+
tar_io.rewind
|
|
95
|
+
gz_io.write(tar_io.read)
|
|
96
|
+
gz_io.finish
|
|
97
|
+
output_io.rewind
|
|
98
|
+
File.open(File.join(config.orig_tarball_path), 'w') do |f|
|
|
99
|
+
f.write(output_io.read)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def dependency_cache
|
|
104
|
+
@dependency_cache ||= {}
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
attr_reader :data, :config
|
|
109
|
+
|
|
110
|
+
def control_file_classes
|
|
111
|
+
DpkgTools::Package::Gem::ControlFiles.classes
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def config_options
|
|
115
|
+
{:suffix => 'rubygem'}
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def fetch_gem_file
|
|
119
|
+
self.class.fetch_gem_file(@source_uri + "/gems/#{@spec.full_name}.gem")
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def write_orig_tarball
|
|
123
|
+
self.class.write_orig_tarball(config, data.gem_byte_string)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def write_gem_file
|
|
127
|
+
self.class.write_gem_file(config, data.gem_byte_string)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def prepare_package
|
|
131
|
+
write_orig_tarball
|
|
132
|
+
write_gem_file
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def fetch_dependency(dependency)
|
|
136
|
+
dep_setup = self.class.from_name_and_requirement(dependency.name, dependency.version_requirements)
|
|
137
|
+
return dep_setup if dep_setup.fetched_dependencies?
|
|
138
|
+
[dep_setup] + dep_setup.fetch_dependencies
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def fetch_dependencies
|
|
142
|
+
deps = data.spec.dependencies.collect do |dependency|
|
|
143
|
+
fetch_dependency(dependency)
|
|
144
|
+
end
|
|
145
|
+
@fetched_dependencies = true
|
|
146
|
+
deps.flatten
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def fetched_dependencies?
|
|
150
|
+
@fetched_dependencies ||= false
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def dependency_cache
|
|
154
|
+
self.class.dependency_cache
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|