debeasy 0.0.2 → 0.0.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/debeasy.gemspec +1 -0
- data/lib/debeasy/package.rb +29 -7
- data/lib/debeasy/version.rb +1 -1
- metadata +17 -1
data/debeasy.gemspec
CHANGED
data/lib/debeasy/package.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
require 'libarchive'
|
2
|
+
require 'filemagic'
|
2
3
|
|
3
4
|
module Debeasy
|
5
|
+
class Error < RuntimeError; end
|
6
|
+
class NotAPackageError < Error; end
|
7
|
+
|
4
8
|
class Package
|
5
9
|
|
6
|
-
attr_reader :path, :
|
7
|
-
attr_reader :control_file_contents
|
10
|
+
attr_reader :path, :package_file
|
11
|
+
attr_reader :control_file_contents, :filelist
|
8
12
|
attr_reader :preinst_contents, :prerm_contents
|
9
13
|
attr_reader :postinst_contents, :postrm_contents
|
10
14
|
|
@@ -15,8 +19,10 @@ module Debeasy
|
|
15
19
|
|
16
20
|
def initialize(path)
|
17
21
|
@path = path
|
18
|
-
|
22
|
+
raise NotAPackageError, "#{path} is not a Debian package" unless is_package_file?
|
23
|
+
@package_file = Archive.read_open_filename(path)
|
19
24
|
@fields = {}
|
25
|
+
@filelist = []
|
20
26
|
extract_files
|
21
27
|
parse_control_file
|
22
28
|
end
|
@@ -33,13 +39,23 @@ module Debeasy
|
|
33
39
|
|
34
40
|
private
|
35
41
|
|
36
|
-
|
37
|
-
|
42
|
+
def is_package_file?
|
43
|
+
fm = FileMagic.new
|
44
|
+
if fm.file(@path) =~ /Debian binary package/
|
45
|
+
true
|
46
|
+
else
|
47
|
+
false
|
48
|
+
end
|
49
|
+
end
|
38
50
|
|
51
|
+
# Poke inside the package to find the control file,
|
52
|
+
# the pre/post install scripts, and a list of
|
53
|
+
# all the files it will deploy.
|
54
|
+
|
39
55
|
def extract_files
|
40
|
-
while file = @
|
56
|
+
while file = @package_file.next_header
|
41
57
|
if file.pathname == "control.tar.gz"
|
42
|
-
control_tar_gz = Archive.read_open_memory(@
|
58
|
+
control_tar_gz = Archive.read_open_memory(@package_file.read_data)
|
43
59
|
while control_entry = control_tar_gz.next_header
|
44
60
|
case control_entry.pathname
|
45
61
|
when "./control"
|
@@ -55,6 +71,12 @@ module Debeasy
|
|
55
71
|
end
|
56
72
|
end
|
57
73
|
end
|
74
|
+
if file.pathname == "data.tar.gz"
|
75
|
+
data_tar_gz = Archive.read_open_memory(@package_file.read_data)
|
76
|
+
while data_entry = data_tar_gz.next_header
|
77
|
+
@filelist << data_entry.pathname.sub(/^\./, "")
|
78
|
+
end
|
79
|
+
end
|
58
80
|
end
|
59
81
|
end
|
60
82
|
|
data/lib/debeasy/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: debeasy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -59,6 +59,22 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: ruby-filemagic
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
62
78
|
description: ! "Debeasy is a simple gem that allows you to\n programmatically
|
63
79
|
read Debian packages with very\n little effort."
|
64
80
|
email:
|