thief 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/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
|