46: def execute
47: if options[:include_dependencies] then
48: alert "`gem install -y` is now default and will be removed"
49: alert "use --ignore-dependencies to install only the gems you list"
50: end
51:
52: installed_gems = []
53:
54: ENV['GEM_PATH'] = options[:install_dir]
55:
56: install_options = {
57: :env_shebang => options[:env_shebang],
58: :domain => options[:domain],
59: :force => options[:force],
60: :format_executable => options[:format_executable],
61: :ignore_dependencies => options[:ignore_dependencies],
62: :install_dir => options[:install_dir],
63: :security_policy => options[:security_policy],
64: :wrappers => options[:wrappers],
65: :bin_dir => options[:bin_dir]
66: }
67:
68: exit_code = 0
69:
70: get_all_gem_names.each do |gem_name|
71: begin
72: inst = Gem::DependencyInstaller.new install_options
73: inst.install gem_name, options[:version]
74:
75: inst.installed_gems.each do |spec|
76: say "Successfully installed #{spec.full_name}"
77: end
78:
79: installed_gems.push(*inst.installed_gems)
80: rescue Gem::InstallError => e
81: alert_error "Error installing #{gem_name}:\n\t#{e.message}"
82: exit_code |= 1
83: rescue Gem::GemNotFoundException => e
84: alert_error e.message
85: exit_code |= 2
86:
87:
88:
89:
90:
91:
92:
93: end
94: end
95:
96: unless installed_gems.empty? then
97: gems = installed_gems.length == 1 ? 'gem' : 'gems'
98: say "#{installed_gems.length} #{gems} installed"
99: end
100:
101:
102:
103:
104:
105: if options[:generate_ri] then
106: installed_gems.each do |gem|
107: Gem::DocManager.new(gem, options[:rdoc_args]).generate_ri
108: end
109: end
110:
111: if options[:generate_rdoc] then
112: installed_gems.each do |gem|
113: Gem::DocManager.new(gem, options[:rdoc_args]).generate_rdoc
114: end
115: end
116:
117: if options[:test] then
118: installed_gems.each do |spec|
119: gem_spec = Gem::SourceIndex.from_installed_gems.search(spec.name, spec.version.version).first
120: result = Gem::Validator.new.unit_test(gem_spec)
121: if result and not result.passed?
122: unless ask_yes_no("...keep Gem?", true) then
123: Gem::Uninstaller.new(spec.name, :version => spec.version.version).uninstall
124: end
125: end
126: end
127: end
128:
129: raise Gem::SystemExitException, exit_code
130: end