run_git: add option to return raw output stream

Currently, clients which want the raw output from a Git command must
sneakily extract the raw 'fd' from the utf8-encoding wrapper returned
by run_git(). This is ugly and fragile. Instead, provide a formal
mechanism for requesting raw output.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Alberto Bertogli <albertito@blitiri.com.ar>
This commit is contained in:
Eric Sunshine 2015-01-13 04:57:06 -05:00 committed by Alberto Bertogli
parent bb9bad89d1
commit 66afd72d6d

5
git.py

@ -41,7 +41,7 @@ class EncodeWrapper:
return s.decode(self.encoding, errors = self.errors) return s.decode(self.encoding, errors = self.errors)
def run_git(repo_path, params, stdin = None, silent_stderr = False): def run_git(repo_path, params, stdin = None, silent_stderr = False, raw = False):
"""Invokes git with the given parameters. """Invokes git with the given parameters.
This function invokes git with the given parameters, and returns a This function invokes git with the given parameters, and returns a
@ -63,6 +63,9 @@ def run_git(repo_path, params, stdin = None, silent_stderr = False):
p.stdin.write(stdin) p.stdin.write(stdin)
p.stdin.close() p.stdin.close()
if raw:
return p.stdout
# We need to wrap stdout if we want to decode it as utf8, subprocess # We need to wrap stdout if we want to decode it as utf8, subprocess
# doesn't support us telling it the encoding. # doesn't support us telling it the encoding.
if sys.version_info.major == 3: if sys.version_info.major == 3: