thief 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/bin/thief +2 -0
- data/lib/thief/version.rb +1 -1
- data/lib/thief.rb +92 -2
- data/thief.gemspec +3 -1
- metadata +29 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61f31c07596c41f10ef2cd0f8f6f1ea6b71d07a0
|
4
|
+
data.tar.gz: a79e94030488d115ffe078176cb8f36c36199ee2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 08b9e9810ed5a4a8052f4b15c479e8ec8ff8afa38fe5911e9ba9e0a3e996e67b5fcf5b94109c693dc372b70c5a7172692a9e15d5a715c40f8d571fa33f55f20c
|
7
|
+
data.tar.gz: 3c234c22141fc847eb983f7f7acb2d7ba5975f345e2ea5a2cb108a9b092666ab5f558d79c7814d927761e3e3b8cf47ca9f5b038bee55ddfbd65dbe60456e1fa0
|
data/bin/thief
CHANGED
data/lib/thief/version.rb
CHANGED
data/lib/thief.rb
CHANGED
@@ -1,5 +1,95 @@
|
|
1
|
-
require
|
1
|
+
require 'thief/version'
|
2
|
+
require 'parallel'
|
3
|
+
require 'ruby-progressbar'
|
2
4
|
|
3
5
|
module Thief
|
4
|
-
|
6
|
+
class << self
|
7
|
+
def install
|
8
|
+
gemfile = resolve_gemfile
|
9
|
+
gems = parse_gemfile(gemfile)
|
10
|
+
Parallel.map(gems, in_processes: cpu_count, progress: 'Getting gems') do |gem|
|
11
|
+
install_gem(gem)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def install_gem(gem)
|
18
|
+
cmd = "gem install #{gem[:gem]}"
|
19
|
+
cmd << " -v '#{gem[:version]}'" if gem[:version]
|
20
|
+
cmd << ' --no-verbose -q --no-rdoc --no-ri --conservative --minimal-deps'
|
21
|
+
system cmd
|
22
|
+
end
|
23
|
+
|
24
|
+
def parse_gemfile(gemfile)
|
25
|
+
result = []
|
26
|
+
line_num = 0
|
27
|
+
File.open(gemfile).each do |line|
|
28
|
+
line_num += 1
|
29
|
+
parse_line(result, line, line_num)
|
30
|
+
end
|
31
|
+
result
|
32
|
+
end
|
33
|
+
|
34
|
+
def parse_line(result, line, num)
|
35
|
+
line = line.strip
|
36
|
+
if line.include?(':path =>') || line.include?('path: ')
|
37
|
+
puts "WARNING: Skipping local: #{line}"
|
38
|
+
return
|
39
|
+
end
|
40
|
+
if line.include?('#')
|
41
|
+
line, _ = line.split('#')
|
42
|
+
end
|
43
|
+
if line.start_with?('gem')
|
44
|
+
gem, version = line.gsub(/['"]/, '').split(',')
|
45
|
+
gem_def = { gem: gem.gsub(/^gem\s+/, '').strip }
|
46
|
+
if version && version.include?('require')
|
47
|
+
version.gsub!(/:?require.+/, '').strip
|
48
|
+
end
|
49
|
+
if version && version.strip.length > 0
|
50
|
+
gem_def[:version] = version.strip
|
51
|
+
end
|
52
|
+
result << gem_def
|
53
|
+
end
|
54
|
+
rescue => e
|
55
|
+
puts "WARNING: Could not parse line: #{num}: #{line}: #{e}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def resolve_gemfile
|
59
|
+
gemfile_path = ARGV[0] || 'Gemfile'
|
60
|
+
if gemfile_path.start_with?('~') || gemfile_path.start_with?('/')
|
61
|
+
gemfile = File.expand_path(gemfile_path)
|
62
|
+
else
|
63
|
+
gemfile = File.join(Dir.pwd, gemfile_path)
|
64
|
+
end
|
65
|
+
puts "Running thief install for: #{gemfile}"
|
66
|
+
check_gemfile(gemfile)
|
67
|
+
gemfile
|
68
|
+
end
|
69
|
+
|
70
|
+
def check_gemfile(gemfile)
|
71
|
+
unless File.exist?(gemfile)
|
72
|
+
puts 'Run thief in a directory that contains a Gemfile'
|
73
|
+
exit 1
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def cpu_count
|
78
|
+
case RbConfig::CONFIG['host_os']
|
79
|
+
when /darwin9/
|
80
|
+
`hwprefs cpu_count`.to_i
|
81
|
+
when /darwin/
|
82
|
+
((`which hwprefs` != '') ? `hwprefs thread_count` : `sysctl -n hw.ncpu`).to_i
|
83
|
+
when /linux/
|
84
|
+
`cat /proc/cpuinfo | grep processor | wc -l`.to_i
|
85
|
+
when /freebsd/
|
86
|
+
`sysctl -n hw.ncpu`.to_i
|
87
|
+
when /mswin|mingw/
|
88
|
+
require 'win32ole'
|
89
|
+
wmi = WIN32OLE.connect('winmgmts://')
|
90
|
+
cpu = wmi.ExecQuery('select NumberOfCores from Win32_Processor')
|
91
|
+
cpu.to_enum.first.NumberOfCores
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
5
95
|
end
|
data/thief.gemspec
CHANGED
@@ -14,10 +14,12 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
spec.executables =
|
17
|
+
spec.executables = ['thief']
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_runtime_dependency 'parallel'
|
22
|
+
spec.add_runtime_dependency 'ruby-progressbar'
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.6"
|
22
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
25
|
spec.add_development_dependency "rspec"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thief
|
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
|
- Tomas Varaneckas
|
@@ -10,6 +10,34 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: parallel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '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'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ruby-progressbar
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: bundler
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|