At 12:37 AM -0700 5/15/08, Eric Hodel wrote:
>On May 12, 2008, at 10:04 AM, Stephen Bannasch wrote:
>>I've got an alpha gem I am working on called make_models and I'm hosting it
>>now on my own gem repository. Both main and arrayfields are gem dependencies
>>of make_models. If I download it and install from a file the dependencies
>>are resolved.
>>
>>I got this report from someone else who tried to install it from my gem
>>repository without having the prerequisite gems:
>>
>>>sudo gem install make_models --source=http://rails.dev.concord.org/gems/
>>>
>>>I get this error:
>>>
>>>(9:27:59) [tikal:/web/rails] pburney% sudo gem install make_models
>>>--source=http://rails.dev.concord.org/gems/
>>>Password:
>>>Bulk updating Gem source index for:
>>><http://rails.dev.concord.org/gems/>http://rails.dev.concord.org/gems/
>>>ERROR: Error installing make_models:
>>> make_models requires main (>= 2.8.0)
>>
>>Has anybody else seen this problem?
>
>There is no main gem in that gem repository. Either add main to that
>repository, or include both that repository and your repository as sources.
I had assumed that the installed source repositories (default and any installed
with gem sources --add) would be included in the search strategy used for
dependency resolution.
It wasn't immediately obvious how to to specify two or more gem repositories to
use for resolving install dependencies without making them permanent.
I looked at the code in local_remote_options.rb:
Gem::LocalRemoteOptions#add_source_option
# Add the --source option
def add_source_option
accept_uri_http
add_option(:"Local/Remote", '--source URL', URI::HTTP,
'Use URL as the remote source for gems') do |value, options|
if options[:added_source] then
Gem.sources << value
else
options[:added_source] = true
Gem.sources.replace [value]
end
end
end
OK ... now I understand ...
Here's a doc diff that adds a bit more explanation about how it currently works:
$ svn diff lib/rubygems/local_remote_options.rb
Index: lib/rubygems/local_remote_options.rb
===================================================================
--- lib/rubygems/local_remote_options.rb (revision 1715)
+++ lib/rubygems/local_remote_options.rb (working copy)
@@ -73,7 +73,8 @@
accept_uri_http
add_option(:"Local/Remote", '--source URL', URI::HTTP,
- 'Use URL as the remote source for gems') do |value, options|
+ 'Use URL as the remote source for gems instead of installed
sources'
+ 'this option may be used multiple times to specify additional
sources') do |value, options|
if options[:added_source] then
Gem.sources << value
else
----------------------------------------------------------------------------------
And for anybody finding this later with Google here's a specific answer:
I've already uninstalled my gem make_models. The gem arrayfields is a
dependency for make_models but is not in my repository. I'm uninstalling it for
this test.
$ sudo gem uninstall arrayfields
Now specifying both the default rubygems repository and my own repository
(where make_models is hosted) installs the make_models gem from my custom
repository and arrayfields from the rubygems repository.
$ sudo gem install make_models --source=http://gems.rubyforge.org/
--source=http://rails.dev.concord.org/gems/
Updating metadata for 2 gems from http://rails.dev.concord.org/gems/
..
complete
Successfully installed arrayfields-4.5.0
Successfully installed make_models-0.0.1.13254
2 gems installed
Installing ri documentation for make_models-0.0.1.13254...
Installing RDoc documentation for make_models-0.0.1.13254...
_______________________________________________
Rubygems-developers mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rubygems-developers