From ea35fff5bf4dde17fe67320118a9b73da31a81c2 Mon Sep 17 00:00:00 2001
From: Jean-Philippe Lang <jp_lang@yahoo.fr>
Date: Sat, 15 Dec 2007 12:14:40 +0000
Subject: [PATCH] SCM adapters: moved Errno::ENOENT exception rescuing to the
 abstract adapter.

git-svn-id: http://redmine.rubyforge.org/svn/trunk@1001 e93f8b46-1217-0410-a6f0-8f06a7374b81
---
 lib/redmine/scm/adapters/abstract_adapter.rb   | 12 +++++++++---
 lib/redmine/scm/adapters/bazaar_adapter.rb     | 14 ++------------
 lib/redmine/scm/adapters/cvs_adapter.rb        | 10 ----------
 lib/redmine/scm/adapters/darcs_adapter.rb      |  8 +-------
 lib/redmine/scm/adapters/mercurial_adapter.rb  | 13 +------------
 lib/redmine/scm/adapters/subversion_adapter.rb | 12 +-----------
 6 files changed, 14 insertions(+), 55 deletions(-)

diff --git a/lib/redmine/scm/adapters/abstract_adapter.rb b/lib/redmine/scm/adapters/abstract_adapter.rb
index 720a4e9d9..c93fc6350 100644
--- a/lib/redmine/scm/adapters/abstract_adapter.rb
+++ b/lib/redmine/scm/adapters/abstract_adapter.rb
@@ -112,9 +112,15 @@ module Redmine
       
         def shellout(cmd, &block)
           logger.debug "Shelling out: #{cmd}" if logger && logger.debug?
-          IO.popen(cmd, "r+") do |io|
-            io.close_write
-            block.call(io) if block_given?
+          begin
+            IO.popen(cmd, "r+") do |io|
+              io.close_write
+              block.call(io) if block_given?
+            end
+          rescue Errno::ENOENT => e
+            # The command failed, log it and re-raise
+            log.error("SCM command failed: #{cmd}\n  with: #{e.message}")
+            raise CommandFailed
           end
         end  
       end
diff --git a/lib/redmine/scm/adapters/bazaar_adapter.rb b/lib/redmine/scm/adapters/bazaar_adapter.rb
index 4d7afeacc..11a44b7cf 100644
--- a/lib/redmine/scm/adapters/bazaar_adapter.rb
+++ b/lib/redmine/scm/adapters/bazaar_adapter.rb
@@ -40,7 +40,7 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           info
-        rescue Errno::ENOENT => e
+        rescue CommandFailed
           return nil
         end
         
@@ -81,8 +81,6 @@ module Redmine
           return nil if $? && $?.exitstatus != 0
           logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug?
           entries.sort_by_name
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
     
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
@@ -144,8 +142,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           revisions
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
         
         def diff(path, identifier_from, identifier_to=nil, type="inline")
@@ -163,9 +159,7 @@ module Redmine
             end
           end
           #return nil if $? && $?.exitstatus != 0
-          DiffTableList.new diff, type    
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
+          DiffTableList.new diff, type   
         end
         
         def cat(path, identifier=nil)
@@ -179,8 +173,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           cat
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
         
         def annotate(path, identifier=nil)
@@ -198,8 +190,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           blame
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
       end
     end
diff --git a/lib/redmine/scm/adapters/cvs_adapter.rb b/lib/redmine/scm/adapters/cvs_adapter.rb
index 5c6c1775b..73dc9b6c4 100644
--- a/lib/redmine/scm/adapters/cvs_adapter.rb
+++ b/lib/redmine/scm/adapters/cvs_adapter.rb
@@ -103,8 +103,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           entries.sort_by_name
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end  
 
         STARTLOG="----------------------------"
@@ -234,8 +232,6 @@ module Redmine
               end 
             end
           end
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end  
         
         def diff(path, identifier_from, identifier_to=nil, type="inline")
@@ -250,8 +246,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           DiffTableList.new diff, type
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end  
         
         def cat(path, identifier=nil)
@@ -265,8 +259,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           cat
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end  
 
         def annotate(path, identifier=nil)
@@ -283,8 +275,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           blame
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
          
         private
diff --git a/lib/redmine/scm/adapters/darcs_adapter.rb b/lib/redmine/scm/adapters/darcs_adapter.rb
index 34b36202b..2955b26dc 100644
--- a/lib/redmine/scm/adapters/darcs_adapter.rb
+++ b/lib/redmine/scm/adapters/darcs_adapter.rb
@@ -70,8 +70,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           entries.sort_by_name
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
     
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
@@ -99,8 +97,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           revisions
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
         
         def diff(path, identifier_from, identifier_to=nil, type="inline")
@@ -117,8 +113,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           DiffTableList.new diff, type    
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
         
         private
@@ -154,7 +148,7 @@ module Redmine
             end
           end
           paths
-        rescue Errno::ENOENT => e
+        rescue CommandFailed
           paths
         end
       end
diff --git a/lib/redmine/scm/adapters/mercurial_adapter.rb b/lib/redmine/scm/adapters/mercurial_adapter.rb
index 3cbf01f91..1b9cab47c 100644
--- a/lib/redmine/scm/adapters/mercurial_adapter.rb
+++ b/lib/redmine/scm/adapters/mercurial_adapter.rb
@@ -36,7 +36,7 @@ module Redmine
                            :lastrev => revisions(nil,nil,nil,{:limit => 1}).last
                          })
           info
-        rescue Errno::ENOENT => e
+        rescue CommandFailed
           return nil
         end
         
@@ -58,8 +58,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           entries.sort_by_name
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
   
         def entry(path=nil, identifier=nil)
@@ -119,8 +117,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           revisions
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
         
         def diff(path, identifier_from, identifier_to=nil, type="inline")
@@ -140,9 +136,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           DiffTableList.new diff, type
-    
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
         
         def cat(path, identifier=nil)
@@ -154,8 +147,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           cat
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
         
         def annotate(path, identifier=nil)
@@ -173,8 +164,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           blame
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
       end
     end
diff --git a/lib/redmine/scm/adapters/subversion_adapter.rb b/lib/redmine/scm/adapters/subversion_adapter.rb
index d55b8712e..f698f4a62 100644
--- a/lib/redmine/scm/adapters/subversion_adapter.rb
+++ b/lib/redmine/scm/adapters/subversion_adapter.rb
@@ -47,7 +47,7 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           info
-        rescue Errno::ENOENT => e
+        rescue CommandFailed
           return nil
         end
         
@@ -91,8 +91,6 @@ module Redmine
           return nil if $? && $?.exitstatus != 0
           logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug?
           entries.sort_by_name
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
     
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
@@ -130,8 +128,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           revisions
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
         
         def diff(path, identifier_from, identifier_to=nil, type="inline")
@@ -154,8 +150,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           DiffTableList.new diff, type    
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
         
         def cat(path, identifier=nil)
@@ -169,8 +163,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           cat
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
         
         def annotate(path, identifier=nil)
@@ -186,8 +178,6 @@ module Redmine
           end
           return nil if $? && $?.exitstatus != 0
           blame
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
         
         private
-- 
GitLab