]> source.dussan.org Git - redmine.git/commitdiff
scm: git: add new method 'scm_cmd' to wrap shellout.
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Sun, 20 Feb 2011 01:33:30 +0000 (01:33 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Sun, 20 Feb 2011 01:33:30 +0000 (01:33 +0000)
Refer Mercurial adapter r4830.

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

lib/redmine/scm/adapters/git_adapter.rb

index f6a9b0d7cfe3bb82e9f1fa13f448f66b286162a2..d23fc2240c362c37a0335e86f198fbdcd9413a04 100644 (file)
@@ -24,6 +24,9 @@ module Redmine
         # Git executable name
         GIT_BIN = Redmine::Configuration['scm_git_command'] || "git"
 
+        # raised if scm command exited with error, e.g. unknown revision.
+        class ScmCommandAborted < CommandFailed; end
+
         class << self
           def client_command
             @@bin    ||= GIT_BIN
@@ -82,9 +85,9 @@ module Redmine
         end
 
         def default_branch
-          branches.include?('master') ? 'master' : branches.first 
+          branches.include?('master') ? 'master' : branches.first
         end
-        
+
         def entries(path=nil, identifier=nil)
           path ||= ''
           entries = Entries.new
@@ -279,7 +282,7 @@ module Redmine
           end
           blame
         end
-        
+
         def cat(path, identifier=nil)
           if identifier.nil?
             identifier = 'HEAD'
@@ -300,6 +303,19 @@ module Redmine
             identifier[0,8]
           end
         end
+
+        def scm_cmd(*args, &block)
+          repo_path = root_url || url
+          full_args = [GIT_BIN, '--git-dir', repo_path]
+          full_args += args
+          full_args << '--no-color'
+          ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
+          if $? && $?.exitstatus != 0
+            raise ScmCommandAborted, "git exited with non-zero status: #{$?.exitstatus}"
+          end
+          ret
+        end
+        private :scm_cmd
       end
     end
   end