diff options
author | Toshi MARUYAMA <marutosijp2@yahoo.co.jp> | 2011-03-11 00:42:40 +0000 |
---|---|---|
committer | Toshi MARUYAMA <marutosijp2@yahoo.co.jp> | 2011-03-11 00:42:40 +0000 |
commit | d3d7ea08f421645a071cbbf9905f6d164325a553 (patch) | |
tree | ae2219fce49ff03dd4b2d3df0f6b95519a65697c /lib/redmine/scm/adapters/cvs_adapter.rb | |
parent | f41848fda457d6c35d1bf22bb302e351b3ddd93d (diff) | |
download | redmine-d3d7ea08f421645a071cbbf9905f6d164325a553.tar.gz redmine-d3d7ea08f421645a071cbbf9905f6d164325a553.zip |
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
Diffstat (limited to 'lib/redmine/scm/adapters/cvs_adapter.rb')
-rw-r--r-- | lib/redmine/scm/adapters/cvs_adapter.rb | 16 |
1 files changed, 15 insertions, 1 deletions
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 |