runcoderun-gem_sync 0.5.15 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/LICENSE +22 -0
- data/README.txt +1 -1
- data/Rakefile +17 -12
- data/VERSION +1 -0
- data/bin/gem_sync +5 -3
- data/examples/example_helper.rb +30 -0
- data/examples/rcr/gem_parser_example.rb +121 -0
- data/examples/rcr/gem_sync_example.rb +100 -0
- data/examples/rcr/option_parsing_example.rb +22 -0
- data/gem_sync.gemspec +46 -18
- data/lib/rcr/gem_parser.rb +42 -0
- data/lib/rcr/gem_sync.rb +64 -82
- data/lib/rcr/option_parsing.rb +35 -0
- data/lib/runcoderun_gems.txt +80 -72
- metadata +33 -28
- data/spec/gem_sync_spec.rb +0 -139
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
pkg
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2008 Relevance, Inc.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.txt
CHANGED
@@ -14,7 +14,7 @@ sudo gem install runcoderun-gem_sync --source http://gems.github.com
|
|
14
14
|
|
15
15
|
(The MIT License)
|
16
16
|
|
17
|
-
Copyright (c)
|
17
|
+
Copyright (c) 2009 Relevance, Inc.
|
18
18
|
|
19
19
|
Permission is hereby granted, free of charge, to any person obtaining
|
20
20
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -1,18 +1,21 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require '
|
3
|
-
require './lib/rcr/gem_sync.rb'
|
4
|
-
gem "spicycode-micronaut"
|
5
|
-
require 'micronaut'
|
2
|
+
require 'rake'
|
6
3
|
require 'micronaut/rake_task'
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
5
|
+
begin
|
6
|
+
require 'jeweler'
|
7
|
+
Jeweler::Tasks.new do |gem|
|
8
|
+
gem.name = "gem_sync"
|
9
|
+
gem.summary = %Q{gem_sync}
|
10
|
+
gem.description = %Q{Tool to install rubygems for RunCodeRun, though it could be used to bootstrap your own machines as well.}
|
11
|
+
gem.email = "rob@runcoderun.com"
|
12
|
+
gem.homepage = "http://github.com/runcoderun/gem_sync"
|
13
|
+
gem.authors = ["Rob Sanheim"]
|
14
|
+
gem.add_development_dependency "spicycode-micronaut"
|
15
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
16
|
+
end
|
17
|
+
rescue LoadError
|
18
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
16
19
|
end
|
17
20
|
|
18
21
|
Micronaut::RakeTask.new(:examples)
|
@@ -31,3 +34,5 @@ desc 'Load the library in an IRB session'
|
|
31
34
|
task :console do
|
32
35
|
sh %(irb -r lib/rcr/gem_sync.rb)
|
33
36
|
end
|
37
|
+
|
38
|
+
task :default => [:check_dependencies, :examples]
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.1.0
|
data/bin/gem_sync
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
lib_path = File.join(File.dirname(__FILE__), *%w[.. lib])
|
3
|
+
$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
|
3
4
|
|
4
|
-
|
5
|
-
|
5
|
+
require 'rcr/gem_sync'
|
6
|
+
|
7
|
+
Rcr::GemSync.new(ARGV).sync
|
@@ -0,0 +1,30 @@
|
|
1
|
+
lib_path = File.expand_path(File.dirname(__FILE__) + "/../lib")
|
2
|
+
$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
gem "spicycode-micronaut"
|
6
|
+
gem "mocha"
|
7
|
+
require 'micronaut'
|
8
|
+
require 'mocha'
|
9
|
+
require 'log_buddy'
|
10
|
+
require 'rcr/gem_sync'
|
11
|
+
|
12
|
+
LogBuddy.init
|
13
|
+
|
14
|
+
def not_in_editor?
|
15
|
+
['TM_MODE', 'EMACS', 'VIM'].all? { |k| !ENV.has_key?(k) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def in_runcoderun?
|
19
|
+
ENV["RUN_CODE_RUN"]
|
20
|
+
end
|
21
|
+
|
22
|
+
Micronaut.configure do |c|
|
23
|
+
c.formatter = :documentation if in_runcoderun?
|
24
|
+
c.alias_example_to :fit, :focused => true
|
25
|
+
c.alias_example_to :xit, :disabled => true
|
26
|
+
c.mock_with :mocha
|
27
|
+
c.color_enabled = not_in_editor?
|
28
|
+
c.filter_run :focused => true
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'examples/example_helper'
|
2
|
+
|
3
|
+
describe Rcr::GemParser do
|
4
|
+
|
5
|
+
describe "converting a gem list" do
|
6
|
+
it "parses gems without a version" do
|
7
|
+
list = %[wirble]
|
8
|
+
gems = Rcr::GemParser.convert_gem_list(list)
|
9
|
+
gems[0].name.should == "wirble"
|
10
|
+
gems[0].version.should == nil
|
11
|
+
end
|
12
|
+
|
13
|
+
it "parses okay with commented lines" do
|
14
|
+
list = %[# here is a comment
|
15
|
+
# and another
|
16
|
+
|
17
|
+
xml-simple (1.0.11)]
|
18
|
+
gems = Rcr::GemParser.convert_gem_list(list)
|
19
|
+
gems.size.should == 1
|
20
|
+
end
|
21
|
+
|
22
|
+
it "parses gem list" do
|
23
|
+
list = %[wirble (0.1.2)
|
24
|
+
xml-simple (1.0.11)
|
25
|
+
ZenTest (3.10.0, 3.9.2, 3.9.1, 3.8.0, 3.6.0)]
|
26
|
+
gems = Rcr::GemParser.convert_gem_list(list)
|
27
|
+
gems[0].name.should == "wirble"
|
28
|
+
gems[0].version.should == "0.1.2"
|
29
|
+
gems[1].name.should == "xml-simple"
|
30
|
+
gems[1].version.should == "1.0.11"
|
31
|
+
gems[2..-1].each { |gem| gem.name.should == "ZenTest"}
|
32
|
+
gems[2].version.should == "3.10.0"
|
33
|
+
gems[3].version.should == "3.9.2"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "can use version strings" do
|
37
|
+
list = %[do_sqlite3 (<= 0.9.8)]
|
38
|
+
gems = Rcr::GemParser.convert_gem_list(list)
|
39
|
+
gems.first.version.should == '<= 0.9.8'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "parsing platforms" do
|
44
|
+
it "is parses a single platform" do
|
45
|
+
list = %[rambow_likes_gerbils (<= 7.3.2) +ruby186]
|
46
|
+
gem = Rcr::GemParser.convert_gem_list(list).first
|
47
|
+
gem.platforms.should == %w{ruby186}
|
48
|
+
end
|
49
|
+
|
50
|
+
it "parses multiple platforms" do
|
51
|
+
list = %[some-gem-foo (<= 7.3.2) +ruby186 +jruby130]
|
52
|
+
gem = Rcr::GemParser.convert_gem_list(list).first
|
53
|
+
gem.platforms.should == %w{ruby186 jruby130}
|
54
|
+
end
|
55
|
+
|
56
|
+
it "parses platforms with dashes and underscores" do
|
57
|
+
list = %[rambow_likes_gerbils (1.0, 2.0) +ruby-186 +jruby_130]
|
58
|
+
gem = Rcr::GemParser.convert_gem_list(list).first
|
59
|
+
gem.platforms.should == %w{ruby-186 jruby_130}
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "parsing versions" do
|
64
|
+
it "parses without a version" do
|
65
|
+
versions = Rcr::GemParser.parse_versions("foo")
|
66
|
+
versions[0].should == nil
|
67
|
+
end
|
68
|
+
|
69
|
+
it "parses single version" do
|
70
|
+
versions = Rcr::GemParser.parse_versions("foo (1.0.10)")
|
71
|
+
versions[0].should == "1.0.10"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "parses single digit version" do
|
75
|
+
versions = Rcr::GemParser.parse_versions("echoe (3)")
|
76
|
+
versions[0].should == "3"
|
77
|
+
end
|
78
|
+
|
79
|
+
it "parses four digit versions" do
|
80
|
+
versions = Rcr::GemParser.parse_versions("fiveruns-memcache-client (1.5.0.3)")
|
81
|
+
versions[0].should == "1.5.0.3"
|
82
|
+
end
|
83
|
+
|
84
|
+
it "parses with multiple versions" do
|
85
|
+
versions = Rcr::GemParser.parse_versions("foo (1.0.10, 1.0.11)")
|
86
|
+
versions[0].should == "1.0.10"
|
87
|
+
versions[1].should == "1.0.11"
|
88
|
+
end
|
89
|
+
|
90
|
+
it "parses gems with numbers in the name" do
|
91
|
+
Rcr::GemParser.parse_versions("open4 (0.9.6)")[0].should == "0.9.6"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "parsing gem names" do
|
96
|
+
it "returns nil for comments" do
|
97
|
+
Rcr::GemParser.parse_name("# I hate factory-girl").should be_nil
|
98
|
+
end
|
99
|
+
|
100
|
+
it "returns nil for empty lines" do
|
101
|
+
Rcr::GemParser.parse_name(" ").should be_nil
|
102
|
+
end
|
103
|
+
|
104
|
+
it "parses gem name without versions" do
|
105
|
+
Rcr::GemParser.parse_name("factory-girl").should == "factory-girl"
|
106
|
+
end
|
107
|
+
|
108
|
+
it "parses simple gem name" do
|
109
|
+
Rcr::GemParser.parse_name("daemons (1.0.10)").should == "daemons"
|
110
|
+
end
|
111
|
+
|
112
|
+
it "parses name with dashes" do
|
113
|
+
Rcr::GemParser.parse_name("diff-lcs (1.0.10)").should == "diff-lcs"
|
114
|
+
end
|
115
|
+
|
116
|
+
it "parses name with underscores" do
|
117
|
+
Rcr::GemParser.parse_name("spec_converter_foo (1.0.10)").should == "spec_converter_foo"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'examples/example_helper'
|
2
|
+
|
3
|
+
describe Rcr::GemSync do
|
4
|
+
|
5
|
+
describe "creating a gem_sync" do
|
6
|
+
it "saves github gem list source" do
|
7
|
+
Rcr::GemSync.new(["--github"]).gem_list.should == Rcr::GemSync::RCR_GITHUB_GEM_LIST
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "sync" do
|
12
|
+
it "should read gem list, install each gem, ..." do
|
13
|
+
gem_sync = Rcr::GemSync.new(["--github"])
|
14
|
+
gem_sync.expects(:read_gem_list)
|
15
|
+
gem_sync.expects(:parse_gems)
|
16
|
+
gem_sync.expects(:install_gems)
|
17
|
+
gem_sync.sync
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "install_gems" do
|
22
|
+
it "should iterate over each gem, and install unless already installed" do
|
23
|
+
gem_sync = Rcr::GemSync.new(["--github"])
|
24
|
+
gem_sync.expects(:read_gem_list).returns(<<-EOL)
|
25
|
+
gem1 (1.0.0)
|
26
|
+
gem2 (1.0.0)
|
27
|
+
EOL
|
28
|
+
gem_sync.stubs(:installed?).returns(true, false)
|
29
|
+
gem_sync.expects(:install!).once
|
30
|
+
gem_sync.sync
|
31
|
+
end
|
32
|
+
|
33
|
+
it "shoud do nothing if the platform does not match" do
|
34
|
+
gem_sync = Rcr::GemSync.new(["-p ruby191"])
|
35
|
+
gem_sync.expects(:read_gem_list).returns(<<-EOL)
|
36
|
+
gem1 (1.0.0) +jruby130
|
37
|
+
EOL
|
38
|
+
gem_sync.expects(:install!).never
|
39
|
+
gem_sync.sync
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "install!" do
|
44
|
+
it "should try installing as rubyforge first" do
|
45
|
+
gem = OpenStruct.new(:name => "foo", :version => "1.0.0")
|
46
|
+
gem_sync = Rcr::GemSync.new
|
47
|
+
gem_sync.expects(:run).with("gem install foo --no-ri --no-rdoc --version 1.0.0").returns(true)
|
48
|
+
gem_sync.install!(gem)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should fall back to github if not found on rubyforge" do
|
52
|
+
gem = OpenStruct.new(:name => "johndoe-foo", :version => "1.0.0")
|
53
|
+
gem_sync = Rcr::GemSync.new
|
54
|
+
gem_sync.expects(:run).with("gem install johndoe-foo --no-ri --no-rdoc --version 1.0.0").returns(false)
|
55
|
+
gem_sync.expects(:run).with("gem install johndoe-foo --no-ri --no-rdoc --version 1.0.0 --source http://gems.github.com")
|
56
|
+
gem_sync.install!(gem)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "platform_matches?" do
|
61
|
+
it "should return true if there is no platform" do
|
62
|
+
Rcr::GemSync.new.platform_matches?(OpenStruct.new).should == true
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return false gem sync and gem platform do not match" do
|
66
|
+
gem_sync = Rcr::GemSync.new(["-p ruby191"])
|
67
|
+
gem_sync.platform_matches?(OpenStruct.new(:platforms => ["jruby130"])).should == false
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should return true if gem platform and current platform match" do
|
71
|
+
gem_sync = Rcr::GemSync.new(["-p ruby191"])
|
72
|
+
gem_sync.platform_matches?(OpenStruct.new(:platforms => ["ruby191"])).should == true
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should return if gem platforms includes the current platform" do
|
76
|
+
gem_sync = Rcr::GemSync.new(["-p ruby191"])
|
77
|
+
gem_sync.platform_matches?(OpenStruct.new(:platforms => ["jruby130", "ruby191"])).should == true
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "read gem list" do
|
82
|
+
it "should read the gem list" do
|
83
|
+
gem_sync = Rcr::GemSync.new(["--github"])
|
84
|
+
gem_sync.expects(:open).with(Rcr::GemSync::RCR_GITHUB_GEM_LIST).returns(StringIO.new)
|
85
|
+
gem_sync.read_gem_list
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "failed installation" do
|
90
|
+
xit "should skip the gem and move on if failed due to permission denied" do
|
91
|
+
out = "Permission denied - /opt/local/lib/ruby/gems/1.8/cache/activesupport-1.4.4.gem"
|
92
|
+
end
|
93
|
+
|
94
|
+
xit "logs connection refused and skips gem, usually due to firewall blocking or gem mirrir is down"
|
95
|
+
|
96
|
+
xit "should try to install from github if gem was not found in default source(s)" do
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'examples/example_helper'
|
2
|
+
|
3
|
+
describe Rcr::OptionParsing do
|
4
|
+
|
5
|
+
describe "gem list" do
|
6
|
+
it "uses github list for -g" do
|
7
|
+
opts = Rcr::OptionParsing.parse(["-g"])
|
8
|
+
opts[:github].should be_true
|
9
|
+
end
|
10
|
+
|
11
|
+
it "defaults to non github" do
|
12
|
+
opts = Rcr::OptionParsing.parse([])
|
13
|
+
opts[:github].should be_nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns github source url if github list selected" do
|
17
|
+
opts = Rcr::OptionParsing.parse(["-g"])
|
18
|
+
opts[:gem_list].should == Rcr::GemSync::RCR_GITHUB_GEM_LIST
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/gem_sync.gemspec
CHANGED
@@ -1,37 +1,65 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
1
4
|
# -*- encoding: utf-8 -*-
|
2
5
|
|
3
6
|
Gem::Specification.new do |s|
|
4
7
|
s.name = %q{gem_sync}
|
5
|
-
s.version = "
|
8
|
+
s.version = "1.1.0"
|
6
9
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">=
|
8
|
-
s.authors = ["Rob Sanheim
|
9
|
-
s.date = %q{
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Rob Sanheim"]
|
12
|
+
s.date = %q{2009-09-04}
|
10
13
|
s.default_executable = %q{gem_sync}
|
11
|
-
s.description = %q{Tool to install
|
14
|
+
s.description = %q{Tool to install rubygems for RunCodeRun, though it could be used to bootstrap your own machines as well.}
|
12
15
|
s.email = %q{rob@runcoderun.com}
|
13
16
|
s.executables = ["gem_sync"]
|
14
|
-
s.extra_rdoc_files = [
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
s.
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
19
|
+
"README.txt"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".gitignore",
|
23
|
+
"History.txt",
|
24
|
+
"LICENSE",
|
25
|
+
"Manifest",
|
26
|
+
"Manifest.txt",
|
27
|
+
"README.txt",
|
28
|
+
"Rakefile",
|
29
|
+
"VERSION",
|
30
|
+
"bin/gem_sync",
|
31
|
+
"examples/example_helper.rb",
|
32
|
+
"examples/rcr/gem_parser_example.rb",
|
33
|
+
"examples/rcr/gem_sync_example.rb",
|
34
|
+
"examples/rcr/option_parsing_example.rb",
|
35
|
+
"gem_sync.gemspec",
|
36
|
+
"lib/rcr/gem_parser.rb",
|
37
|
+
"lib/rcr/gem_sync.rb",
|
38
|
+
"lib/rcr/option_parsing.rb",
|
39
|
+
"lib/runcoderun_gems.txt"
|
40
|
+
]
|
41
|
+
s.homepage = %q{http://github.com/runcoderun/gem_sync}
|
42
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
19
43
|
s.require_paths = ["lib"]
|
20
|
-
s.
|
21
|
-
s.
|
22
|
-
s.
|
23
|
-
|
44
|
+
s.rubygems_version = %q{1.3.5}
|
45
|
+
s.summary = %q{gem_sync}
|
46
|
+
s.test_files = [
|
47
|
+
"examples/example_helper.rb",
|
48
|
+
"examples/rcr/gem_parser_example.rb",
|
49
|
+
"examples/rcr/gem_sync_example.rb",
|
50
|
+
"examples/rcr/option_parsing_example.rb"
|
51
|
+
]
|
24
52
|
|
25
53
|
if s.respond_to? :specification_version then
|
26
54
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
27
|
-
s.specification_version =
|
55
|
+
s.specification_version = 3
|
28
56
|
|
29
57
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
30
|
-
s.add_development_dependency(%q<
|
58
|
+
s.add_development_dependency(%q<spicycode-micronaut>, [">= 0"])
|
31
59
|
else
|
32
|
-
s.add_dependency(%q<
|
60
|
+
s.add_dependency(%q<spicycode-micronaut>, [">= 0"])
|
33
61
|
end
|
34
62
|
else
|
35
|
-
s.add_dependency(%q<
|
63
|
+
s.add_dependency(%q<spicycode-micronaut>, [">= 0"])
|
36
64
|
end
|
37
65
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module Rcr
|
4
|
+
class GemParser
|
5
|
+
|
6
|
+
def self.convert_gem_list(string)
|
7
|
+
gems = []
|
8
|
+
string.each do |line|
|
9
|
+
name = parse_name(line)
|
10
|
+
next unless name
|
11
|
+
versions = parse_versions(line)
|
12
|
+
platforms = parse_platforms(line)
|
13
|
+
if versions.empty?
|
14
|
+
gems << OpenStruct.new(:name => name, :platforms => platforms)
|
15
|
+
else
|
16
|
+
versions.each do |version|
|
17
|
+
gems << OpenStruct.new(:name => name, :version => version.strip, :platforms => platforms)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
gems
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.parse_name(string)
|
25
|
+
result = string.gsub(/#.*/, "").match(/[\w\-_]*/)[0]
|
26
|
+
result != "" ? result : nil
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.parse_versions(string)
|
30
|
+
output = string.scan(/\((.*?)\)/).flatten
|
31
|
+
output = output.map {|s| s.split(",") }.flatten
|
32
|
+
output = output.map {|s| s.strip}
|
33
|
+
output
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.parse_platforms(string)
|
37
|
+
string.scan(/\+[\w-]+\b/).map! { |platform| platform.gsub!('+', '') }
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
data/lib/rcr/gem_sync.rb
CHANGED
@@ -1,114 +1,96 @@
|
|
1
|
-
require 'ostruct'
|
2
1
|
require 'open-uri'
|
2
|
+
require 'rcr/option_parsing'
|
3
|
+
require 'rcr/gem_parser'
|
3
4
|
|
4
5
|
module Rcr
|
5
6
|
class GemSync
|
6
|
-
VERSION = '0.5.13'
|
7
7
|
GITHUB = "http://gems.github.com"
|
8
8
|
RCR_DEFAULT_GEM_LIST = File.expand_path(File.join(File.dirname(__FILE__), *%w[.. runcoderun_gems.txt]))
|
9
9
|
RCR_GITHUB_GEM_LIST = "http://github.com/runcoderun/gem_sync/raw/master/lib/runcoderun_gems.txt"
|
10
10
|
RCR_GITHUB_GEM_BLACKLIST = "http://github.com/runcoderun/gem_sync/raw/master/lib/gem_blacklist.txt"
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
attr_accessor :gem_list
|
13
|
+
def initialize(args = ["--github"])
|
14
|
+
options = Rcr::OptionParsing.parse(args)
|
15
|
+
@platform = options[:platform]
|
16
|
+
@verbose = options[:verbose]
|
17
|
+
@dry_run = options[:dry_run]
|
18
|
+
@gem_list = options[:gem_list]
|
19
|
+
system("gem env") if verbose?
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
|
24
|
-
# puts "Uninstalling any gems on the blacklist..."
|
25
|
-
blacklist = open(RCR_GITHUB_GEM_BLACKLIST).read
|
26
|
-
convert_gem_list(blacklist).each do |rubygem|
|
27
|
-
cmd = "gem uninstall #{rubygem.name} -I -a -x"
|
28
|
-
cmd << " --version '#{rubygem.version}'" if rubygem.version
|
29
|
-
puts cmd
|
30
|
-
`#{cmd}`
|
31
|
-
end
|
22
|
+
def verbose?
|
23
|
+
@verbose
|
32
24
|
end
|
33
25
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
26
|
+
def dry_run?
|
27
|
+
@dry_run
|
28
|
+
end
|
29
|
+
|
30
|
+
def read_gem_list
|
31
|
+
open(gem_list).read
|
39
32
|
end
|
40
33
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
34
|
+
def platform_matches?(gem)
|
35
|
+
if gem.platforms && @platform
|
36
|
+
gem.platforms.include?(@platform)
|
37
|
+
else
|
38
|
+
true
|
39
|
+
end
|
44
40
|
end
|
45
41
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
@@gem_list = open(list).read
|
42
|
+
def sync
|
43
|
+
@gem_list = read_gem_list
|
44
|
+
@gems = parse_gems
|
45
|
+
install_gems
|
51
46
|
end
|
52
47
|
|
53
|
-
def
|
54
|
-
|
55
|
-
puts `gem update`
|
48
|
+
def parse_gems
|
49
|
+
@gems = Rcr::GemParser.convert_gem_list(@gem_list)
|
56
50
|
end
|
57
51
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
cmd = "gem install #{rubygem.name} --no-ri --no-rdoc"
|
65
|
-
cmd << " --version #{rubygem.version}" if rubygem.version
|
66
|
-
puts cmd
|
67
|
-
puts `#{cmd}`
|
68
|
-
unless $?.success?
|
69
|
-
cmd << " --source #{GITHUB}"
|
70
|
-
puts "***** WARNING Trying to install gem #{rubygem.name} from github - watch for security issues."
|
71
|
-
puts cmd
|
72
|
-
puts `#{cmd}`
|
73
|
-
end
|
52
|
+
def install_gems
|
53
|
+
@gems.each do |rubygem|
|
54
|
+
next unless platform_matches?(rubygem)
|
55
|
+
next if installed?(rubygem)
|
56
|
+
install!(rubygem)
|
74
57
|
end
|
75
58
|
end
|
76
|
-
|
77
|
-
def
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
if versions.empty?
|
84
|
-
gems << OpenStruct.new(:name => name)
|
85
|
-
else
|
86
|
-
versions.each do |version|
|
87
|
-
gems << OpenStruct.new(:name => name, :version => version.strip)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
gems
|
59
|
+
|
60
|
+
def installed?(rubygem)
|
61
|
+
installed_gems.detect {|gem| gem.name == rubygem.name && gem.version == rubygem.version}
|
62
|
+
end
|
63
|
+
|
64
|
+
def installed_gems
|
65
|
+
@installed_gems ||= Rcr::GemParser.convert_gem_list(`gem list`)
|
92
66
|
end
|
93
67
|
|
94
|
-
def
|
95
|
-
|
68
|
+
def install!(rubygem)
|
69
|
+
install_from_rubyforge(rubygem) || install_from_github(rubygem)
|
96
70
|
end
|
97
71
|
|
98
|
-
def
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
output
|
72
|
+
def install_from_rubyforge(rubygem)
|
73
|
+
cmd = "gem install #{rubygem.name} --no-ri --no-rdoc"
|
74
|
+
cmd << " --version #{rubygem.version}" if rubygem.version
|
75
|
+
run(cmd)
|
103
76
|
end
|
104
|
-
|
105
|
-
def
|
106
|
-
|
77
|
+
|
78
|
+
def install_from_github(rubygem)
|
79
|
+
cmd = "gem install #{rubygem.name} --no-ri --no-rdoc"
|
80
|
+
cmd << " --version #{rubygem.version}" if rubygem.version
|
81
|
+
cmd << " --source #{GITHUB}"
|
82
|
+
run(cmd)
|
107
83
|
end
|
108
|
-
|
109
|
-
def
|
110
|
-
|
84
|
+
|
85
|
+
def run(cmd)
|
86
|
+
if dry_run?
|
87
|
+
puts cmd
|
88
|
+
true
|
89
|
+
else
|
90
|
+
puts cmd if verbose?
|
91
|
+
system(cmd)
|
92
|
+
end
|
111
93
|
end
|
112
|
-
|
94
|
+
|
113
95
|
end
|
114
96
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module Rcr
|
4
|
+
class OptionParsing
|
5
|
+
|
6
|
+
def self.parse(args)
|
7
|
+
options = {}
|
8
|
+
|
9
|
+
OptionParser.new do |opts|
|
10
|
+
opts.banner = "Usage: gem_sync [options]"
|
11
|
+
|
12
|
+
opts.on('-p', '--platform [PLATFORM]', 'Specify an optional platform') do |o|
|
13
|
+
options[:platform] = o.strip
|
14
|
+
end
|
15
|
+
|
16
|
+
opts.on('-g', '--github', 'Pull the list of gems to install from github') do |o|
|
17
|
+
options[:github] = o
|
18
|
+
options[:gem_list] = Rcr::GemSync::RCR_GITHUB_GEM_LIST
|
19
|
+
end
|
20
|
+
|
21
|
+
opts.on('-v', '--verbose', 'Run in verbose mode') do |o|
|
22
|
+
options[:verbose] = o
|
23
|
+
end
|
24
|
+
|
25
|
+
opts.on('-n', '--dry-run', 'Do a dry run without executing actions') do |o|
|
26
|
+
options[:dry_run] = o
|
27
|
+
end
|
28
|
+
|
29
|
+
end.parse!(args)
|
30
|
+
|
31
|
+
options
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
data/lib/runcoderun_gems.txt
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
# Don't add these gems -- they break things bad:
|
2
|
+
# watir
|
3
|
+
# do_sqlite3 (<= 0.9.8)
|
4
|
+
|
1
5
|
actionmailer (2.3.2, 2.2.2, 2.1.2, 2.1.0, 2.0.2, 2.0.1, 1.3.6)
|
2
6
|
actionpack (2.3.2, 2.2.2, 2.1.2, 2.1.0, 2.0.2, 2.0.1, 1.13.6)
|
3
7
|
actionwebservice (1.2.6)
|
@@ -10,6 +14,7 @@ addressable (2.0.2, 1.0.4)
|
|
10
14
|
allison (2.0.3)
|
11
15
|
andand
|
12
16
|
andre-geokit
|
17
|
+
antage-postgres +ruby_191
|
13
18
|
archive-tar-minitar (0.5.2)
|
14
19
|
ar-extensions
|
15
20
|
arrayfields (4.7.3, 4.6.0)
|
@@ -29,23 +34,23 @@ cgi_multipart_eof_fix (2.5.0)
|
|
29
34
|
chrisk-fakeweb
|
30
35
|
chronic
|
31
36
|
coderay
|
32
|
-
|
37
|
+
colors
|
33
38
|
configatron (2.2.2, 2.1.5)
|
34
39
|
configuration (0.0.5)
|
35
40
|
context
|
36
|
-
crack
|
41
|
+
crack
|
37
42
|
csv-mapper (0.0.3)
|
38
43
|
cucumber (0.3.96, 0.3.94, 0.3.92, 0.3.9, 0.3.11, 0.3.0)
|
39
|
-
curb
|
40
|
-
daemons
|
41
|
-
dancroak-clearance
|
42
|
-
dancroak-clearance-admin
|
43
|
-
dancroak-ruby-summize
|
44
|
-
dancroak-twitter-search
|
45
|
-
dancroak-validates_email_format_of
|
44
|
+
curb +ruby_186 +ruby_191
|
45
|
+
daemons
|
46
|
+
dancroak-clearance
|
47
|
+
dancroak-clearance-admin
|
48
|
+
dancroak-ruby-summize
|
49
|
+
dancroak-twitter-search
|
50
|
+
dancroak-validates_email_format_of
|
46
51
|
data_objects (0.9.12, 0.9.6)
|
47
|
-
dbd-mysql
|
48
|
-
dbd-sqlite3
|
52
|
+
dbd-mysql +ruby_186 +ruby_191
|
53
|
+
dbd-sqlite3 +ruby_186 +ruby_191
|
49
54
|
dbi
|
50
55
|
dfl-factories-and-workers
|
51
56
|
diff-lcs (1.1.2)
|
@@ -53,13 +58,13 @@ dm-core (0.9.11)
|
|
53
58
|
dm-tags (0.9.11)
|
54
59
|
dm-validations (0.9.11)
|
55
60
|
dnsruby (1.26, 1.24, 1.2)
|
56
|
-
do_mysql
|
61
|
+
do_mysql +ruby_186 +ruby_191
|
57
62
|
echoe (3.1.1, 3.0.2, 3)
|
58
63
|
editalign
|
59
64
|
erubis
|
60
65
|
eventmachine
|
61
|
-
expectations
|
62
|
-
extensions
|
66
|
+
expectations
|
67
|
+
extensions
|
63
68
|
extlib (0.9.12, 0.9.5)
|
64
69
|
ezamar
|
65
70
|
facets (2.5.2, 2.5.0, 2.4.5, 2.4.4, 2.4.1, 2.3.0, 2.2.1, 2.2.0, 2.1.3, 2.0.5)
|
@@ -69,7 +74,7 @@ faker
|
|
69
74
|
fakeweb
|
70
75
|
fastercsv (1.4.0, 1.2.3)
|
71
76
|
fastthread (1.0.7, 1.0.1)
|
72
|
-
fattr
|
77
|
+
fattr
|
73
78
|
feed-normalizer
|
74
79
|
feedvalidator
|
75
80
|
ferret
|
@@ -80,12 +85,12 @@ flog (2.1.0, 2.0.0, 1.1.0)
|
|
80
85
|
freelancing-god-ginger
|
81
86
|
freelancing-god-thinking-sphinx
|
82
87
|
geminstaller
|
83
|
-
gem_plugin
|
88
|
+
gem_plugin
|
84
89
|
geokit
|
85
90
|
giraffesoft-resource_controller
|
86
|
-
git
|
87
|
-
god
|
88
|
-
google-geocode
|
91
|
+
git
|
92
|
+
god
|
93
|
+
google-geocode
|
89
94
|
grancher
|
90
95
|
grempe-amazon-ec2
|
91
96
|
haml (2.2.1, 2.0.9, 2.0.7, 2.0.2, 2.0.1)
|
@@ -94,43 +99,45 @@ hashtostruct
|
|
94
99
|
heckle (1.4.2, 1.4.1)
|
95
100
|
highline (1.5.0, 1.4.0)
|
96
101
|
hoe (1.12.2, 1.8.3, 1.8.2, 1.7.0)
|
97
|
-
hpricot (0.8.1, 0.6.164, 0.6)
|
102
|
+
hpricot (0.8.1, 0.6.164, 0.6) +ruby_186 +ruby_191
|
98
103
|
htmlentities (4.0.0)
|
99
104
|
httparty
|
100
105
|
httpauth
|
101
106
|
httpclient
|
107
|
+
ianwhite-garlic
|
102
108
|
icalendar (1.1.0, 1.0.2)
|
103
|
-
image_science (1.1.3)
|
109
|
+
image_science (1.1.3) +ruby_186 +ruby_191
|
104
110
|
innate
|
105
|
-
javan-whenever
|
106
|
-
jeremymcanally-context
|
107
|
-
jeremymcanally-matchy
|
108
|
-
jeremymcanally-pending
|
109
|
-
jeremymcanally-stump
|
110
|
-
jnunemaker-twitter
|
111
|
+
javan-whenever
|
112
|
+
jeremymcanally-context
|
113
|
+
jeremymcanally-matchy
|
114
|
+
jeremymcanally-pending
|
115
|
+
jeremymcanally-stump
|
116
|
+
jnunemaker-twitter
|
117
|
+
jruby-openssl +jruby
|
118
|
+
jruby-rcov +jruby
|
111
119
|
jscruggs-metric_fu (1.1.4, 1.0.2)
|
112
|
-
json (1.1.4, 1.1.3)
|
120
|
+
json (1.1.4, 1.1.3) +ruby_186 +ruby_191
|
113
121
|
jsonbuilder
|
114
122
|
juggernaut
|
115
|
-
kematzy-sinatra-cache
|
116
|
-
lame_encoder
|
123
|
+
kematzy-sinatra-cache
|
124
|
+
lame_encoder
|
117
125
|
launchy (0.3.3, 0.3.2)
|
118
126
|
less
|
119
|
-
libxml-ruby (1.1.3, 0.9.8, 0.8.3)
|
127
|
+
libxml-ruby (1.1.3, 0.9.8, 0.8.3) +ruby_186 +ruby_191
|
120
128
|
Linguistics
|
121
129
|
liquid
|
122
130
|
locale
|
123
131
|
log4r
|
124
|
-
log_buddy
|
132
|
+
log_buddy
|
125
133
|
main (2.8.3, 2.8.2)
|
126
|
-
markaby
|
134
|
+
markaby
|
127
135
|
maruku
|
128
|
-
mash
|
136
|
+
mash
|
129
137
|
mbleigh-acts-as-taggable-on
|
130
138
|
mdoel-cukesteps
|
131
139
|
mechanize
|
132
140
|
memcache-client
|
133
|
-
memcached (0.12, 0.11)
|
134
141
|
merb-core (0.9.9)
|
135
142
|
merb-exceptions (0.9.9)
|
136
143
|
merb-freezer (0.9.5)
|
@@ -152,7 +159,7 @@ mixlib-cli (1.0.4)
|
|
152
159
|
mixlib-config (1.0.9)
|
153
160
|
mixlib-log (1.0.3)
|
154
161
|
mocha (0.9.5, 0.9.4, 0.9.0)
|
155
|
-
mojombo-chronic
|
162
|
+
mojombo-chronic
|
156
163
|
mojombo-grit (1.1.1, 0.9.4)
|
157
164
|
mojombo-jekyll
|
158
165
|
money
|
@@ -160,16 +167,16 @@ mongrel
|
|
160
167
|
mosquito (0.1.4, 0.1.3)
|
161
168
|
mwmitchell-rsolr
|
162
169
|
mwmitchell-material_girl
|
163
|
-
mysql (2.7)
|
170
|
+
mysql (2.7) +ruby_186 +ruby_191
|
164
171
|
nagoro
|
165
172
|
net-ssh (2.0.11, 2.0.4)
|
166
173
|
newgem (1.3.0, 1.2.3, 1.1.0)
|
167
174
|
nokogiri (1.3.2)
|
168
|
-
oauth
|
175
|
+
oauth
|
169
176
|
obsidian
|
170
177
|
ohai
|
171
|
-
oniguruma (1.1.0)
|
172
|
-
open4
|
178
|
+
oniguruma (1.1.0) +ruby_186
|
179
|
+
open4
|
173
180
|
opscode-ohai
|
174
181
|
opscode-mixlib-cli (1.0.4)
|
175
182
|
opscode-mixlib-config (1.0.9)
|
@@ -178,12 +185,13 @@ patron
|
|
178
185
|
orderedhash (0.0.6, 0.0.4)
|
179
186
|
packet (0.1.15, 0.1.14)
|
180
187
|
ParseTree (3.0.3, 2.2.0)
|
188
|
+
pauldix-sax-machine
|
181
189
|
pdf-writer (1.1.8)
|
182
190
|
peterwald-git (1.1.4)
|
183
191
|
picnic (0.8.0, 0.7.1, 0.6.4)
|
184
192
|
plist
|
185
193
|
polyglot (0.2.6, 0.2.5, 0.2.3)
|
186
|
-
postgres
|
194
|
+
postgres +ruby_186
|
187
195
|
populator
|
188
196
|
prawn
|
189
197
|
PriorityQueue
|
@@ -191,48 +199,48 @@ quietbacktrace
|
|
191
199
|
rack (1.0.0, 0.9.1, 0.4.0)
|
192
200
|
rack-test (0.2.0, 0.1.0)
|
193
201
|
rails (2.3.2, 2.3.1, 2.2.2, 2.1.2, 2.1.1, 2.1.0, 2.0.5, 2.0.4, 2.0.2, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0)
|
194
|
-
rake (0.8.7, 0.8.4, 0.8.3
|
202
|
+
rake (0.8.7, 0.8.4, 0.8.3)
|
195
203
|
railroad
|
196
|
-
rc-rest
|
204
|
+
rc-rest
|
197
205
|
rdiscount
|
198
206
|
RedCloth (4.1.9, 4.1.1, 4.0.3, 4.0.1, 3.0.4, 3.0.3)
|
199
|
-
redgreen
|
207
|
+
redgreen
|
200
208
|
reek (1.1.3)
|
201
|
-
relevance-cap_gun
|
209
|
+
relevance-cap_gun
|
202
210
|
relevance-castronaut (0.3.6)
|
203
|
-
relevance-github_hook
|
204
|
-
relevance-grit
|
205
|
-
relevance-log_buddy
|
206
|
-
relevance-multi_rails
|
207
|
-
relevance-rcov
|
208
|
-
relevance-rubycas-server
|
211
|
+
relevance-github_hook
|
212
|
+
relevance-grit
|
213
|
+
relevance-log_buddy
|
214
|
+
relevance-multi_rails
|
215
|
+
relevance-rcov +ruby_186 +ruby_191
|
216
|
+
relevance-rubycas-server
|
209
217
|
relevance-tarantula
|
210
218
|
relevance-test-spec
|
211
|
-
remarkable
|
212
|
-
remarkable_activerecord
|
219
|
+
remarkable
|
220
|
+
remarkable_activerecord
|
213
221
|
remarkable_rails
|
214
222
|
remarkably
|
215
223
|
rest-client (0.9.2, 0.7)
|
216
|
-
right_aws
|
224
|
+
right_aws
|
217
225
|
rio
|
218
|
-
rmagick (2.10.0, 2.9.1, 2.6.0
|
226
|
+
rmagick (2.10.0, 2.9.1, 2.6.0) +ruby_186 +ruby_191
|
219
227
|
roman-merb_cucumber
|
220
228
|
roo
|
221
229
|
roodi (1.4.0)
|
222
230
|
rr
|
223
|
-
rspec (1.2.7, 1.2.4, 1.1.8, 1.1.4
|
231
|
+
rspec (1.2.7, 1.2.4, 1.1.8, 1.1.4)
|
224
232
|
rspec-rails (1.2.7.1, 1.2.4, 1.2.2, 1.2.0, 1.1.12, 1.1.11)
|
225
233
|
rspec_hpricot_matchers
|
226
234
|
rubigen
|
227
235
|
ruby-aaws
|
228
236
|
ruby-debug (0.10.2)
|
229
237
|
ruby-hmac (0.3.2)
|
230
|
-
ruby-json
|
231
|
-
ruby-net-ldap
|
238
|
+
ruby-json
|
239
|
+
ruby-net-ldap
|
232
240
|
ruby-openid
|
233
241
|
ruby2ruby (1.2.2, 1.1.9)
|
234
242
|
rubyforge (1.0.3, 1.0.2, 1.0.1, 1.0.0)
|
235
|
-
rubygems-update
|
243
|
+
rubygems-update
|
236
244
|
RubyInline (3.8.1, 3.7.0)
|
237
245
|
rubyzip
|
238
246
|
ruby_parser (2.0.3, 2.0.2)
|
@@ -251,8 +259,8 @@ sinatra
|
|
251
259
|
spicycode-micronaut
|
252
260
|
spicycode-micronaut-rails
|
253
261
|
spork
|
254
|
-
sql-parser
|
255
|
-
sqlite3-ruby (1.2.4, 1.2.3, 1.2.1)
|
262
|
+
sql-parser
|
263
|
+
sqlite3-ruby (1.2.4, 1.2.3, 1.2.1) +ruby_186 +ruby_191
|
256
264
|
starling
|
257
265
|
starling-starling
|
258
266
|
stomp
|
@@ -262,32 +270,32 @@ systemu (1.2.0)
|
|
262
270
|
system_timer (1.0)
|
263
271
|
taf2-curb
|
264
272
|
tagz
|
265
|
-
technicalpickles-echoe
|
273
|
+
technicalpickles-echoe
|
266
274
|
technicalpickles-jeweler
|
267
|
-
term-ansicolor
|
268
|
-
termios
|
275
|
+
term-ansicolor
|
276
|
+
termios
|
269
277
|
test-spec (0.10.0, 0.9.0)
|
270
278
|
thin
|
271
279
|
thinking_sphinx
|
272
|
-
thoughtbot-clearance
|
280
|
+
thoughtbot-clearance
|
273
281
|
thoughtbot-factory_girl (1.2.1, 1.1.3)
|
274
282
|
thoughtbot-paperclip (2.3.0, 2.3.1)
|
275
|
-
thoughtbot-quietbacktrace
|
276
|
-
thoughtbot-shoulda
|
283
|
+
thoughtbot-quietbacktrace
|
284
|
+
thoughtbot-shoulda
|
277
285
|
timcharper-spork
|
278
|
-
tidy
|
286
|
+
tidy
|
279
287
|
tinder (1.2.0, 1.1.7)
|
280
288
|
tmm1-amqp
|
281
|
-
topfunky-gruff
|
282
|
-
transaction-simple
|
289
|
+
topfunky-gruff
|
290
|
+
transaction-simple
|
283
291
|
treetop (1.2.6, 1.2.5, 1.2.4)
|
284
292
|
twitter
|
285
293
|
tzinfo
|
286
294
|
unit_record
|
287
295
|
uuidtools (1.0.7, 1.0.3)
|
288
|
-
validatable
|
296
|
+
validatable
|
289
297
|
webrat
|
290
|
-
will_paginate
|
298
|
+
will_paginate
|
291
299
|
xmlelements
|
292
300
|
xml-simple
|
293
301
|
yajl-ruby
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runcoderun-gem_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Rob Sanheim
|
7
|
+
- Rob Sanheim
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-09-04 00:00:00 -07:00
|
13
13
|
default_executable: gem_sync
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: spicycode-micronaut
|
17
17
|
type: :development
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -22,38 +22,40 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: "0"
|
24
24
|
version:
|
25
|
-
description: Tool to install
|
25
|
+
description: Tool to install rubygems for RunCodeRun, though it could be used to bootstrap your own machines as well.
|
26
26
|
email: rob@runcoderun.com
|
27
27
|
executables:
|
28
28
|
- gem_sync
|
29
29
|
extensions: []
|
30
30
|
|
31
31
|
extra_rdoc_files:
|
32
|
-
-
|
33
|
-
- lib/rcr/gem_sync.rb
|
34
|
-
- lib/runcoderun_gems.txt
|
32
|
+
- LICENSE
|
35
33
|
- README.txt
|
36
34
|
files:
|
37
|
-
-
|
38
|
-
- gem_sync.gemspec
|
35
|
+
- .gitignore
|
39
36
|
- History.txt
|
40
|
-
-
|
41
|
-
- lib/runcoderun_gems.txt
|
37
|
+
- LICENSE
|
42
38
|
- Manifest
|
43
39
|
- Manifest.txt
|
44
|
-
- Rakefile
|
45
40
|
- README.txt
|
46
|
-
-
|
47
|
-
|
48
|
-
|
41
|
+
- Rakefile
|
42
|
+
- VERSION
|
43
|
+
- bin/gem_sync
|
44
|
+
- examples/example_helper.rb
|
45
|
+
- examples/rcr/gem_parser_example.rb
|
46
|
+
- examples/rcr/gem_sync_example.rb
|
47
|
+
- examples/rcr/option_parsing_example.rb
|
48
|
+
- gem_sync.gemspec
|
49
|
+
- lib/rcr/gem_parser.rb
|
50
|
+
- lib/rcr/gem_sync.rb
|
51
|
+
- lib/rcr/option_parsing.rb
|
52
|
+
- lib/runcoderun_gems.txt
|
53
|
+
has_rdoc: false
|
54
|
+
homepage: http://github.com/runcoderun/gem_sync
|
55
|
+
licenses:
|
49
56
|
post_install_message:
|
50
57
|
rdoc_options:
|
51
|
-
- --
|
52
|
-
- --inline-source
|
53
|
-
- --title
|
54
|
-
- Gem_sync
|
55
|
-
- --main
|
56
|
-
- README.txt
|
58
|
+
- --charset=UTF-8
|
57
59
|
require_paths:
|
58
60
|
- lib
|
59
61
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -66,14 +68,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
68
|
requirements:
|
67
69
|
- - ">="
|
68
70
|
- !ruby/object:Gem::Version
|
69
|
-
version: "
|
71
|
+
version: "0"
|
70
72
|
version:
|
71
73
|
requirements: []
|
72
74
|
|
73
|
-
rubyforge_project:
|
74
|
-
rubygems_version: 1.
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 1.3.5
|
75
77
|
signing_key:
|
76
|
-
specification_version:
|
77
|
-
summary:
|
78
|
+
specification_version: 3
|
79
|
+
summary: gem_sync
|
78
80
|
test_files:
|
79
|
-
-
|
81
|
+
- examples/example_helper.rb
|
82
|
+
- examples/rcr/gem_parser_example.rb
|
83
|
+
- examples/rcr/gem_sync_example.rb
|
84
|
+
- examples/rcr/option_parsing_example.rb
|
data/spec/gem_sync_spec.rb
DELETED
@@ -1,139 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
gem 'spicycode-micronaut'
|
3
|
-
require 'micronaut'
|
4
|
-
require 'mocha'
|
5
|
-
require File.join(File.dirname(__FILE__), *%w[.. lib rcr gem_sync])
|
6
|
-
require File.join(File.dirname(__FILE__), *%w[example_helper])
|
7
|
-
|
8
|
-
describe 'GemSync' do
|
9
|
-
|
10
|
-
describe "calling gem_sync" do
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "reading file" do
|
14
|
-
before do
|
15
|
-
Rcr::GemSync.stubs :update_self
|
16
|
-
Rcr::GemSync.stubs :install_gems_from_list
|
17
|
-
Rcr::GemSync.stubs :update_gems
|
18
|
-
end
|
19
|
-
|
20
|
-
it "uses default gem list for nil gem list" do
|
21
|
-
Rcr::GemSync.expects(:open).with(Rcr::GemSync::RCR_DEFAULT_GEM_LIST).returns(StringIO.new)
|
22
|
-
Rcr::GemSync.install_gems
|
23
|
-
Rcr::GemSync.expects(:open).with(Rcr::GemSync::RCR_DEFAULT_GEM_LIST).returns(StringIO.new)
|
24
|
-
Rcr::GemSync.install_gems nil
|
25
|
-
end
|
26
|
-
|
27
|
-
it "allows overriding gem list file" do
|
28
|
-
Rcr::GemSync.stubs(:fail_if_gem_list_doesnt_exist).returns(true)
|
29
|
-
Rcr::GemSync.expects(:open).with("/my/gems.txt").returns(StringIO.new)
|
30
|
-
Rcr::GemSync.install_gems "/my/gems.txt"
|
31
|
-
end
|
32
|
-
|
33
|
-
it "reads file for gem list" do
|
34
|
-
Rcr::GemSync.stubs(:fail_if_gem_list_doesnt_exist).returns(true)
|
35
|
-
Rcr::GemSync.expects(:open).with("/my/gems.txt").returns(StringIO.new)
|
36
|
-
Rcr::GemSync.read_gem_list "/my/gems.txt"
|
37
|
-
end
|
38
|
-
|
39
|
-
it "reads from gem list and blacklist on github if passed github param" do
|
40
|
-
Rcr::GemSync.expects(:open).with(Rcr::GemSync::RCR_GITHUB_GEM_LIST).returns(StringIO.new)
|
41
|
-
Rcr::GemSync.expects(:open).with(Rcr::GemSync::RCR_GITHUB_GEM_BLACKLIST).returns(StringIO.new)
|
42
|
-
|
43
|
-
Rcr::GemSync.install_gems "__from_github__"
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "parsing a gem list" do
|
49
|
-
it "parses gems without a version" do
|
50
|
-
list = %[wirble]
|
51
|
-
gems = Rcr::GemSync.convert_gem_list(list)
|
52
|
-
gems[0].name.should == "wirble"
|
53
|
-
gems[0].version.should == nil
|
54
|
-
end
|
55
|
-
|
56
|
-
it "parses gem list" do
|
57
|
-
list = %[wirble (0.1.2)
|
58
|
-
xml-simple (1.0.11)
|
59
|
-
ZenTest (3.10.0, 3.9.2, 3.9.1, 3.8.0, 3.6.0)]
|
60
|
-
gems = Rcr::GemSync.convert_gem_list(list)
|
61
|
-
gems[0].name.should == "wirble"
|
62
|
-
gems[0].version.should == "0.1.2"
|
63
|
-
gems[1].name.should == "xml-simple"
|
64
|
-
gems[1].version.should == "1.0.11"
|
65
|
-
gems[2..-1].each { |gem| gem.name.should == "ZenTest"}
|
66
|
-
gems[2].version.should == "3.10.0"
|
67
|
-
gems[3].version.should == "3.9.2"
|
68
|
-
end
|
69
|
-
|
70
|
-
it "can use version strings" do
|
71
|
-
list = %[do_sqlite3 (<= 0.9.8)]
|
72
|
-
gems = Rcr::GemSync.convert_gem_list(list)
|
73
|
-
gems.first.version.should == '<= 0.9.8'
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
describe "parsing versions" do
|
78
|
-
it "parses without a version" do
|
79
|
-
versions = Rcr::GemSync.parse_versions("foo")
|
80
|
-
versions[0].should == nil
|
81
|
-
end
|
82
|
-
|
83
|
-
it "parses single version" do
|
84
|
-
versions = Rcr::GemSync.parse_versions("foo (1.0.10)")
|
85
|
-
versions[0].should == "1.0.10"
|
86
|
-
end
|
87
|
-
|
88
|
-
it "parses single digit version" do
|
89
|
-
versions = Rcr::GemSync.parse_versions("echoe (3)")
|
90
|
-
versions[0].should == "3"
|
91
|
-
end
|
92
|
-
|
93
|
-
it "parses four digit versions" do
|
94
|
-
versions = Rcr::GemSync.parse_versions("fiveruns-memcache-client (1.5.0.3)")
|
95
|
-
versions[0].should == "1.5.0.3"
|
96
|
-
end
|
97
|
-
|
98
|
-
it "parses with multiple versions" do
|
99
|
-
versions = Rcr::GemSync.parse_versions("foo (1.0.10, 1.0.11)")
|
100
|
-
versions[0].should == "1.0.10"
|
101
|
-
versions[1].should == "1.0.11"
|
102
|
-
end
|
103
|
-
|
104
|
-
it "parses gems with numbers in the name" do
|
105
|
-
Rcr::GemSync.parse_versions("open4 (0.9.6)")[0].should == "0.9.6"
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
describe "parsing gem names" do
|
110
|
-
|
111
|
-
it "parses gem name without versions" do
|
112
|
-
Rcr::GemSync.parse_name("factory-girl").should == "factory-girl"
|
113
|
-
end
|
114
|
-
|
115
|
-
it "parses simple gem name" do
|
116
|
-
Rcr::GemSync.parse_name("daemons (1.0.10)").should == "daemons"
|
117
|
-
end
|
118
|
-
|
119
|
-
it "parses name with dashes" do
|
120
|
-
Rcr::GemSync.parse_name("diff-lcs (1.0.10)").should == "diff-lcs"
|
121
|
-
end
|
122
|
-
|
123
|
-
it "parses name with underscores" do
|
124
|
-
Rcr::GemSync.parse_name("spec_converter_foo (1.0.10)").should == "spec_converter_foo"
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
describe "failed installation" do
|
129
|
-
xit "should skip the gem and move on if failed due to permission denied" do
|
130
|
-
out = "Permission denied - /opt/local/lib/ruby/gems/1.8/cache/activesupport-1.4.4.gem"
|
131
|
-
end
|
132
|
-
|
133
|
-
xit "logs connection refused and skips gem, usually due to firewall blocking or gem mirrir is down"
|
134
|
-
|
135
|
-
xit "should try to install from github if gem was not found in default source(s)" do
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
end
|