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,112 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'rake'
|
|
3
|
+
|
|
4
|
+
module DpkgTools
|
|
5
|
+
module Package
|
|
6
|
+
class Builder
|
|
7
|
+
include DpkgTools::Package::FSMethods
|
|
8
|
+
|
|
9
|
+
attr_reader :data, :config
|
|
10
|
+
|
|
11
|
+
def initialize(data)
|
|
12
|
+
@data = data
|
|
13
|
+
@config = DpkgTools::Package::Config.new(@data.name, @data.version, config_options)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def config_options
|
|
17
|
+
{}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def architecture_independent?
|
|
21
|
+
@data.architecture_independent?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_intermediate_buildroot
|
|
25
|
+
create_dir_if_needed(config.intermediate_buildroot)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def create_buildroot
|
|
29
|
+
create_dir_if_needed(config.buildroot)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def create_install_dirs
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def build_package_files
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def install_package_files
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def render_template(template)
|
|
42
|
+
conf_file = ERB.new(template, nil, '-').result(data.binding)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def maintainer_script_targets
|
|
46
|
+
names = Dir.entries(config.debian_path).select do |name|
|
|
47
|
+
['postinst.erb', 'preinst.erb', 'postrm.erb', 'prerm.erb'].include?(name)
|
|
48
|
+
end
|
|
49
|
+
names.collect { |name| name[/^(.+)\.erb$/, 1] }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def generate_maintainer_script(script_name)
|
|
53
|
+
template = File.read(File.join(config.debian_path, "#{script_name}.erb"))
|
|
54
|
+
target_path = File.join(config.buildroot_DEBIAN_path, script_name)
|
|
55
|
+
File.open(target_path, 'w') do |f|
|
|
56
|
+
f.write(render_template(template))
|
|
57
|
+
end
|
|
58
|
+
File.chmod(0755, target_path)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def generate_maintainer_scripts
|
|
62
|
+
maintainer_script_targets.each do |target|
|
|
63
|
+
generate_maintainer_script(target)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def create_DEBIAN_dir
|
|
68
|
+
Dir.mkdir(config.buildroot_DEBIAN_path) unless File.directory?(config.buildroot_DEBIAN_path)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# create DEBIAN/* package metadata by running dpkg-gencontrol
|
|
72
|
+
# Note: this assumes that command is run from package base dir
|
|
73
|
+
def create_control_files
|
|
74
|
+
sh "dpkg-gencontrol"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def deb_filename
|
|
78
|
+
config.deb_filename(data.debian_revision, data.debian_arch)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def built_deb_path
|
|
82
|
+
File.join(config.root_path, deb_filename)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# create the .deb binary package by running dpkg-deb --build with the appropriate options
|
|
86
|
+
def create_deb
|
|
87
|
+
sh "dpkg-deb --build \"#{config.buildroot}\" \"#{built_deb_path}\""
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def build_package
|
|
91
|
+
create_buildroot
|
|
92
|
+
create_install_dirs
|
|
93
|
+
build_package_files
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def binary_package
|
|
97
|
+
create_buildroot
|
|
98
|
+
create_install_dirs
|
|
99
|
+
install_package_files
|
|
100
|
+
create_DEBIAN_dir
|
|
101
|
+
generate_maintainer_scripts
|
|
102
|
+
create_control_files
|
|
103
|
+
create_deb
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def remove_build_products
|
|
107
|
+
FileUtils.remove_dir(config.buildroot) if File.exists?(config.buildroot)
|
|
108
|
+
FileUtils.remove_dir(config.intermediate_buildroot) if File.exists?(config.intermediate_buildroot)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
module DpkgTools
|
|
2
|
+
module Package
|
|
3
|
+
class << self
|
|
4
|
+
def config(name_version_pair)
|
|
5
|
+
@config ||= {}
|
|
6
|
+
@config[name_version_pair] ||= DpkgTools::Package::Config.new(*name_version_pair)
|
|
7
|
+
yield(@config[name_version_pair]) if block_given?
|
|
8
|
+
@config[name_version_pair]
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class Config
|
|
13
|
+
class << self
|
|
14
|
+
attr_accessor :root_path
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
attr_reader :name, :version
|
|
18
|
+
|
|
19
|
+
def initialize(name, version, options = {})
|
|
20
|
+
@name = name
|
|
21
|
+
@version = version
|
|
22
|
+
@options = options
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def full_name
|
|
26
|
+
@name + "-" + @version
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def package_name
|
|
30
|
+
@name.downcase.tr("_", "-") + (@options[:suffix].nil? ? '' : "-#{@options[:suffix]}")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def package_dir_name
|
|
34
|
+
File.basename(base_path)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def base_path
|
|
38
|
+
return @options[:base_path] if @options.has_key?(:base_path)
|
|
39
|
+
File.join(root_path, "#{package_name}-#{version}")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def root_path
|
|
43
|
+
return File.dirname(@options[:base_path]) if @options.has_key?(:base_path)
|
|
44
|
+
self.class.root_path
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def debian_path
|
|
48
|
+
File.join(base_path, 'debian')
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def gem_filename
|
|
52
|
+
full_name + '.gem'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def gem_path
|
|
56
|
+
File.join(base_path, gem_filename)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def orig_tarball_path
|
|
60
|
+
base_path + ".orig.tar.gz"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def buildroot
|
|
64
|
+
File.join(debian_path, 'tmp')
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def intermediate_buildroot
|
|
68
|
+
File.join(base_path, 'dpkg-tools-tmp')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def bin_install_path
|
|
72
|
+
File.join(buildroot, 'usr/bin')
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def gem_install_path
|
|
76
|
+
File.join(buildroot, 'usr/lib/ruby/gems/1.8')
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def etc_install_path
|
|
80
|
+
File.join(buildroot, 'etc')
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def buildroot_DEBIAN_path
|
|
84
|
+
File.join(buildroot, 'DEBIAN')
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def deb_filename(deb_revision, deb_arch)
|
|
88
|
+
"#{package_name}_#{deb_version(deb_revision)}_#{deb_arch}.deb"
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def deb_version(deb_revision)
|
|
92
|
+
"#{version}-#{deb_revision}"
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'dpkg-tools/package/control_files/base'
|
|
2
|
+
require 'dpkg-tools/package/control_files/control'
|
|
3
|
+
require 'dpkg-tools/package/control_files/copyright'
|
|
4
|
+
require 'dpkg-tools/package/control_files/changelog'
|
|
5
|
+
require 'dpkg-tools/package/control_files/rules'
|
|
6
|
+
require 'dpkg-tools/package/control_files/rakefile'
|
|
7
|
+
|
|
8
|
+
module DpkgTools
|
|
9
|
+
module Package
|
|
10
|
+
module ControlFiles
|
|
11
|
+
class << self
|
|
12
|
+
def classes
|
|
13
|
+
[
|
|
14
|
+
DpkgTools::Package::ControlFiles::Changelog,
|
|
15
|
+
DpkgTools::Package::ControlFiles::Control,
|
|
16
|
+
DpkgTools::Package::ControlFiles::Copyright,
|
|
17
|
+
DpkgTools::Package::ControlFiles::Rakefile,
|
|
18
|
+
DpkgTools::Package::ControlFiles::Rules
|
|
19
|
+
]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module DpkgTools
|
|
2
|
+
module Package
|
|
3
|
+
module ControlFiles
|
|
4
|
+
class Base
|
|
5
|
+
class << self
|
|
6
|
+
def check_target_dir(target_dir_path)
|
|
7
|
+
Dir.mkdir(target_dir_path) unless File.exists?(target_dir_path)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def write(file_path, contents)
|
|
11
|
+
check_target_dir(File.dirname(file_path))
|
|
12
|
+
File.open(file_path, 'w') do |f|
|
|
13
|
+
f.write(contents)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def write_executable(file_path, contents)
|
|
18
|
+
self.write(file_path, contents)
|
|
19
|
+
File.chmod(0755, file_path)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def filename
|
|
23
|
+
'base'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def formatter_class
|
|
27
|
+
BaseFormatter
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
attr_reader :data, :config, :formatter
|
|
32
|
+
|
|
33
|
+
def initialize(data, config)
|
|
34
|
+
@data = data
|
|
35
|
+
@config = config
|
|
36
|
+
@formatter = self.class.formatter_class.new(self)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def executable?
|
|
40
|
+
false
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def filename
|
|
44
|
+
self.class.filename
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def file_path
|
|
48
|
+
File.join(@config.debian_path, filename)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def to_s
|
|
52
|
+
formatter.build
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def write
|
|
56
|
+
write_method = executable? ? :write_executable : :write
|
|
57
|
+
self.class.send(write_method, file_path, self.to_s)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def needs_reset?
|
|
61
|
+
return true unless File.exist?(file_path)
|
|
62
|
+
File.read(file_path) != self.to_s
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
class BaseFormatter
|
|
67
|
+
attr_reader :metadata, :output
|
|
68
|
+
|
|
69
|
+
def initialize(metadata)
|
|
70
|
+
@metadata = metadata
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module DpkgTools
|
|
2
|
+
module Package
|
|
3
|
+
module ControlFiles
|
|
4
|
+
class Changelog < DpkgTools::Package::ControlFiles::Base
|
|
5
|
+
class << self
|
|
6
|
+
def filename
|
|
7
|
+
'changelog'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def formatter_class
|
|
11
|
+
ChangelogFormatter
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class ChangelogFormatter < DpkgTools::Package::ControlFiles::BaseFormatter
|
|
17
|
+
def build
|
|
18
|
+
metadata.changelog
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
module DpkgTools
|
|
2
|
+
module Package
|
|
3
|
+
module ControlFiles
|
|
4
|
+
class Control < DpkgTools::Package::ControlFiles::Base
|
|
5
|
+
class << self
|
|
6
|
+
def filename
|
|
7
|
+
'control'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def formatter_class
|
|
11
|
+
ControlFormatter
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Source: package-name
|
|
16
|
+
def source
|
|
17
|
+
config.package_name
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Maintainer: name/email address
|
|
21
|
+
def maintainer
|
|
22
|
+
["Matt Patterson", "matt@reprocessed.org"]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Section: hardwired to 'libs' for now
|
|
26
|
+
def section
|
|
27
|
+
'libs'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Priority: hardwired to 'optional' for now
|
|
31
|
+
def priority
|
|
32
|
+
'optional'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Build-Depends: build-time package deps
|
|
36
|
+
def build_depends
|
|
37
|
+
data.build_dependencies
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Standards-Version: the version we currently implement
|
|
41
|
+
def standards_version
|
|
42
|
+
DpkgTools::Package.standards_version
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Package: package name for binary .deb
|
|
46
|
+
def package
|
|
47
|
+
config.package_name
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Architecture: Binary package's architecture
|
|
51
|
+
def architecture
|
|
52
|
+
data.debian_arch
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Essential: Hardwired to 'no' because nothing but Debian/Ubuntu base packages are essential
|
|
56
|
+
def essential
|
|
57
|
+
"no"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Depends: install- and run-time package deps
|
|
61
|
+
def depends
|
|
62
|
+
data.dependencies
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Description: We only return the summary for now
|
|
66
|
+
def description
|
|
67
|
+
data.summary
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
class ControlFormatter < DpkgTools::Package::ControlFiles::BaseFormatter
|
|
72
|
+
def source_field_names
|
|
73
|
+
[:source, :maintainer, :uploaders, :section, :priority,
|
|
74
|
+
:build_depends, :build_depends_indep, :build_conflicts,
|
|
75
|
+
:build_conflicts_indep, :standards_version]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def binary_field_names
|
|
79
|
+
[:package, :architecture, :section, :priority, :essential,
|
|
80
|
+
:depends, :recommends, :suggests, :enhances, :pre_depends,
|
|
81
|
+
:description]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def field_names_map
|
|
85
|
+
{:source => "Source", :maintainer => "Maintainer", :uploaders => "Uploaders",
|
|
86
|
+
:section => "Section", :priority => "Priority", :build_depends => "Build-Depends",
|
|
87
|
+
:build_depends_indep => "Build-Depends-Indep", :build_conflicts => "Build-Conflicts",
|
|
88
|
+
:build_conflicts_indep => "Build-Conflicts-Indep", :standards_version => "Standards-Version",
|
|
89
|
+
:package => "Package", :architecture => "Architecture", :essential => "Essential",
|
|
90
|
+
:depends => "Depends", :recommends => "Recommends", :suggests => "Suggests",
|
|
91
|
+
:enhances => "Enhances", :pre_depends => "Pre-Depends", :description => "Description"}
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Dynamically define methods to handle dependency lines (they're all the same bar the name...)
|
|
95
|
+
[:build_depends, :build_depends_indep, :build_conflicts, :build_conflicts_indep,
|
|
96
|
+
:depends, :recommends, :suggests, :enhances, :pre_depends].each do |field_name|
|
|
97
|
+
define_method(field_name) {depends_line(field_name)}
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# generate the Maintainer line
|
|
101
|
+
def maintainer
|
|
102
|
+
"Maintainer: #{metadata.maintainer[0]} <#{metadata.maintainer[1]}>"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def build
|
|
106
|
+
@output = []
|
|
107
|
+
# Source 'paragraph'
|
|
108
|
+
source_field_names.each {|field_name| process_field(field_name)}
|
|
109
|
+
|
|
110
|
+
# line break to make new debian/control 'paragraph'
|
|
111
|
+
output << ""
|
|
112
|
+
|
|
113
|
+
# Binary 'paragraph'
|
|
114
|
+
binary_field_names.each {|field_name| process_field(field_name)}
|
|
115
|
+
|
|
116
|
+
# required final newline
|
|
117
|
+
output << ""
|
|
118
|
+
output.join("\n")
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
private
|
|
122
|
+
|
|
123
|
+
def process_field(field_name)
|
|
124
|
+
if metadata.respond_to?(field_name)
|
|
125
|
+
if self.respond_to?(field_name)
|
|
126
|
+
output << self.send(field_name)
|
|
127
|
+
else
|
|
128
|
+
output << "#{field_names_map[field_name]}: #{metadata.send(field_name)}"
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def deps_string(dependencies)
|
|
134
|
+
deps = []
|
|
135
|
+
dependencies.each do |dependency|
|
|
136
|
+
reqs = dependency.has_key?(:requirements) ? dependency[:requirements].collect {|req| "(#{req})"} : []
|
|
137
|
+
deps << ([dependency[:name]] + reqs).join(" ")
|
|
138
|
+
end
|
|
139
|
+
deps.join(", ")
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def depends_line(field_name)
|
|
143
|
+
"#{field_names_map[field_name]}: #{deps_string(metadata.send(field_name))}"
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|