summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Driessen <me@nvie.com>2016-04-19 21:48:08 +0200
committerVincent Driessen <me@nvie.com>2016-04-19 21:48:08 +0200
commit504870e633eeb5fc1bd7c33b8dde0eb62a5b2d12 (patch)
tree68399d970b2c3ee32be9178cfb7ecb84c1705ed6
parent8bbf1a3b801fb4e00c10f631faa87114dcd0462f (diff)
parenta3c89a5e020bb4747fd9470ba9a82a54c33bb5fa (diff)
downloadgitpython-504870e633eeb5fc1bd7c33b8dde0eb62a5b2d12.tar.gz
Merge pull request #413 from nvie/support-repeated-cmd-kwargs
Support repeated kwargs
-rw-r--r--git/cmd.py32
-rw-r--r--git/test/test_git.py4
2 files changed, 24 insertions, 12 deletions
diff --git a/git/cmd.py b/git/cmd.py
index 7bd94e4d..e4e3d6da 100644
--- a/git/cmd.py
+++ b/git/cmd.py
@@ -764,23 +764,31 @@ class Git(LazyMixin):
finally:
self.update_environment(**old_env)
+ def transform_kwarg(self, name, value, split_single_char_options):
+ if len(name) == 1:
+ if value is True:
+ return ["-%s" % name]
+ elif type(value) is not bool:
+ if split_single_char_options:
+ return ["-%s" % name, "%s" % value]
+ else:
+ return ["-%s%s" % (name, value)]
+ else:
+ if value is True:
+ return ["--%s" % dashify(name)]
+ elif type(value) is not bool:
+ return ["--%s=%s" % (dashify(name), value)]
+ return []
+
def transform_kwargs(self, split_single_char_options=True, **kwargs):
"""Transforms Python style kwargs into git command line options."""
args = list()
for k, v in kwargs.items():
- if len(k) == 1:
- if v is True:
- args.append("-%s" % k)
- elif type(v) is not bool:
- if split_single_char_options:
- args.extend(["-%s" % k, "%s" % v])
- else:
- args.append("-%s%s" % (k, v))
+ if isinstance(v, (list, tuple)):
+ for value in v:
+ args += self.transform_kwarg(k, value, split_single_char_options)
else:
- if v is True:
- args.append("--%s" % dashify(k))
- elif type(v) is not bool:
- args.append("--%s=%s" % (dashify(k), v))
+ args += self.transform_kwarg(k, v, split_single_char_options)
return args
@classmethod
diff --git a/git/test/test_git.py b/git/test/test_git.py
index 3e3e21e4..00592b88 100644
--- a/git/test/test_git.py
+++ b/git/test/test_git.py
@@ -70,6 +70,10 @@ class TestGit(TestBase):
assert_equal(["--max-count"], self.git.transform_kwargs(**{'max_count': True}))
assert_equal(["--max-count=5"], self.git.transform_kwargs(**{'max_count': 5}))
+ # Multiple args are supported by using lists/tuples
+ assert_equal(["-L", "1-3", "-L", "12-18"], self.git.transform_kwargs(**{'L': ('1-3', '12-18')}))
+ assert_equal(["-C", "-C"], self.git.transform_kwargs(**{'C': [True, True]}))
+
# order is undefined
res = self.git.transform_kwargs(**{'s': True, 't': True})
assert ['-s', '-t'] == res or ['-t', '-s'] == res