2d4d07d
Mon Dec 24 16:18:57 2007  Eric Hodel  <drbrain@segment7.net>
2d4d07d
2d4d07d
	* lib/rdoc/ri/ri_options.rb:  Fix ri --help listing of gem ri paths.
2d4d07d
	Merge of r14567 and r14569 from trunk.
2d4d07d
2d4d07d
	* lib/rdoc/ri/ri_paths.rb:  Fix duplication of ri data for multiple
2d4d07d
	gems.  Merge of r14567 from trunk
2d4d07d
2d4d07d
Index: ruby_1_8/lib/rdoc/ri/ri_options.rb
2d4d07d
===================================================================
2d4d07d
--- ruby_1_8/lib/rdoc/ri/ri_options.rb	(revision 14581)
2d4d07d
+++ ruby_1_8/lib/rdoc/ri/ri_options.rb	(revision 14582)
2d4d07d
@@ -62,10 +62,11 @@
2d4d07d
           (RI::Paths::HOMEDIR || "No ~/.rdoc found") ],
bbad66e
 
bbad66e
         [ "--gems",         nil,    nil,
2d4d07d
-          "Include documentation from Rubygems:\n  " +
bbad66e
-          (RI::Paths::GEMDIRS ? "#{Gem.path}/doc/*/ri" :
2d4d07d
-                                "No Rubygems ri found.") ],
2d4d07d
-                                                           
2d4d07d
+          "Include documentation from RubyGems:\n" +
2d4d07d
+          (RI::Paths::GEMDIRS ?
2d4d07d
+           Gem.path.map { |dir| "  #{dir}/doc/*/ri" }.join("\n") :
2d4d07d
+           "No Rubygems ri found.") ],
2d4d07d
+
bbad66e
         [ "--format",       "-f",   "<name>",
2d4d07d
           "Format to use when displaying output:\n" +
2d4d07d
           "   " + RI::TextFormatter.list + "\n" +
2d4d07d
@@ -116,7 +117,8 @@
2d4d07d
       def OptionList.error(msg)
2d4d07d
         $stderr.puts
2d4d07d
         $stderr.puts msg
2d4d07d
-        $stderr.puts "\nFor help on options, try 'ri --help'\n\n"
2d4d07d
+        name = File.basename $PROGRAM_NAME
2d4d07d
+        $stderr.puts "\nFor help on options, try '#{name} --help'\n\n"
2d4d07d
         exit 1
2d4d07d
       end
2d4d07d
       
2d4d07d
@@ -136,7 +138,11 @@
bbad66e
           RI::Paths::HOMEDIR
bbad66e
         ]
bbad66e
 
bbad66e
-        directories << "#{Gem.path}/doc/*/ri" if RI::Paths::GEMDIRS
2d4d07d
+        if RI::Paths::GEMDIRS then
2d4d07d
+          Gem.path.each do |dir|
2d4d07d
+            directories << "#{dir}/doc/*/ri"
2d4d07d
+          end
bbad66e
+        end
bbad66e
 
bbad66e
         directories = directories.join("\n    ")
bbad66e
 
2d4d07d
@@ -157,16 +163,16 @@
2d4d07d
 
2d4d07d
           For example:
2d4d07d
 
2d4d07d
-              ri  File
2d4d07d
-              ri  File.new
2d4d07d
-              ri  F.n
2d4d07d
-              ri  zip
2d4d07d
+              #{name}  File
2d4d07d
+              #{name}  File.new
2d4d07d
+              #{name}  F.n
2d4d07d
+              #{name}  zip
2d4d07d
 
2d4d07d
           Note that shell quoting may be required for method names
2d4d07d
           containing punctuation:
2d4d07d
 
2d4d07d
-              ri 'Array.[]'
2d4d07d
-              ri compact\\!
2d4d07d
+              #{name} 'Array.[]'
2d4d07d
+              #{name} compact\\!
2d4d07d
 
2d4d07d
           By default ri searches for documentation in the following
2d4d07d
           directories:
2d4d07d
@@ -180,8 +186,8 @@
2d4d07d
         EOT
2d4d07d
 
2d4d07d
         if short_form
2d4d07d
-          puts "For help on options, type 'ri -h'"
2d4d07d
-          puts "For a list of classes I know about, type 'ri -c'"
2d4d07d
+          puts "For help on options, type '#{name} -h'"
2d4d07d
+          puts "For a list of classes I know about, type '#{name} -c'"
2d4d07d
         else
2d4d07d
           puts "Options:\n\n"
2d4d07d
           OPTION_LIST.each do|long, short, arg, desc|
2d4d07d
Index: ruby_1_8/lib/rdoc/ri/ri_paths.rb
2d4d07d
===================================================================
2d4d07d
--- ruby_1_8/lib/rdoc/ri/ri_paths.rb	(revision 14581)
2d4d07d
+++ ruby_1_8/lib/rdoc/ri/ri_paths.rb	(revision 14582)
2d4d07d
@@ -44,8 +44,29 @@
bbad66e
 
bbad66e
     begin
abf129c
       require 'rubygems'
bbad66e
-      GEMDIRS = Dir["#{Gem.path}/doc/*/ri"]
2d4d07d
-      GEMDIRS.each { |path| RI::Paths::PATH << path }
2d4d07d
+
2d4d07d
+      # HACK dup'd from Gem.latest_partials and friends
2d4d07d
+      all_paths = []
2d4d07d
+
2d4d07d
+      all_paths = Gem.path.map do |dir|
2d4d07d
+        Dir[File.join(dir, 'doc', '*', 'ri')]
2d4d07d
+      end.flatten
2d4d07d
+
2d4d07d
+      ri_paths = {}
2d4d07d
+
2d4d07d
+      all_paths.each do |dir|
2d4d07d
+        base = File.basename File.dirname(dir)
2d4d07d
+        if base =~ /(.*)-((\d+\.)*\d+)/ then
2d4d07d
+          name, version = $1, $2
2d4d07d
+          ver = Gem::Version.new version
2d4d07d
+          if ri_paths[name].nil? or ver > ri_paths[name][0] then
2d4d07d
+            ri_paths[name] = [ver, dir]
2d4d07d
+          end
2d4d07d
+        end
2d4d07d
+      end
2d4d07d
+
2d4d07d
+      GEMDIRS = ri_paths.map { |k,v| v.last }.sort
2d4d07d
+      GEMDIRS.each { |dir| RI::Paths::PATH << dir }
bbad66e
     rescue LoadError
bbad66e
       GEMDIRS = nil
2d4d07d
     end
2d4d07d
@@ -55,7 +76,7 @@
2d4d07d
 
2d4d07d
     def self.path(use_system, use_site, use_home, use_gems, *extra_dirs)
2d4d07d
       path = raw_path(use_system, use_site, use_home, use_gems, *extra_dirs)
2d4d07d
-      return path.select { |path| File.directory? path }
2d4d07d
+      return path.select { |directory| File.directory? directory }
2d4d07d
     end
2d4d07d
 
2d4d07d
     # Returns the selected documentation directories including nonexistent