From ff6ed900fcbb73f9e6ab9450f2a8eea9f3f75f12 Mon Sep 17 00:00:00 2001 From: John Goerzen Date: Sun, 9 Mar 2008 13:09:18 +0000 Subject: [PATCH] Use shell_quote and --git-dir for args passed to git the cd #{target('')} approach does not work on Windows All unit tests pass git-svn-id: http://redmine.rubyforge.org/svn/branches/work@1218 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- git/lib/redmine/scm/adapters/git_adapter.rb | 27 +++++++++++---------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/git/lib/redmine/scm/adapters/git_adapter.rb b/git/lib/redmine/scm/adapters/git_adapter.rb index 278a1cc36..b6b1b858d 100644 --- a/git/lib/redmine/scm/adapters/git_adapter.rb +++ b/git/lib/redmine/scm/adapters/git_adapter.rb @@ -27,8 +27,8 @@ module Redmine # Get the revision of a particuliar file def get_rev (rev,path) - cmd="cd #{target('')} && git show #{rev} -- #{path}" if rev!='latest' - cmd="cd #{target('')} && git log -1 master -- #{path}" if + cmd="git --git-dir #{target('')} show #{shell_quote rev} -- #{shell_quote path}" if rev!='latest' and (! rev.nil?) + cmd="git --git-dir #{target('')} log -1 master -- #{shell_quote path}" if rev=='latest' or rev.nil? rev=[] i=0 @@ -106,8 +106,9 @@ module Redmine def entries(path=nil, identifier=nil) path ||= '' entries = Entries.new - cmd = "cd #{target('')} && #{GIT_BIN} ls-tree -l HEAD:#{path}" if identifier.nil? - cmd = "cd #{target('')} && #{GIT_BIN} ls-tree -l #{identifier}:#{path}" if identifier + cmd = "#{GIT_BIN} --git-dir #{target('')} ls-tree -l " + cmd << shell_quote("HEAD:" + path) if identifier.nil? + cmd << shell_quote(identifier + ":" + path) if identifier shellout(cmd) do |io| io.each_line do |line| e = line.chomp.to_s @@ -140,10 +141,10 @@ module Redmine def revisions(path, identifier_from, identifier_to, options={}) revisions = Revisions.new - cmd = "cd #{target('')} && #{GIT_BIN} log --raw " - cmd << " -n #{options[:limit].to_i}" if (!options.nil?) && options[:limit] - cmd << " #{identifier_from}.. " if identifier_from - cmd << " #{identifier_to} " if identifier_to + cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw " + cmd << " -n #{options[:limit].to_i} " if (!options.nil?) && options[:limit] + cmd << " #{shell_quote(identifier_from + '..')} " if identifier_from + cmd << " #{shell_quote identifier_to} " if identifier_to #cmd << " HEAD " if !identifier_to shellout(cmd) do |io| files=[] @@ -212,9 +213,9 @@ module Redmine identifier_to = nil end - cmd = "cd #{target('')} && #{GIT_BIN} show #{identifier_from}" if identifier_to.nil? - cmd = "cd #{target('')} && #{GIT_BIN} diff #{identifier_to} #{identifier_from}" if !identifier_to.nil? - cmd << " -- #{path}" unless path.empty? + cmd = "#{GIT_BIN} --git-dir #{target('')} show #{shell_quote identifier_from}" if identifier_to.nil? + cmd = "#{GIT_BIN} --git-dir #{target('')} diff #{shell_quote identifier_to} #{shell_quote identifier_from}" if !identifier_to.nil? + cmd << " -- #{shell_quote path}" unless path.empty? diff = [] shellout(cmd) do |io| io.each_line do |line| @@ -227,7 +228,7 @@ module Redmine def annotate(path, identifier=nil) identifier = 'HEAD' if identifier.blank? - cmd = "cd #{target('')} && #{GIT_BIN} blame -l #{identifier} -- #{path}" + cmd = "#{GIT_BIN} --git-dir #{target('')} blame -l #{shell_quote identifier} -- #{shell_quote path}" blame = Annotate.new shellout(cmd) do |io| io.each_line do |line| @@ -243,7 +244,7 @@ module Redmine if identifier.nil? identifier = 'HEAD' end - cmd = "cd #{target('')} && #{GIT_BIN} show #{identifier}:#{path}" + cmd = "#{GIT_BIN} --git-dir #{target('')} show #{shell_quote(identifier + ':' + path)}" cat = nil shellout(cmd) do |io| io.binmode