From 154d26c4bae01772fd9769a70d6c93e125a27d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0mundur=20Bjarni=20=C3=93lafsson?= Date: Mon, 29 Sep 2014 15:51:12 +0200 Subject: [PATCH] Naively inject env into backticks and IO.popen --- lib/git/lib.rb | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/lib/git/lib.rb b/lib/git/lib.rb index 03b19995..02268837 100644 --- a/lib/git/lib.rb +++ b/lib/git/lib.rb @@ -734,24 +734,18 @@ def command_lines(cmd, opts = [], chdir = true, redirect = '') end def command(cmd, opts = [], chdir = true, redirect = '', &block) - ENV['GIT_DIR'] = @git_dir - ENV['GIT_WORK_TREE'] = @git_work_dir - ENV['GIT_INDEX_FILE'] = @git_index_file + env = {} + env['GIT_DIR'] = @git_dir if @git_dir + env['GIT_WORK_TREE'] = @git_work_dir if @git_work_dir + env['GIT_INDEX_FILE'] = @git_index_file if @git_index_file - path = @git_work_dir || @git_dir || @path - opts = [opts].flatten.map {|s| escape(s) }.join(' ') git_cmd = "git #{cmd} #{opts} #{redirect} 2>&1" output = nil - - if chdir && (Dir.getwd != path) - Dir.chdir(path) { output = run_command(git_cmd, &block) } - else - output = run_command(git_cmd, &block) - end - + output = run_command(env, git_cmd, &block) + if @logger @logger.info(git_cmd) @logger.debug(output) @@ -818,10 +812,11 @@ def log_path_options(opts) arr_opts end - def run_command(git_cmd, &block) - return IO.popen(git_cmd, &block) if block_given? + def run_command(env, git_cmd, &block) + return IO.popen(env, git_cmd, &block) if block_given? - `#{git_cmd}`.chomp + inline_env = env.map { |k, v| "#{k}=#{v}" }.join(' ') + `#{inline_env} #{git_cmd}`.chomp end def escape(s)