gem2arch 0.0.1 → 0.0.2
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.
- checksums.yaml +4 -4
- data/gem2arch.gemspec +2 -2
- data/lib/gem2arch.rb +115 -0
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e32dd8f2bac8f19b6227864c729a0b6a8b98f991
|
4
|
+
data.tar.gz: f1efc05452e0af571b36bfded69f171c0f5dbb29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a6cab8a3bc4ce424f53526a7b3564c136a54d1aac826a1d43252bb281096d8844880aaf889dc8e2907794e9d8f3f33fc5810c8c0335011a3420b38e890b7057
|
7
|
+
data.tar.gz: b8287908ceef0c7329c5aaf1320f315ed50654675ac8e219cdec96f6297d36f3c90247d85ae1b0b088589fdee14361314b03c64680f9304e6a2111abd746ebbc
|
data/gem2arch.gemspec
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
# Variables:
|
5
5
|
s.name = "gem2arch"
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.2"
|
7
7
|
s.description = "A version of gem2arch by crabtw that creates an ArchLinux PKGBUILD from a ruby gem"
|
8
8
|
s.summary = "Creates an ArchLinux PKGBUILD from a ruby gem"
|
9
9
|
s.authors = ["Ari Mizrahi"]
|
@@ -18,5 +18,5 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
20
|
# Dependencies
|
21
|
-
s.add_dependency("net-dns", "~> 0.8.0")
|
21
|
+
#s.add_dependency("net-dns", "~> 0.8.0")
|
22
22
|
end
|
data/lib/gem2arch.rb
CHANGED
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
require 'digest/sha1'
|
3
|
+
|
4
|
+
# Download the gem and return specification information
|
5
|
+
# @params [String] gemname is the name of the gem to download
|
6
|
+
# @params [String] gemver is the version of the gem to download - default nil
|
7
|
+
# @return [Gem::Specification] gem specification object
|
8
|
+
def download( gemname, gemver=nil )
|
9
|
+
# If gem version is not passed set it
|
10
|
+
# to any version greater than 0
|
11
|
+
version = gemver || ">=0"
|
12
|
+
# Get gem requirement object
|
13
|
+
requirement = Gem::Requirement.default
|
14
|
+
# Get gem dependency object
|
15
|
+
depends = Gem::Dependency.new( gemname, version )
|
16
|
+
# Fetch gem specification
|
17
|
+
spec_and_source = Gem::SpecFetcher.fetcher.spec_for_dependency( depends, requirement )
|
18
|
+
# Get gem specification info
|
19
|
+
spec = spec_and_source[0][0][0]
|
20
|
+
# Get source URI
|
21
|
+
source_uri = spec_and_source[0][0][1]
|
22
|
+
# Quit if we don't have a spec, we can't continue without it
|
23
|
+
# it probably means the gem doesn't exist in rubygems.org
|
24
|
+
exit if spec.nil?
|
25
|
+
# Download the .gem file
|
26
|
+
system( "gem fetch #{gemname}" )
|
27
|
+
|
28
|
+
return spec
|
29
|
+
end
|
30
|
+
|
31
|
+
# Hash a file and return it's MD5 or SHA1 value
|
32
|
+
# @params [String] file is spec filename
|
33
|
+
# @params [Symbol] type is :MD5 or :SHA1
|
34
|
+
# @return [String] hash value of passed file parameter
|
35
|
+
def digest( file, type )
|
36
|
+
# Get MD5 || SHA1 object depending on [type]
|
37
|
+
hashv = Digest::MD5.new if type == :MD5
|
38
|
+
hashv = Digest::SHA1.new if type == :SHA1
|
39
|
+
# Open the file and generate hash
|
40
|
+
# in 1024 bit chunks
|
41
|
+
File.open( file ) do |chunks|
|
42
|
+
while buffer = chunks.read(1024)
|
43
|
+
hashv << buffer
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
return hashv.to_s
|
48
|
+
end
|
49
|
+
|
50
|
+
# Build the PKGBUILD file using the downloaded specification
|
51
|
+
# @params [Gem::Specification] spec is gem specification object
|
52
|
+
def build( spec, archdepends=[] )
|
53
|
+
# Set arch=() value of PKGBUILD
|
54
|
+
spec.extensions.empty? ? arch = "'any'" : arch = "'i686' 'x86_64'"
|
55
|
+
# Calculate digest
|
56
|
+
md5sum = digest( "#{spec.full_name}.gem", :MD5 )
|
57
|
+
# Get gem dependencies
|
58
|
+
depends = spec.runtime_dependencies
|
59
|
+
# Modify [Array] depends if it is not empty
|
60
|
+
unless depends.empty?
|
61
|
+
# Break [Array] depends to modify each element
|
62
|
+
depends.map do |dep|
|
63
|
+
# For each dependency we need to modify the comparison
|
64
|
+
# symbol used to be compatible with PKGBUILD
|
65
|
+
dep.requirement.requirements.map do |compare, version|
|
66
|
+
# Modify the comparision symbol for PKGBUILD
|
67
|
+
compare = '>=' if compare == '~>'
|
68
|
+
# Replace the entire string for PKGBUILD
|
69
|
+
archdepends << "'ruby-#{dep.name}#{compare}#{version}'"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Build the gem parameters hash
|
75
|
+
params = {
|
76
|
+
name: spec.name,
|
77
|
+
version: spec.version,
|
78
|
+
website: spec.homepage,
|
79
|
+
description: spec.summary,
|
80
|
+
license: spec.license,
|
81
|
+
arch: arch,
|
82
|
+
md5sum: md5sum,
|
83
|
+
depends: archdepends.join(" ")
|
84
|
+
}
|
85
|
+
|
86
|
+
pkgbuild( params )
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
# Generate the PKGBUILD file
|
92
|
+
# @params [Hash] gem contains all parameters required to generate the PKGBUILD file
|
93
|
+
def pkgbuild( gem )
|
94
|
+
File.open( 'PKGBUILD', 'w' ) do |line|
|
95
|
+
line.puts "pkgname=ruby-#{gem[:name]}"
|
96
|
+
line.puts "_gemname=#{gem[:name]}"
|
97
|
+
line.puts "pkgver=#{gem[:version]}"
|
98
|
+
line.puts "pkgrel=0"
|
99
|
+
line.puts "pkgdesc=\"#{gem[:description]}\""
|
100
|
+
line.puts "arch=(#{gem[:arch]})"
|
101
|
+
line.puts "license=('#{gem[:license]}')"
|
102
|
+
line.puts "makedepends=('ruby')"
|
103
|
+
line.puts "depends=(#{gem[:depends]})"
|
104
|
+
line.puts "url='#{gem[:website]}'"
|
105
|
+
line.puts "source=('http://rubygems.org/downloads/#{gem[:name]}-#{gem[:version]}.gem')"
|
106
|
+
line.puts "md5sums=('#{gem[:md5sum]}')"
|
107
|
+
line.puts "noextract=(#{gem[:name]}-#{gem[:version]}.gem)"
|
108
|
+
|
109
|
+
line.puts "package() {"
|
110
|
+
line.puts "\tcd \"$srcdir\""
|
111
|
+
line.puts "\tlocal _gemdir=\"$(ruby -e 'puts Gem.default_dir')"
|
112
|
+
line.puts "\tgem install --ignore-dependencies --no-user-install -i \"$pkgdir$_gemdir\" -n \"$pkgdir/usr/bin\" $_gemname-$pkgver.gem"
|
113
|
+
line.puts "}"
|
114
|
+
end
|
115
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem2arch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ari Mizrahi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: net-dns
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.8.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.8.0
|
11
|
+
date: 2013-08-01 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
27
13
|
description: A version of gem2arch by crabtw that creates an ArchLinux PKGBUILD from
|
28
14
|
a ruby gem
|
29
15
|
email: codemunchies@gmail.com
|