diff options
author | Sebastian Thiel <byronimo@gmail.com> | 2017-09-28 15:45:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-28 15:45:34 +0200 |
commit | ddb828ecd0e28d346934fd1838a5f1c74363fba6 (patch) | |
tree | 1e07af3b22ba20b59dadd4a5b8008a3217c40bb5 | |
parent | 2eb6cf0855232da2b8f37785677d1f58c8e86817 (diff) | |
parent | 2e482a20ab221cb6eca51f12f1bd29cda4eec484 (diff) | |
download | gitpython-ddb828ecd0e28d346934fd1838a5f1c74363fba6.tar.gz |
Merge pull request #645 from AJMansfield/master
Implemented Per-Call Environment Variables
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | git/cmd.py | 9 | ||||
-rw-r--r-- | git/test/fixtures/ls_tree_empty | 0 | ||||
-rw-r--r-- | git/test/test_git.py | 15 |
4 files changed, 24 insertions, 1 deletions
@@ -19,6 +19,7 @@ Contributors are: -Timothy B. Hartman <tbhartman _at_ gmail.com> -Konstantin Popov <konstantin.popov.89 _at_ yandex.ru> -Peter Jones <pjones _at_ redhat.com> +-Anson Mansfield <anson.mansfield _at_ gmail.com> -Ken Odegard <ken.odegard _at_ gmail.com> -Alexis Horgix Chotard @@ -47,7 +47,7 @@ from .util import ( execute_kwargs = set(('istream', 'with_extended_output', 'with_exceptions', 'as_process', 'stdout_as_string', 'output_stream', 'with_stdout', 'kill_after_timeout', - 'universal_newlines', 'shell')) + 'universal_newlines', 'shell', 'env')) log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) @@ -597,6 +597,7 @@ class Git(LazyMixin): with_stdout=True, universal_newlines=False, shell=None, + env=None, **subprocess_kwargs ): """Handles executing the command on the shell and consumes and returns @@ -640,6 +641,9 @@ class Git(LazyMixin): decoded into a string using the default encoding (usually utf-8). The latter can fail, if the output contains binary data. + :param env: + A dictionary of environment variables to be passed to `subprocess.Popen`. + :param subprocess_kwargs: Keyword arguments to be passed to subprocess.Popen. Please note that some of the valid kwargs are already set by this method, the ones you @@ -685,6 +689,7 @@ class Git(LazyMixin): cwd = self._working_dir or os.getcwd() # Start the process + inline_env = env env = os.environ.copy() # Attempt to force all output to plain ascii english, which is what some parsing code # may expect. @@ -693,6 +698,8 @@ class Git(LazyMixin): env["LANGUAGE"] = "C" env["LC_ALL"] = "C" env.update(self._environment) + if inline_env is not None: + env.update(inline_env) if is_win: cmd_not_found_exception = OSError diff --git a/git/test/fixtures/ls_tree_empty b/git/test/fixtures/ls_tree_empty new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/git/test/fixtures/ls_tree_empty diff --git a/git/test/test_git.py b/git/test/test_git.py index 00577e33..0a0d7ef7 100644 --- a/git/test/test_git.py +++ b/git/test/test_git.py @@ -106,6 +106,21 @@ class TestGit(TestBase): self.git.version(pass_this_kwarg=False) assert_true("pass_this_kwarg" not in git.call_args[1]) + def test_it_accepts_environment_variables(self): + filename = fixture_path("ls_tree_empty") + with open(filename, 'r') as fh: + tree = self.git.mktree(istream=fh) + env = { + 'GIT_AUTHOR_NAME': 'Author Name', + 'GIT_AUTHOR_EMAIL': 'author@example.com', + 'GIT_AUTHOR_DATE': '1400000000+0000', + 'GIT_COMMITTER_NAME': 'Committer Name', + 'GIT_COMMITTER_EMAIL': 'committer@example.com', + 'GIT_COMMITTER_DATE': '1500000000+0000', + } + commit = self.git.commit_tree(tree, m='message', env=env) + assert_equal(commit, '4cfd6b0314682d5a58f80be39850bad1640e9241') + def test_persistent_cat_file_command(self): # read header only import subprocess as sp |