summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKostis Anagnostopoulos <ankostis@gmail.com>2016-10-19 14:36:39 +0200
committerGitHub <noreply@github.com>2016-10-19 14:36:39 +0200
commitaab7dc2c7771118064334ee475dff8a6bb176b57 (patch)
tree29f85b71fb56c3d8015bd71873a7c24cf82ed50f
parent9e4a4545dd513204efb6afe40e4b50c3b5f77e50 (diff)
parentbf8ce9464987c7b0dbe6acbc2cc2653e98ec739a (diff)
downloadgitpython-aab7dc2c7771118064334ee475dff8a6bb176b57.tar.gz
Merge pull request #536 from bpoldrack/nf-persistent-git-options
Allow for setting git generic options, persisted across subcommand calls.
-rw-r--r--git/cmd.py22
-rw-r--r--git/test/test_git.py14
2 files changed, 34 insertions, 2 deletions
diff --git a/git/cmd.py b/git/cmd.py
index f0757301..1481ac81 100644
--- a/git/cmd.py
+++ b/git/cmd.py
@@ -161,7 +161,7 @@ class Git(LazyMixin):
Set its value to 'full' to see details about the returned values.
"""
__slots__ = ("_working_dir", "cat_file_all", "cat_file_header", "_version_info",
- "_git_options", "_environment")
+ "_git_options", "_persistent_git_options", "_environment")
_excluded_ = ('cat_file_all', 'cat_file_header', '_version_info')
@@ -386,6 +386,7 @@ class Git(LazyMixin):
super(Git, self).__init__()
self._working_dir = working_dir
self._git_options = ()
+ self._persistent_git_options = []
# Extra environment variables to pass to git commands
self._environment = {}
@@ -402,6 +403,20 @@ class Git(LazyMixin):
return LazyMixin.__getattr__(self, name)
return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
+ def set_persistent_git_options(self, **kwargs):
+ """Specify command line options to the git executable
+ for subsequent subcommand calls
+
+ :param kwargs:
+ is a dict of keyword arguments.
+ these arguments are passed as in _call_process
+ but will be passed to the git command rather than
+ the subcommand.
+ """
+
+ self._persistent_git_options = self.transform_kwargs(
+ split_single_char_options=True, **kwargs)
+
def _set_cache_(self, attr):
if attr == '_version_info':
# We only use the first 4 numbers, as everthing else could be strings in fact (on windows)
@@ -820,7 +835,10 @@ class Git(LazyMixin):
call = [self.GIT_PYTHON_GIT_EXECUTABLE]
- # add the git options, the reset to empty
+ # add persistent git options
+ call.extend(self._persistent_git_options)
+
+ # add the git options, then reset to empty
# to avoid side_effects
call.extend(self._git_options)
self._git_options = ()
diff --git a/git/test/test_git.py b/git/test/test_git.py
index bd8ebee2..14c70e18 100644
--- a/git/test/test_git.py
+++ b/git/test/test_git.py
@@ -160,6 +160,20 @@ class TestGit(TestBase):
git_command_version = self.git.version()
self.assertEquals(git_version, git_command_version)
+ def test_persistent_options(self):
+ git_command_version = self.git.version()
+ # analog to test_options_are_passed_to_git
+ self.git.set_persistent_git_options(version=True)
+ git_version = self.git.NoOp()
+ self.assertEquals(git_version, git_command_version)
+ # subsequent calls keep this option:
+ git_version_2 = self.git.NoOp()
+ self.assertEquals(git_version_2, git_command_version)
+
+ # reset to empty:
+ self.git.set_persistent_git_options()
+ self.assertRaises(GitCommandError, self.git.NoOp)
+
def test_single_char_git_options_are_passed_to_git(self):
input_value = 'TestValue'
output_value = self.git(c='user.name=%s' % input_value).config('--get', 'user.name')