59bafdad60970d85c620d54b1d19016a1a817355

Author: Robin Luckey

Date: 2009-05-19 15:52:59 -0700

[FIX] Hg and Git: better SourceForge detection in guess_forge()

diff --git a/lib/scm/adapters/cvs/validation.rb b/lib/scm/adapters/cvs/validation.rb index 3cd8ff8..97a8275 100644 --- a/lib/scm/adapters/cvs/validation.rb +++ b/lib/scm/adapters/cvs/validation.rb @@ -71,7 +71,7 @@ module Scm::Adapters # Based on the URL, take a guess about which forge this code is hosted on. def guess_forge - @url =~ /.*pserver.*@(([^\.]+\.)?cvs\.)?(dev\.)?([^:]+):\//i ? $4.downcase : nil + @url =~ /.*pserver.*@(([^\.]+\.)?(cvs|dev)\.)?([^:]+):\//i ? $4.downcase : nil end end end diff --git a/lib/scm/adapters/git/validation.rb b/lib/scm/adapters/git/validation.rb index ef5cc60..b3607b6 100644 --- a/lib/scm/adapters/git/validation.rb +++ b/lib/scm/adapters/git/validation.rb @@ -18,5 +18,15 @@ module Scm::Adapters return unless valid? @errors << [:failed, "The server did not respond to the 'git-ls-remote' command. Is the URL correct?"] unless self.exists? end + + def guess_forge + u = @url =~ /:\/\/(.*\.?git\.)?([^\/^:]+)(:\d+)?\// ? $2 : nil + case u + when /(sourceforge\.net$)/ + $1 + else + u + end + end end end diff --git a/lib/scm/adapters/hg/validation.rb b/lib/scm/adapters/hg/validation.rb index bfeb90f..e289547 100644 --- a/lib/scm/adapters/hg/validation.rb +++ b/lib/scm/adapters/hg/validation.rb @@ -12,5 +12,15 @@ module Scm::Adapters return unless valid? @errors << [:failed, "The server did not respond to the 'hg id' command. Is the URL correct?"] unless self.exist? end + + def guess_forge + u = @url =~ /:\/\/(.*\.?hg\.)?([^\/^:]+)(:\d+)?\// ? $2 : nil + case u + when /(sourceforge\.net$)/ + $1 + else + u + end + end end end diff --git a/test/unit/cvs_validation_test.rb b/test/unit/cvs_validation_test.rb index c3fe9bc..a50e016 100644 --- a/test/unit/cvs_validation_test.rb +++ b/test/unit/cvs_validation_test.rb @@ -130,11 +130,17 @@ module Scm::Adapters cvs = CvsAdapter.new(:url => "garbage_in_garbage_out") assert_equal nil, cvs.guess_forge + cvs = CvsAdapter.new(:url => ':pserver:anonymous:@boost.cvs.sourceforge.net:/cvsroot/boost') + assert_equal 'sourceforge.net', cvs.guess_forge + cvs = CvsAdapter.new(:url => ':pserver:guest:@cvs.dev.java.net:/cvs') assert_equal 'java.net', cvs.guess_forge cvs = CvsAdapter.new(:url => ":PSERVER:ANONCVS:@CVS.DEV.JAVA.NET:/cvs") assert_equal 'java.net', cvs.guess_forge + + cvs = CvsAdapter.new(:url => ":pserver:guest:@colorchooser.dev.java.net:/cvs") + assert_equal 'java.net', cvs.guess_forge end end end diff --git a/test/unit/git_validation_test.rb b/test/unit/git_validation_test.rb index a404675..f30f020 100644 --- a/test/unit/git_validation_test.rb +++ b/test/unit/git_validation_test.rb @@ -34,6 +34,9 @@ module Scm::Adapters git = GitAdapter.new(:url => nil) assert_equal nil, git.guess_forge + git = GitAdapter.new(:url => 'git://methabot.git.sourceforge.net/gitroot/methabot') + assert_equal 'sourceforge.net', git.guess_forge + git = GitAdapter.new( :url => 'http://kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.17.y.git') assert_equal 'kernel.org', git.guess_forge end diff --git a/test/unit/hg_validation_test.rb b/test/unit/hg_validation_test.rb index 212b441..f0385af 100644 --- a/test/unit/hg_validation_test.rb +++ b/test/unit/hg_validation_test.rb @@ -49,6 +49,12 @@ module Scm::Adapters hg = HgAdapter.new( :url => 'http://www.selenic.com/repo/hello') assert_equal 'www.selenic.com', hg.guess_forge + + hg = HgAdapter.new( :url => 'http://algoc.hg.sourceforge.net:8000/hgroot/algoc') + assert_equal 'sourceforge.net', hg.guess_forge + + hg = HgAdapter.new( :url => 'http://poliqarp.sourceforge.net/hg/poliqarp/') + assert_equal 'sourceforge.net', hg.guess_forge end end end