britt-geminstaller 0.5.2 → 0.5.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.loadpath +5 -0
- data/COPYING +1 -0
- data/History.txt +69 -0
- data/LICENSE +21 -0
- data/Manifest.txt +78 -0
- data/README.txt +64 -0
- data/Rakefile +184 -0
- data/TODO.txt +138 -0
- data/bin/geminstaller +30 -0
- data/cruise_config.rb +14 -0
- data/focused_spec.sh +2 -0
- data/focused_spec_debug.sh +2 -0
- data/geminstaller.yml +42 -0
- data/lib/geminstaller.rb +103 -0
- data/lib/geminstaller/application.rb +105 -0
- data/lib/geminstaller/arg_parser.rb +166 -0
- data/lib/geminstaller/autogem.rb +46 -0
- data/lib/geminstaller/backward_compatibility.rb +10 -0
- data/lib/geminstaller/config.rb +68 -0
- data/lib/geminstaller/config_builder.rb +65 -0
- data/lib/geminstaller/enhanced_stream_ui.rb +71 -0
- data/lib/geminstaller/exact_match_list_command.rb +16 -0
- data/lib/geminstaller/file_reader.rb +31 -0
- data/lib/geminstaller/gem_arg_processor.rb +44 -0
- data/lib/geminstaller/gem_command_manager.rb +74 -0
- data/lib/geminstaller/gem_interaction_handler.rb +41 -0
- data/lib/geminstaller/gem_list_checker.rb +55 -0
- data/lib/geminstaller/gem_runner_proxy.rb +62 -0
- data/lib/geminstaller/gem_source_index_proxy.rb +21 -0
- data/lib/geminstaller/gem_spec_manager.rb +53 -0
- data/lib/geminstaller/geminstaller_access_error.rb +4 -0
- data/lib/geminstaller/geminstaller_error.rb +13 -0
- data/lib/geminstaller/hoe_extensions.rb +9 -0
- data/lib/geminstaller/install_processor.rb +71 -0
- data/lib/geminstaller/missing_dependency_finder.rb +46 -0
- data/lib/geminstaller/missing_file_error.rb +4 -0
- data/lib/geminstaller/noninteractive_chooser.rb +114 -0
- data/lib/geminstaller/output_filter.rb +49 -0
- data/lib/geminstaller/output_listener.rb +33 -0
- data/lib/geminstaller/output_observer.rb +36 -0
- data/lib/geminstaller/output_proxy.rb +36 -0
- data/lib/geminstaller/registry.rb +127 -0
- data/lib/geminstaller/requires.rb +81 -0
- data/lib/geminstaller/rogue_gem_finder.rb +195 -0
- data/lib/geminstaller/ruby_gem.rb +58 -0
- data/lib/geminstaller/rubygems_exit.rb +5 -0
- data/lib/geminstaller/rubygems_extensions.rb +9 -0
- data/lib/geminstaller/rubygems_version_checker.rb +15 -0
- data/lib/geminstaller/rubygems_version_warnings.rb +38 -0
- data/lib/geminstaller/source_index_search_adapter.rb +41 -0
- data/lib/geminstaller/unauthorized_dependency_prompt_error.rb +4 -0
- data/lib/geminstaller/unexpected_prompt_error.rb +4 -0
- data/lib/geminstaller/valid_platform_selector.rb +49 -0
- data/lib/geminstaller/version_specifier.rb +24 -0
- data/lib/geminstaller/yaml_loader.rb +22 -0
- data/lib/geminstaller_rails_preinitializer.rb +46 -0
- data/start_local_gem_server.sh +1 -0
- data/test/test_all.rb +36 -0
- data/test/test_all_smoketests.rb +21 -0
- data/website/config.yaml +11 -0
- data/website/src/analytics.page +6 -0
- data/website/src/code/ci.virtual +5 -0
- data/website/src/code/coverage/index.virtual +5 -0
- data/website/src/code/index.page +88 -0
- data/website/src/code/rdoc/index.virtual +6 -0
- data/website/src/community/index.page +14 -0
- data/website/src/community/links.page +11 -0
- data/website/src/community/rubyforge.virtual +4 -0
- data/website/src/default.css +175 -0
- data/website/src/default.template +42 -0
- data/website/src/documentation/documentation.page +476 -0
- data/website/src/documentation/index.page +53 -0
- data/website/src/documentation/tutorials.page +337 -0
- data/website/src/download.page +12 -0
- data/website/src/faq.page +36 -0
- data/website/src/index.page +92 -0
- data/website/src/metainfo +54 -0
- data/website/src/webgen.css +112 -0
- metadata +80 -3
@@ -0,0 +1,49 @@
|
|
1
|
+
module GemInstaller
|
2
|
+
class OutputFilter
|
3
|
+
attr_writer :output_proxy, :options
|
4
|
+
|
5
|
+
def rubygems_output(type, message)
|
6
|
+
return if @options[:silent]
|
7
|
+
return unless rubygems_output_type_matches?(type)
|
8
|
+
output(:rubygems, type, message)
|
9
|
+
end
|
10
|
+
|
11
|
+
def geminstaller_output(type, message)
|
12
|
+
return if @options[:silent]
|
13
|
+
return unless geminstaller_output_type_matches?(type)
|
14
|
+
output(:geminstaller, type, message)
|
15
|
+
end
|
16
|
+
|
17
|
+
def output(source, type, message)
|
18
|
+
message = format_rubygems_message(type,message) if source == :rubygems
|
19
|
+
if (source == :geminstaller and type == :error)
|
20
|
+
@output_proxy.syserr(message)
|
21
|
+
|
22
|
+
else
|
23
|
+
@output_proxy.sysout(message)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def format_rubygems_message(type, message)
|
28
|
+
prefix = case type
|
29
|
+
when :stdout : "[RubyGems:stdout] "
|
30
|
+
when :stderr : "[RubyGems:stderr] "
|
31
|
+
end
|
32
|
+
"#{prefix}#{message}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def rubygems_output_type_matches?(type)
|
36
|
+
return false unless @options[:rubygems_output]
|
37
|
+
return true if @options[:rubygems_output].include?(:all)
|
38
|
+
return true if @options[:rubygems_output].include?(type)
|
39
|
+
return false
|
40
|
+
end
|
41
|
+
|
42
|
+
def geminstaller_output_type_matches?(type)
|
43
|
+
return false unless @options[:geminstaller_output]
|
44
|
+
return true if @options[:geminstaller_output].include?(:all)
|
45
|
+
return true if @options[:geminstaller_output].include?(type)
|
46
|
+
return false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
dir = File.dirname(__FILE__)
|
2
|
+
require File.expand_path("#{dir}/requires.rb")
|
3
|
+
|
4
|
+
module GemInstaller
|
5
|
+
class OutputListener
|
6
|
+
attr_writer :output_filter
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@messages = []
|
10
|
+
@output_filter = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def notify(msg, stream = :stdout)
|
14
|
+
@messages.push(msg)
|
15
|
+
return unless @output_filter
|
16
|
+
if stream == :stdout or stream == :stderr
|
17
|
+
@output_filter.rubygems_output(stream, msg)
|
18
|
+
else
|
19
|
+
raise GemInstaller::GemInstallerError.new("Invalid stream specified: #{@stream}")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def read
|
24
|
+
@messages.dup
|
25
|
+
end
|
26
|
+
|
27
|
+
def read!
|
28
|
+
messages = @messages.dup
|
29
|
+
@messages.clear
|
30
|
+
messages
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module GemInstaller
|
2
|
+
class OutputObserver
|
3
|
+
attr_writer :stream
|
4
|
+
# TODO: GemRunnerProxy should raise exception if listener still has any leftover output when run is invoked.
|
5
|
+
def initialize
|
6
|
+
@stream = :stdout
|
7
|
+
@listeners = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def register(listener)
|
11
|
+
listener = [listener] unless listener.is_a?(Array)
|
12
|
+
@listeners += listener
|
13
|
+
end
|
14
|
+
|
15
|
+
def unregister(listener)
|
16
|
+
@listeners.delete(listener)
|
17
|
+
end
|
18
|
+
|
19
|
+
def print(output)
|
20
|
+
@listeners.each do |listener|
|
21
|
+
listener.notify(output, @stream)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def puts(output)
|
26
|
+
print("#{output}\n")
|
27
|
+
end
|
28
|
+
|
29
|
+
def tty?
|
30
|
+
false
|
31
|
+
end
|
32
|
+
|
33
|
+
def flush
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module GemInstaller
|
2
|
+
class OutputProxy
|
3
|
+
attr_writer :options
|
4
|
+
def default_stream=(stream)
|
5
|
+
raise GemInstaller::GemInstallerError.new("Invalid default stream: #{stream}") unless stream == :stderr or stream == :stdout
|
6
|
+
@default_stream = stream
|
7
|
+
end
|
8
|
+
|
9
|
+
def sysout(out)
|
10
|
+
return if silent?
|
11
|
+
$stdout.print out
|
12
|
+
end
|
13
|
+
|
14
|
+
def syserr(err)
|
15
|
+
return if silent?
|
16
|
+
if @options[:redirect_stderr_to_stdout]
|
17
|
+
$stdout.print err
|
18
|
+
else
|
19
|
+
$stderr.print err
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# TODO: should remove this, make callers explicitly choose.
|
24
|
+
def output(output)
|
25
|
+
if @default_stream == :stdout
|
26
|
+
sysout(output)
|
27
|
+
else
|
28
|
+
syserr(output)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def silent?
|
33
|
+
@options && @options[:silent]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
module GemInstaller
|
2
|
+
class Registry
|
3
|
+
attr_accessor :file_reader, :yaml_loader, :output_proxy, :config_builder, :gem_source_index, :gem_runner_proxy
|
4
|
+
attr_accessor :gem_runner, :gem_command_manager, :gem_list_checker, :app, :arg_parser, :options
|
5
|
+
attr_accessor :install_processor, :missing_dependency_finder, :valid_platform_selector
|
6
|
+
attr_accessor :output_listener, :outs_output_observer, :errs_output_observer, :output_filter, :autogem, :rogue_gem_finder
|
7
|
+
attr_accessor :gem_spec_manager, :source_index_search_adapter
|
8
|
+
|
9
|
+
if GemInstaller::RubyGemsVersionChecker.matches?('<=0.9.4')
|
10
|
+
attr_accessor :gem_interaction_handler, :noninteractive_chooser
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@options = {}
|
15
|
+
@arg_parser = GemInstaller::ArgParser.new
|
16
|
+
@arg_parser.options = @options
|
17
|
+
|
18
|
+
@file_reader = GemInstaller::FileReader.new
|
19
|
+
@yaml_loader = GemInstaller::YamlLoader.new
|
20
|
+
@gem_arg_processor = GemInstaller::GemArgProcessor.new
|
21
|
+
@version_specifier = GemInstaller::VersionSpecifier.new
|
22
|
+
@output_proxy = GemInstaller::OutputProxy.new
|
23
|
+
@output_proxy.options = @options
|
24
|
+
@output_filter = GemInstaller::OutputFilter.new
|
25
|
+
@output_filter.options = @options
|
26
|
+
@output_filter.output_proxy = @output_proxy
|
27
|
+
|
28
|
+
|
29
|
+
@output_listener = GemInstaller::OutputListener.new
|
30
|
+
@output_listener.output_filter = @output_filter
|
31
|
+
|
32
|
+
@valid_platform_selector = GemInstaller::ValidPlatformSelector.new
|
33
|
+
@valid_platform_selector.output_filter = @output_filter
|
34
|
+
@valid_platform_selector.options = @options
|
35
|
+
|
36
|
+
@config_builder = GemInstaller::ConfigBuilder.new
|
37
|
+
@config_builder.file_reader = @file_reader
|
38
|
+
@config_builder.yaml_loader = @yaml_loader
|
39
|
+
@config_builder.output_filter = @output_filter
|
40
|
+
|
41
|
+
@gem_source_index = Gem::SourceIndex.from_installed_gems
|
42
|
+
@gem_source_index_proxy = GemInstaller::GemSourceIndexProxy.new
|
43
|
+
@gem_source_index_proxy.gem_source_index = @gem_source_index
|
44
|
+
|
45
|
+
@source_index_search_adapter = GemInstaller::SourceIndexSearchAdapter.new
|
46
|
+
@source_index_search_adapter.gem_source_index_proxy = @gem_source_index_proxy
|
47
|
+
|
48
|
+
@outs_output_observer = GemInstaller::OutputObserver.new
|
49
|
+
@outs_output_observer.stream = :stdout
|
50
|
+
@outs_output_observer.register(@output_listener)
|
51
|
+
@errs_output_observer = GemInstaller::OutputObserver.new
|
52
|
+
@errs_output_observer.stream = :stderr
|
53
|
+
@errs_output_observer.register(@output_listener)
|
54
|
+
|
55
|
+
@enhanced_stream_ui = GemInstaller::EnhancedStreamUI.new
|
56
|
+
@enhanced_stream_ui.outs = @outs_output_observer
|
57
|
+
@enhanced_stream_ui.errs = @errs_output_observer
|
58
|
+
|
59
|
+
@gem_runner_class = Gem::GemRunner
|
60
|
+
@gem_cmd_manager_class = Gem::CommandManager
|
61
|
+
@exact_match_list_command = GemInstaller::ExactMatchListCommand.new
|
62
|
+
@gem_runner_proxy = GemInstaller::GemRunnerProxy.new
|
63
|
+
@gem_runner_proxy.gem_runner_class = @gem_runner_class
|
64
|
+
@gem_runner_proxy.gem_cmd_manager_class = @gem_cmd_manager_class
|
65
|
+
@gem_runner_proxy.output_listener = @output_listener
|
66
|
+
@gem_runner_proxy.enhanced_stream_ui = @enhanced_stream_ui
|
67
|
+
@gem_runner_proxy.options = @options
|
68
|
+
@gem_runner_proxy.output_filter = @output_filter
|
69
|
+
@gem_runner_proxy.exact_match_list_command = @exact_match_list_command
|
70
|
+
|
71
|
+
@gem_spec_manager = GemInstaller::GemSpecManager.new
|
72
|
+
@gem_spec_manager.valid_platform_selector = @valid_platform_selector
|
73
|
+
@gem_spec_manager.source_index_search_adapter = @source_index_search_adapter
|
74
|
+
@gem_spec_manager.output_filter = @output_filter
|
75
|
+
|
76
|
+
@gem_command_manager = GemInstaller::GemCommandManager.new
|
77
|
+
@gem_command_manager.gem_spec_manager = @gem_spec_manager
|
78
|
+
@gem_command_manager.gem_runner_proxy = @gem_runner_proxy
|
79
|
+
|
80
|
+
@rogue_gem_finder = GemInstaller::RogueGemFinder.new
|
81
|
+
@rogue_gem_finder.gem_command_manager = @gem_command_manager
|
82
|
+
@rogue_gem_finder.gem_spec_manager = @gem_spec_manager
|
83
|
+
@rogue_gem_finder.output_proxy = @output_proxy
|
84
|
+
|
85
|
+
@autogem = GemInstaller::Autogem.new
|
86
|
+
@autogem.gem_command_manager = @gem_command_manager
|
87
|
+
@autogem.gem_source_index_proxy = @gem_source_index_proxy
|
88
|
+
|
89
|
+
@gem_list_checker = GemInstaller::GemListChecker.new
|
90
|
+
@gem_list_checker.gem_command_manager = @gem_command_manager
|
91
|
+
@gem_list_checker.gem_arg_processor = @gem_arg_processor
|
92
|
+
@gem_list_checker.version_specifier = @version_specifier
|
93
|
+
|
94
|
+
@missing_dependency_finder = GemInstaller::MissingDependencyFinder.new
|
95
|
+
@missing_dependency_finder.gem_command_manager = @gem_command_manager
|
96
|
+
@missing_dependency_finder.gem_spec_manager = @gem_spec_manager
|
97
|
+
@missing_dependency_finder.gem_arg_processor = @gem_arg_processor
|
98
|
+
@missing_dependency_finder.output_filter = @output_filter
|
99
|
+
|
100
|
+
@install_processor = GemInstaller::InstallProcessor.new
|
101
|
+
@install_processor.options = @options
|
102
|
+
@install_processor.gem_list_checker = @gem_list_checker
|
103
|
+
@install_processor.gem_command_manager = @gem_command_manager
|
104
|
+
@install_processor.gem_spec_manager = @gem_spec_manager
|
105
|
+
@install_processor.missing_dependency_finder = @missing_dependency_finder
|
106
|
+
@install_processor.output_filter = @output_filter
|
107
|
+
|
108
|
+
if GemInstaller::RubyGemsVersionChecker.matches?('<=0.9.4')
|
109
|
+
@gem_interaction_handler = GemInstaller::GemInteractionHandler.new
|
110
|
+
@noninteractive_chooser_class = GemInstaller::NoninteractiveChooser
|
111
|
+
@gem_interaction_handler.noninteractive_chooser_class = @noninteractive_chooser_class
|
112
|
+
@gem_interaction_handler.valid_platform_selector = @valid_platform_selector
|
113
|
+
@gem_command_manager.gem_interaction_handler = @gem_interaction_handler
|
114
|
+
@enhanced_stream_ui.gem_interaction_handler = @gem_interaction_handler
|
115
|
+
end
|
116
|
+
|
117
|
+
@app = GemInstaller::Application.new
|
118
|
+
@app.autogem = @autogem
|
119
|
+
@app.rogue_gem_finder = @rogue_gem_finder
|
120
|
+
@app.options = @options
|
121
|
+
@app.arg_parser = @arg_parser
|
122
|
+
@app.config_builder = @config_builder
|
123
|
+
@app.install_processor = @install_processor
|
124
|
+
@app.output_filter = @output_filter
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
dir = File.dirname(__FILE__)
|
2
|
+
|
3
|
+
# require for rubygems package
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
# backward compability and version-checking stuff - must be required before it is used
|
7
|
+
require File.expand_path("#{dir}/rubygems_version_checker")
|
8
|
+
require File.expand_path("#{dir}/rubygems_version_warnings")
|
9
|
+
GemInstaller::RubyGemsVersionWarnings.print_warnings
|
10
|
+
|
11
|
+
# requires for rubygems internal classes
|
12
|
+
require 'rubygems/doc_manager'
|
13
|
+
require 'rubygems/config_file'
|
14
|
+
if GemInstaller::RubyGemsVersionChecker.matches?('<0.9.3')
|
15
|
+
require 'rubygems/cmd_manager'
|
16
|
+
else
|
17
|
+
require 'rubygems/command_manager'
|
18
|
+
end
|
19
|
+
require 'rubygems/gem_runner'
|
20
|
+
if GemInstaller::RubyGemsVersionChecker.matches?('<1.0.0')
|
21
|
+
require 'rubygems/remote_installer'
|
22
|
+
end
|
23
|
+
require 'rubygems/installer'
|
24
|
+
require 'rubygems/validator'
|
25
|
+
|
26
|
+
# these are order-dependent. Any better way???
|
27
|
+
unless GemInstaller::RubyGemsVersionChecker.matches?('<0.9.3')
|
28
|
+
require 'rubygems/commands/query_command'
|
29
|
+
require 'rubygems/commands/list_command'
|
30
|
+
end
|
31
|
+
|
32
|
+
# backward compability support for prior rubygems versions
|
33
|
+
require File.expand_path("#{dir}/backward_compatibility")
|
34
|
+
|
35
|
+
# third party libs
|
36
|
+
require 'erb'
|
37
|
+
require 'optparse'
|
38
|
+
require 'yaml'
|
39
|
+
require 'fileutils'
|
40
|
+
|
41
|
+
# third party lib extensions
|
42
|
+
require File.expand_path("#{dir}/rubygems_extensions")
|
43
|
+
|
44
|
+
# internal files
|
45
|
+
require File.expand_path("#{dir}/../geminstaller")
|
46
|
+
require File.expand_path("#{dir}/application")
|
47
|
+
require File.expand_path("#{dir}/arg_parser")
|
48
|
+
require File.expand_path("#{dir}/autogem")
|
49
|
+
require File.expand_path("#{dir}/config")
|
50
|
+
require File.expand_path("#{dir}/config_builder")
|
51
|
+
require File.expand_path("#{dir}/registry")
|
52
|
+
require File.expand_path("#{dir}/enhanced_stream_ui")
|
53
|
+
require File.expand_path("#{dir}/exact_match_list_command")
|
54
|
+
require File.expand_path("#{dir}/file_reader")
|
55
|
+
require File.expand_path("#{dir}/gem_arg_processor")
|
56
|
+
require File.expand_path("#{dir}/gem_command_manager")
|
57
|
+
require File.expand_path("#{dir}/gem_interaction_handler")
|
58
|
+
require File.expand_path("#{dir}/gem_list_checker")
|
59
|
+
require File.expand_path("#{dir}/gem_runner_proxy")
|
60
|
+
require File.expand_path("#{dir}/gem_source_index_proxy")
|
61
|
+
require File.expand_path("#{dir}/gem_spec_manager")
|
62
|
+
require File.expand_path("#{dir}/geminstaller_error")
|
63
|
+
require File.expand_path("#{dir}/geminstaller_access_error")
|
64
|
+
require File.expand_path("#{dir}/install_processor")
|
65
|
+
require File.expand_path("#{dir}/missing_dependency_finder")
|
66
|
+
require File.expand_path("#{dir}/missing_file_error")
|
67
|
+
require File.expand_path("#{dir}/noninteractive_chooser")
|
68
|
+
require File.expand_path("#{dir}/output_filter")
|
69
|
+
require File.expand_path("#{dir}/output_listener")
|
70
|
+
require File.expand_path("#{dir}/output_observer")
|
71
|
+
require File.expand_path("#{dir}/output_proxy")
|
72
|
+
require File.expand_path("#{dir}/rogue_gem_finder")
|
73
|
+
require File.expand_path("#{dir}/rubygems_exit")
|
74
|
+
require File.expand_path("#{dir}/ruby_gem")
|
75
|
+
require File.expand_path("#{dir}/source_index_search_adapter")
|
76
|
+
require File.expand_path("#{dir}/unexpected_prompt_error")
|
77
|
+
require File.expand_path("#{dir}/unauthorized_dependency_prompt_error")
|
78
|
+
require File.expand_path("#{dir}/valid_platform_selector")
|
79
|
+
require File.expand_path("#{dir}/version_specifier")
|
80
|
+
require File.expand_path("#{dir}/yaml_loader")
|
81
|
+
|
@@ -0,0 +1,195 @@
|
|
1
|
+
module GemInstaller
|
2
|
+
class RogueGemFinder
|
3
|
+
attr_writer :output_proxy, :gem_command_manager, :gem_spec_manager, :boilerplate_lines, :preinstalled_gem_names, :preinstalled_comment
|
4
|
+
|
5
|
+
def print_rogue_gems(config_gems, config_file_paths)
|
6
|
+
@boilerplate_lines ||= default_boilerplate_lines(config_gems, config_file_paths)
|
7
|
+
@preinstalled_gem_names ||= default_preinstalled_gem_names
|
8
|
+
@preinstalled_comment ||= default_preinstalled_comment
|
9
|
+
@config_gems_with_dependencies = []
|
10
|
+
config_gems.each do |config_gem|
|
11
|
+
process_gem(config_gem)
|
12
|
+
end
|
13
|
+
all_local_gems = @gem_spec_manager.all_local_gems
|
14
|
+
rogue_gems = []
|
15
|
+
all_local_gems.each do |local_gem|
|
16
|
+
config_match_found_for_local = false
|
17
|
+
@config_gems_with_dependencies.each do |config_gem|
|
18
|
+
name_matches = config_gem.name == local_gem.name
|
19
|
+
config_gem_version_requirement = Gem::Version::Requirement.new [config_gem.version]
|
20
|
+
local_gem_version = Gem::Version.new(local_gem.version)
|
21
|
+
version_matches = config_gem_version_requirement.satisfied_by?(local_gem_version)
|
22
|
+
if (name_matches and version_matches)
|
23
|
+
config_match_found_for_local = true
|
24
|
+
break
|
25
|
+
end
|
26
|
+
end
|
27
|
+
rogue_gems << local_gem unless config_match_found_for_local
|
28
|
+
end
|
29
|
+
yaml = format_to_yaml(rogue_gems)
|
30
|
+
|
31
|
+
handle_output(yaml)
|
32
|
+
end
|
33
|
+
|
34
|
+
def default_boilerplate_lines(config_gems, config_file_paths)
|
35
|
+
boilerplate = []
|
36
|
+
boilerplate << [
|
37
|
+
"#",
|
38
|
+
"# This is a GemInstaller config file (http://geminstaller.rubyforge.org)",
|
39
|
+
"# It was generated using the 'geminstaller --print-rogue-gems' option on #{Time.now}",
|
40
|
+
"#",
|
41
|
+
"# You can bootstrap your config by piping the output to a file: ",
|
42
|
+
"# 'geminstaller --print-rogue-gems > geminstaller.yml'",
|
43
|
+
"#",
|
44
|
+
"# You can then install these gems on another system by running geminstaller with this file.",
|
45
|
+
"#"
|
46
|
+
]
|
47
|
+
|
48
|
+
if config_file_paths.size == 0
|
49
|
+
boilerplate << "# Since there was no config file specified, the 'gems:' section below lists all gems on your system."
|
50
|
+
else
|
51
|
+
boilerplate << "# The following config file(s) and gems were already specified:"
|
52
|
+
boilerplate << "# Files:"
|
53
|
+
config_file_paths.each do |config_file_path|
|
54
|
+
boilerplate << "# * " + config_file_path
|
55
|
+
end
|
56
|
+
boilerplate << "# Gems:"
|
57
|
+
if config_gems.size > 0
|
58
|
+
config_gems.each do |config_gem|
|
59
|
+
boilerplate << "# * #{config_gem.name} #{config_gem.version}"
|
60
|
+
end
|
61
|
+
else
|
62
|
+
boilerplate << "# No Gems"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
boilerplate << "#"
|
66
|
+
boilerplate << "defaults:"
|
67
|
+
boilerplate << " install_options: --include-dependencies"
|
68
|
+
return boilerplate
|
69
|
+
end
|
70
|
+
|
71
|
+
def default_preinstalled_gem_names
|
72
|
+
# This is the list of preinstalled gems from the Ruby windows 1-click installer, v186-25
|
73
|
+
#
|
74
|
+
# fxri (0.3.6)
|
75
|
+
# Graphical interface to the RI documentation, with search engine.
|
76
|
+
#
|
77
|
+
# fxruby (1.6.6)
|
78
|
+
# FXRuby is the Ruby binding to the FOX GUI toolkit.
|
79
|
+
#
|
80
|
+
# hpricot (0.4)
|
81
|
+
# a swift, liberal HTML parser with a fantastic library
|
82
|
+
#
|
83
|
+
# log4r (1.0.5)
|
84
|
+
# Log4r is a comprehensive and flexible logging library for Ruby.
|
85
|
+
#
|
86
|
+
# rake (0.7.2)
|
87
|
+
# Ruby based make-like utility.
|
88
|
+
#
|
89
|
+
# sources (0.0.1)
|
90
|
+
# This package provides download sources for remote gem installation
|
91
|
+
#
|
92
|
+
# win32-clipboard (0.4.1)
|
93
|
+
# A package for interacting with the Windows clipboard
|
94
|
+
#
|
95
|
+
# win32-dir (0.3.1)
|
96
|
+
# Extra constants and methods for the Dir class on Windows.
|
97
|
+
#
|
98
|
+
# win32-eventlog (0.4.3)
|
99
|
+
# Interface for the MS Windows Event Log.
|
100
|
+
#
|
101
|
+
# win32-file (0.5.3)
|
102
|
+
# Extra or redefined methods for the File class on Windows.
|
103
|
+
#
|
104
|
+
# win32-file-stat (1.2.3)
|
105
|
+
# A File::Stat class tailored to MS Windows
|
106
|
+
#
|
107
|
+
# win32-process (0.5.1)
|
108
|
+
# Adds fork, wait, wait2, waitpid, waitpid2 and a special kill method
|
109
|
+
#
|
110
|
+
# win32-sapi (0.1.3)
|
111
|
+
# An interface to the MS SAPI (Sound API) library.
|
112
|
+
#
|
113
|
+
# win32-sound (0.4.0)
|
114
|
+
# A package for playing with sound on Windows.
|
115
|
+
#
|
116
|
+
# windows-pr (0.6.2)
|
117
|
+
# Windows functions and constants predefined via Win32API
|
118
|
+
|
119
|
+
if RUBY_PLATFORM =~ /mswin/
|
120
|
+
return [
|
121
|
+
'fxri',
|
122
|
+
'fxruby',
|
123
|
+
'hpricot',
|
124
|
+
'log4r',
|
125
|
+
'rake',
|
126
|
+
'sources',
|
127
|
+
'win32-clipboard',
|
128
|
+
'win32-dir',
|
129
|
+
'win32-eventlog',
|
130
|
+
'win32-file',
|
131
|
+
'win32-file-stat',
|
132
|
+
'win32-process',
|
133
|
+
'win32-sapi',
|
134
|
+
'win32-sound',
|
135
|
+
'windows-pr'
|
136
|
+
]
|
137
|
+
end
|
138
|
+
return ['sources']
|
139
|
+
end
|
140
|
+
|
141
|
+
def default_preinstalled_comment
|
142
|
+
"# NOTE: This gem may have been automatially installed with Ruby, and not actually be used by your app(s)."
|
143
|
+
end
|
144
|
+
|
145
|
+
def handle_output(yaml)
|
146
|
+
yaml_lines = yaml.split("\n")
|
147
|
+
yaml_doc_separator = yaml_lines.delete_at(0)
|
148
|
+
|
149
|
+
output = []
|
150
|
+
output.push(yaml_doc_separator)
|
151
|
+
|
152
|
+
output << @boilerplate_lines
|
153
|
+
|
154
|
+
yaml_lines.each do |yaml_line|
|
155
|
+
name_parser_regexp = /- name: (.*)/
|
156
|
+
yaml_line =~ name_parser_regexp
|
157
|
+
gem_name = $1
|
158
|
+
preinstalled_comment = ''
|
159
|
+
if @preinstalled_gem_names.include?(gem_name)
|
160
|
+
preinstalled_comment = " " + @preinstalled_comment
|
161
|
+
end
|
162
|
+
output.push yaml_line + preinstalled_comment
|
163
|
+
end
|
164
|
+
|
165
|
+
output_string = output.join("\n")
|
166
|
+
@output_proxy.sysout output_string
|
167
|
+
output_string
|
168
|
+
end
|
169
|
+
|
170
|
+
def process_gem(gem)
|
171
|
+
@config_gems_with_dependencies << gem
|
172
|
+
process_gem_dependencies(gem)
|
173
|
+
end
|
174
|
+
|
175
|
+
def process_gem_dependencies(gem)
|
176
|
+
# TODO: this method is duplicated in autogem Should abstract and take a block
|
177
|
+
matching_gems = @gem_spec_manager.local_matching_gems(gem)
|
178
|
+
matching_gems.each do |matching_gem|
|
179
|
+
dependency_gems = @gem_command_manager.dependency(matching_gem.name, matching_gem.version.to_s)
|
180
|
+
dependency_gems.each do |dependency_gem|
|
181
|
+
process_gem(dependency_gem)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
def format_to_yaml(gems)
|
187
|
+
names_and_versions = []
|
188
|
+
gems.each do |gem|
|
189
|
+
names_and_versions << {'name' => gem.name, 'version' => gem.version}
|
190
|
+
end
|
191
|
+
hash_for_yaml = {'gems' => names_and_versions}
|
192
|
+
YAML.dump(hash_for_yaml)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|