diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index f647c083ad..174f680e98 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,7 @@
*1.1.1* (April 6th, 2005)
+* Enhances plugin#discover allowing it to discover svn:// like URIs (closes #4565) [ruben.nine@gmail.com]
+
* Update to Prototype 1.5.0_rc0 [Sam Stephenson]
* Fixed that the -r/--ruby path option of the rails command was not being respected #4549 [ryan.raaum@gmail.com]
diff --git a/railties/lib/commands/plugin.rb b/railties/lib/commands/plugin.rb
index 664e2f795f..dd32f5416a 100644
--- a/railties/lib/commands/plugin.rb
+++ b/railties/lib/commands/plugin.rb
@@ -31,7 +31,7 @@
# look like subversion repositories with plugins:
# http://wiki.rubyonrails.org/rails/pages/Plugins
#
-# * Unless you specify that you want to use svn, script/plugin uses plain ole
+# * Unless you specify that you want to use svn, script/plugin uses plain old
# HTTP for downloads. The following bullets are true if you specify
# that you want to use svn.
#
@@ -107,7 +107,7 @@ class RailsEnvironment
def use_checkout?
# this is a bit of a guess. we assume that if the rails environment
- # is under subversion than they probably want the plugin checked out
+ # is under subversion then they probably want the plugin checked out
# instead of exported. This can be overridden on the command line
File.directory?("#{root}/.svn")
end
@@ -161,6 +161,7 @@ class Plugin
def install(method=nil, options = {})
method ||= rails_env.best_install_method?
+ method = :export if method == :http and @uri =~ /svn:\/\/*/
uninstall if installed? and options[:force]
@@ -655,7 +656,7 @@ module Commands
puts "Scraping #{uri}" if $verbose
dupes = []
content = open(uri).each do |line|
- if line =~ /]*href=['"]([^'"]*)['"]/
+ if line =~ /]*href=['"]([^'"]*)['"]/ or line =~ /(svn:\/\/[^<|\n]*)/
uri = $1
if uri =~ /\/plugins\// and uri !~ /\/browser\//
uri = extract_repository_uri(uri)
@@ -813,9 +814,13 @@ class RecursiveHTTPFetcher
def ls
@urls_to_fetch.collect do |url|
- open(url) do |stream|
- links("", stream.read)
- end rescue nil
+ if url =~ /^svn:\/\/.*/
+ `svn ls #{url}`.split("\n").map {|entry| "/#{entry}"} rescue nil
+ else
+ open(url) do |stream|
+ links("", stream.read)
+ end rescue nil
+ end
end.flatten
end