gem2arch 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|