]> source.dussan.org Git - redmine.git/commitdiff
scm: cvs: add new method 'scm_cmd' to wrap shellout.
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Fri, 11 Mar 2011 00:42:40 +0000 (00:42 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Fri, 11 Mar 2011 00:42:40 +0000 (00:42 +0000)
Refer Mercurial adapter r4830.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5082 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/scm/adapters/cvs_adapter.rb

index a557199a3efd66cacb8d64fbeac0b28f6d06c9a4..0a0f455406496aefde5acd4f7829b67380bc8247 100644 (file)
@@ -25,6 +25,9 @@ module Redmine
         # CVS executable name
         CVS_BIN = Redmine::Configuration['scm_cvs_command'] || "cvs"
 
+        # raised if scm command exited with error, e.g. unknown revision.
+        class ScmCommandAborted < CommandFailed; end
+
         class << self
           def client_command
             @@bin    ||= CVS_BIN
@@ -338,8 +341,19 @@ module Redmine
         def normalize_path(path)
           path.sub(/^(\/)*(.*)/,'\2').sub(/(.*)(,v)+/,'\1')
         end   
+
+        def scm_cmd(*args, &block)
+          full_args = [CVS_BIN, '-d', root_url]
+          full_args += args
+          ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
+          if $? && $?.exitstatus != 0
+            raise ScmCommandAborted, "cvs exited with non-zero status: #{$?.exitstatus}"
+          end
+          ret
+        end
+        private :scm_cmd
       end  
-  
+
       class CvsRevisionHelper
         attr_accessor :complete_rev, :revision, :base, :branchid