From: Toshi MARUYAMA Date: Fri, 11 Mar 2011 00:42:40 +0000 (+0000) Subject: scm: cvs: add new method 'scm_cmd' to wrap shellout. X-Git-Tag: 1.2.0~760 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d3d7ea08f421645a071cbbf9905f6d164325a553;p=redmine.git scm: cvs: add new method 'scm_cmd' to wrap shellout. Refer Mercurial adapter r4830. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5082 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/lib/redmine/scm/adapters/cvs_adapter.rb b/lib/redmine/scm/adapters/cvs_adapter.rb index a557199a3..0a0f45540 100644 --- a/lib/redmine/scm/adapters/cvs_adapter.rb +++ b/lib/redmine/scm/adapters/cvs_adapter.rb @@ -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