Narnach-gems 0.1.5 → 0.1.7
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/README.rdoc +14 -2
- data/bin/gems +13 -1
- data/gems.gemspec +2 -2
- data/lib/gems.rb +70 -33
- data/lib/gems_list.rb +30 -0
- metadata +2 -1
data/README.rdoc
CHANGED
@@ -5,8 +5,14 @@ Rails code would not get into dependency issues.
|
|
5
5
|
|
6
6
|
== Recent changes
|
7
7
|
|
8
|
+
=== Version 0.1.7
|
9
|
+
Gem install only installs missing gems; it does not re-install gems.
|
10
|
+
|
11
|
+
=== Version 0.1.6
|
12
|
+
Added gems diff and gems switch commands to make it easy to compare and switch the gems of multiple projects.
|
13
|
+
|
8
14
|
=== Version 0.1.5
|
9
|
-
|
15
|
+
Gems import accepts 'current' as a special file name, which will use the output
|
10
16
|
of 'gem list' instead of a real file. This makes it easy to store the current gem configuration.
|
11
17
|
|
12
18
|
=== Version 0.1.4
|
@@ -50,9 +56,15 @@ Output if 'gems help', with some changes to make them legible in RDoc:
|
|
50
56
|
|
51
57
|
Actions and arguments:
|
52
58
|
install 'name'
|
53
|
-
Install all gems in project 'name'.
|
59
|
+
Install all missing gems in project 'name'.
|
54
60
|
uninstall 'name'
|
55
61
|
Uninstall all gems in project 'name'.
|
62
|
+
diff 'name'
|
63
|
+
See difference between the current gem configuration and that of project 'name'.
|
64
|
+
switch 'name'
|
65
|
+
Switch to the exact gem configuration in project 'name'.
|
66
|
+
This will preserve all shared gems in the current state and in the target
|
67
|
+
project, only installing and uninstalling what is needed.
|
56
68
|
list 'name'
|
57
69
|
List all gems in project 'name'.
|
58
70
|
import 'name' 'file'
|
data/bin/gems
CHANGED
@@ -35,6 +35,12 @@ when 'add'
|
|
35
35
|
gems_config = GemsConfig.new(project)
|
36
36
|
gems_file = ARGV.shift.to_s.strip
|
37
37
|
gems_config.add_gems(gems_file)
|
38
|
+
when 'diff'
|
39
|
+
gems = Gems.new project
|
40
|
+
gems.diff_current
|
41
|
+
when 'switch'
|
42
|
+
gems = Gems.new project
|
43
|
+
gems.switch_from_current
|
38
44
|
else 'help'
|
39
45
|
puts <<-EOS
|
40
46
|
Syntax:
|
@@ -42,9 +48,15 @@ Syntax:
|
|
42
48
|
|
43
49
|
Actions and arguments:
|
44
50
|
install <name>
|
45
|
-
Install all gems in project <name>.
|
51
|
+
Install all missing gems in project <name>.
|
46
52
|
uninstall <name>
|
47
53
|
Uninstall all gems in project <name>.
|
54
|
+
diff <name>
|
55
|
+
See difference between the current gem configuration and that of project <name>.
|
56
|
+
switch <name>
|
57
|
+
Switch to the exact gem configuration in project <name>.
|
58
|
+
This will preserve all shared gems in the current state and in the target
|
59
|
+
project, only installing and uninstalling what is needed.
|
48
60
|
list <name>
|
49
61
|
List all gems in project <name>.
|
50
62
|
import <name> <file>
|
data/gems.gemspec
CHANGED
@@ -3,7 +3,7 @@ Gem::Specification.new do |s|
|
|
3
3
|
s.name = 'gems'
|
4
4
|
s.summary = "Gems is a simple tool to manage sets of RubyGems."
|
5
5
|
s.description = "Gems is a simple tool to manage sets of RubyGems. It can be used to install and uninstall large numbers of gems."
|
6
|
-
s.version = '0.1.
|
6
|
+
s.version = '0.1.7'
|
7
7
|
s.date = '2008-08-19'
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Wes Oldenbeuving"]
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.bindir = "bin"
|
15
15
|
s.executables = %w[gems]
|
16
16
|
s.require_path = "lib"
|
17
|
-
s.files = ['MIT-LICENSE', 'README.rdoc', 'Rakefile', 'bin/gems', 'lib/gems.rb', 'lib/gems_config.rb', 'lib/gems_parser.rb', 'gems.gemspec']
|
17
|
+
s.files = ['MIT-LICENSE', 'README.rdoc', 'Rakefile', 'bin/gems', 'lib/gems.rb', 'lib/gems_config.rb', 'lib/gems_parser.rb', 'gems.gemspec', 'lib/gems_list.rb']
|
18
18
|
s.test_files = []
|
19
19
|
|
20
20
|
# rdoc
|
data/lib/gems.rb
CHANGED
@@ -1,4 +1,12 @@
|
|
1
1
|
require 'gems_config'
|
2
|
+
require 'gems_parser'
|
3
|
+
require 'gems_list'
|
4
|
+
|
5
|
+
class Hash
|
6
|
+
def longest_key_length
|
7
|
+
map{|key, value| key.to_s.size}.max || 0
|
8
|
+
end
|
9
|
+
end
|
2
10
|
|
3
11
|
class Gems
|
4
12
|
attr_reader :project, :gems, :gems_config
|
@@ -9,28 +17,63 @@ class Gems
|
|
9
17
|
@gems = @gems_config.gems
|
10
18
|
end
|
11
19
|
|
20
|
+
def diff_current
|
21
|
+
current_gems = GemsList.new(GemsParser.new('current').gems)
|
22
|
+
project_gems = GemsList.new(gems)
|
23
|
+
not_in_current = project_gems - current_gems
|
24
|
+
in_current = current_gems - project_gems
|
25
|
+
|
26
|
+
puts 'Gems unique to "%s":' % project
|
27
|
+
print_gem_list(not_in_current)
|
28
|
+
puts
|
29
|
+
puts 'Gems unique to the current gems list:'
|
30
|
+
print_gem_list(in_current)
|
31
|
+
end
|
32
|
+
|
12
33
|
def list
|
13
34
|
puts 'Gems in "%s":' % project
|
14
|
-
gems
|
15
|
-
line = "%#{longest_gem_name_length}s %s" % [gemname, versions.join(", ")]
|
16
|
-
if gems_config.options_for(gemname).size > 0
|
17
|
-
line << ' [%s]' % gems_config.options_for(gemname).join(" ")
|
18
|
-
end
|
19
|
-
puts line
|
20
|
-
end
|
35
|
+
print_gem_list(gems)
|
21
36
|
end
|
22
37
|
|
23
38
|
def install
|
24
39
|
puts "Installing all gems and versions in '%s'" % project
|
40
|
+
install_gems_list(GemsList.new(gems) - current_gems_list)
|
41
|
+
end
|
42
|
+
|
43
|
+
def switch_from_current
|
44
|
+
current_gems = current_gems_list
|
45
|
+
project_gems = GemsList.new(gems)
|
46
|
+
|
47
|
+
to_install = project_gems - current_gems
|
48
|
+
to_uninstall = current_gems - project_gems
|
49
|
+
|
50
|
+
install_gems_list(to_install)
|
51
|
+
uninstall_gems_list(to_uninstall)
|
52
|
+
end
|
53
|
+
|
54
|
+
def uninstall
|
55
|
+
puts "Uninstalling all gems and versions in '%s'" % project
|
56
|
+
uninstall_gems_list(GemsList.new(gems))
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def current_gems_list
|
62
|
+
@current_gems_list ||= GemsParser.new('current').gems
|
63
|
+
end
|
64
|
+
|
65
|
+
def install_gems_list(gems)
|
25
66
|
results = {}
|
26
|
-
each_gem_with_version do |gemname,
|
27
|
-
|
28
|
-
|
29
|
-
|
67
|
+
gems.each_gem_with_version do |gemname, versions|
|
68
|
+
versions.each do |version|
|
69
|
+
cmd = "sudo gem install --ignore-dependencies --no-rdoc --no-ri -v %s %s > /dev/null" % [version, gemname]
|
70
|
+
if gems_config.options_for(gemname).size > 0
|
71
|
+
cmd << ' -- %s' % gems_config.options_for(gemname).join(" ")
|
72
|
+
end
|
73
|
+
puts cmd
|
74
|
+
result = system(cmd)
|
75
|
+
results['%s-%s' % [gemname, version]] = result
|
30
76
|
end
|
31
|
-
puts cmd
|
32
|
-
result = system(cmd)
|
33
|
-
results['%s-%s' % [gemname, version]] = result
|
34
77
|
end
|
35
78
|
successful = results.select {|gemname, success| success}
|
36
79
|
unsuccessful = results.select {|gemname, success| !success}
|
@@ -40,11 +83,20 @@ class Gems
|
|
40
83
|
puts "Failed to install: %s" % unsuccessful.map{|ary| ary[0]}.sort.join(", ")
|
41
84
|
end
|
42
85
|
|
43
|
-
def
|
44
|
-
|
86
|
+
def print_gem_list(gems)
|
87
|
+
gems.each do |gemname, versions|
|
88
|
+
line = "%#{gems.longest_key_length}s %s" % [gemname, versions.join(", ")]
|
89
|
+
if gems_config.options_for(gemname).size > 0
|
90
|
+
line << ' [%s]' % gems_config.options_for(gemname).join(" ")
|
91
|
+
end
|
92
|
+
puts line
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def uninstall_gems_list(gems)
|
45
97
|
results = {}
|
46
|
-
each_gem_with_version do |gemname, version|
|
47
|
-
cmd = "sudo gem uninstall --ignore-dependencies --executables -v %s %s" % [version, gemname]
|
98
|
+
gems.each_gem_with_version do |gemname, version|
|
99
|
+
cmd = "sudo gem uninstall --ignore-dependencies --executables -v %s %s > /dev/null" % [version, gemname]
|
48
100
|
puts cmd
|
49
101
|
result = system(cmd)
|
50
102
|
results['%s-%s' % [gemname, version]] = result
|
@@ -56,19 +108,4 @@ class Gems
|
|
56
108
|
puts
|
57
109
|
puts "Failed to uninstall: %s" % unsuccessful.map{|ary| ary[0]}.sort.join(", ")
|
58
110
|
end
|
59
|
-
|
60
|
-
private
|
61
|
-
|
62
|
-
def each_gem_with_version(&block)
|
63
|
-
raise ArgumentError, 'No block provided' unless block
|
64
|
-
gems.each do |gemname, versions|
|
65
|
-
versions.each do |version|
|
66
|
-
block.call(gemname, version)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def longest_gem_name_length
|
72
|
-
gems.map{|ary| ary[0].size}.max
|
73
|
-
end
|
74
111
|
end
|
data/lib/gems_list.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
class GemsList < Hash
|
2
|
+
def initialize(hsh={})
|
3
|
+
hsh.each do |key, value|
|
4
|
+
self[key] = value
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def -(other)
|
9
|
+
diff = GemsList.new
|
10
|
+
self.each do |gem, versions|
|
11
|
+
if other.has_key?(gem)
|
12
|
+
other_versions = other[gem]
|
13
|
+
versions_unique_to_current = versions - other_versions
|
14
|
+
diff[gem] = versions_unique_to_current if versions_unique_to_current.size > 0
|
15
|
+
else
|
16
|
+
diff[gem] = versions
|
17
|
+
end
|
18
|
+
end
|
19
|
+
diff
|
20
|
+
end
|
21
|
+
|
22
|
+
def each_gem_with_version(&block)
|
23
|
+
raise ArgumentError, 'No block provided' unless block
|
24
|
+
self.each do |gemname, versions|
|
25
|
+
versions.each do |version|
|
26
|
+
block.call(gemname, version)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Narnach-gems
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wes Oldenbeuving
|
@@ -31,6 +31,7 @@ files:
|
|
31
31
|
- lib/gems_config.rb
|
32
32
|
- lib/gems_parser.rb
|
33
33
|
- gems.gemspec
|
34
|
+
- lib/gems_list.rb
|
34
35
|
has_rdoc: true
|
35
36
|
homepage: http://www.github.com/Narnach/gems
|
36
37
|
post_install_message:
|