diff --git a/lib/git/lib.rb b/lib/git/lib.rb index a698cf3e..764fd6c9 100644 --- a/lib/git/lib.rb +++ b/lib/git/lib.rb @@ -186,7 +186,11 @@ def process_commit_data(data, sha = nil, indent = 4) } loop do - key, *value = data.shift.split + datum = data.shift + + break if datum.nil? + + key, *value = datum.split break if key.nil? @@ -902,14 +906,24 @@ def meets_required_version? def command_lines(cmd, opts = [], chdir = true, redirect = '') cmd_op = command(cmd, opts, chdir) if cmd_op.encoding.name != "UTF-8" - op = cmd_op.encode("UTF-8", "binary", { - :invalid => :replace, - :undef => :replace - }) + op = command_line_convert(cmd_op) else op = cmd_op end - op.split("\n") + + begin + op.split("\n") + rescue ArgumentError + op = command_line_convert(cmd_op) + retry + end + end + + def command_line_convert(cmd_op) + cmd_op.encode("UTF-8", "binary", { + :invalid => :replace, + :undef => :replace + }) end # Takes the current git's system ENV variables and store them.