Index: trunk/lib/redmine/scm/adapters/abstract_adapter.rb
===================================================================
--- trunk/lib/redmine/scm/adapters/abstract_adapter.rb	(revision 1000)
+++ trunk/lib/redmine/scm/adapters/abstract_adapter.rb	(revision 1001)
@@ -112,9 +112,15 @@
       
         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
Index: trunk/lib/redmine/scm/adapters/bazaar_adapter.rb
===================================================================
--- trunk/lib/redmine/scm/adapters/bazaar_adapter.rb	(revision 1000)
+++ trunk/lib/redmine/scm/adapters/bazaar_adapter.rb	(revision 1001)
@@ -40,7 +40,7 @@
           end
           return nil if $? && $?.exitstatus != 0
           info
-        rescue Errno::ENOENT => e
+        rescue CommandFailed
           return nil
         end
         
@@ -81,8 +81,6 @@
           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 @@
           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 @@
             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 @@
           end
           return nil if $? && $?.exitstatus != 0
           cat
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
         
         def annotate(path, identifier=nil)
@@ -198,8 +190,6 @@
           end
           return nil if $? && $?.exitstatus != 0
           blame
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
       end
     end
Index: trunk/lib/redmine/scm/adapters/cvs_adapter.rb
===================================================================
--- trunk/lib/redmine/scm/adapters/cvs_adapter.rb	(revision 1000)
+++ trunk/lib/redmine/scm/adapters/cvs_adapter.rb	(revision 1001)
@@ -103,8 +103,6 @@
           end
           return nil if $? && $?.exitstatus != 0
           entries.sort_by_name
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end  
 
         STARTLOG="----------------------------"
@@ -234,8 +232,6 @@
               end 
             end
           end
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end  
         
         def diff(path, identifier_from, identifier_to=nil, type="inline")
@@ -250,8 +246,6 @@
           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 @@
           end
           return nil if $? && $?.exitstatus != 0
           cat
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end  
 
         def annotate(path, identifier=nil)
@@ -283,8 +275,6 @@
           end
           return nil if $? && $?.exitstatus != 0
           blame
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
          
         private
Index: trunk/lib/redmine/scm/adapters/darcs_adapter.rb
===================================================================
--- trunk/lib/redmine/scm/adapters/darcs_adapter.rb	(revision 1000)
+++ trunk/lib/redmine/scm/adapters/darcs_adapter.rb	(revision 1001)
@@ -70,8 +70,6 @@
           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 @@
           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 @@
           end
           return nil if $? && $?.exitstatus != 0
           DiffTableList.new diff, type    
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
         
         private
@@ -154,7 +148,7 @@
             end
           end
           paths
-        rescue Errno::ENOENT => e
+        rescue CommandFailed
           paths
         end
       end
Index: trunk/lib/redmine/scm/adapters/mercurial_adapter.rb
===================================================================
--- trunk/lib/redmine/scm/adapters/mercurial_adapter.rb	(revision 1000)
+++ trunk/lib/redmine/scm/adapters/mercurial_adapter.rb	(revision 1001)
@@ -36,7 +36,7 @@
                            :lastrev => revisions(nil,nil,nil,{:limit => 1}).last
                          })
           info
-        rescue Errno::ENOENT => e
+        rescue CommandFailed
           return nil
         end
         
@@ -58,8 +58,6 @@
           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 @@
           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 @@
           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 @@
           end
           return nil if $? && $?.exitstatus != 0
           cat
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
         
         def annotate(path, identifier=nil)
@@ -173,8 +164,6 @@
           end
           return nil if $? && $?.exitstatus != 0
           blame
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
       end
     end
Index: trunk/lib/redmine/scm/adapters/subversion_adapter.rb
===================================================================
--- trunk/lib/redmine/scm/adapters/subversion_adapter.rb	(revision 1000)
+++ trunk/lib/redmine/scm/adapters/subversion_adapter.rb	(revision 1001)
@@ -47,7 +47,7 @@
           end
           return nil if $? && $?.exitstatus != 0
           info
-        rescue Errno::ENOENT => e
+        rescue CommandFailed
           return nil
         end
         
@@ -91,8 +91,6 @@
           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 @@
           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 @@
           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 @@
           end
           return nil if $? && $?.exitstatus != 0
           cat
-        rescue Errno::ENOENT => e
-          raise CommandFailed    
         end
         
         def annotate(path, identifier=nil)
@@ -186,8 +178,6 @@
           end
           return nil if $? && $?.exitstatus != 0
           blame
-        rescue Errno::ENOENT => e
-          raise CommandFailed
         end
         
         private
