Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 504870e

Browse filesBrowse files
committed
Merge pull request #413 from nvie/support-repeated-cmd-kwargs
Support repeated kwargs
2 parents 8bbf1a3 + a3c89a5 commit 504870e
Copy full SHA for 504870e

2 files changed

+24-12Lines changed: 24 additions & 12 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎git/cmd.py‎

Copy file name to clipboardExpand all lines: git/cmd.py
+20-12Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -764,23 +764,31 @@ def custom_environment(self, **kwargs):
764764
finally:
765765
self.update_environment(**old_env)
766766

767+
def transform_kwarg(self, name, value, split_single_char_options):
768+
if len(name) == 1:
769+
if value is True:
770+
return ["-%s" % name]
771+
elif type(value) is not bool:
772+
if split_single_char_options:
773+
return ["-%s" % name, "%s" % value]
774+
else:
775+
return ["-%s%s" % (name, value)]
776+
else:
777+
if value is True:
778+
return ["--%s" % dashify(name)]
779+
elif type(value) is not bool:
780+
return ["--%s=%s" % (dashify(name), value)]
781+
return []
782+
767783
def transform_kwargs(self, split_single_char_options=True, **kwargs):
768784
"""Transforms Python style kwargs into git command line options."""
769785
args = list()
770786
for k, v in kwargs.items():
771-
if len(k) == 1:
772-
if v is True:
773-
args.append("-%s" % k)
774-
elif type(v) is not bool:
775-
if split_single_char_options:
776-
args.extend(["-%s" % k, "%s" % v])
777-
else:
778-
args.append("-%s%s" % (k, v))
787+
if isinstance(v, (list, tuple)):
788+
for value in v:
789+
args += self.transform_kwarg(k, value, split_single_char_options)
779790
else:
780-
if v is True:
781-
args.append("--%s" % dashify(k))
782-
elif type(v) is not bool:
783-
args.append("--%s=%s" % (dashify(k), v))
791+
args += self.transform_kwarg(k, v, split_single_char_options)
784792
return args
785793

786794
@classmethod
Collapse file

‎git/test/test_git.py‎

Copy file name to clipboardExpand all lines: git/test/test_git.py
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ def test_it_transforms_kwargs_into_git_command_arguments(self):
7070
assert_equal(["--max-count"], self.git.transform_kwargs(**{'max_count': True}))
7171
assert_equal(["--max-count=5"], self.git.transform_kwargs(**{'max_count': 5}))
7272

73+
# Multiple args are supported by using lists/tuples
74+
assert_equal(["-L", "1-3", "-L", "12-18"], self.git.transform_kwargs(**{'L': ('1-3', '12-18')}))
75+
assert_equal(["-C", "-C"], self.git.transform_kwargs(**{'C': [True, True]}))
76+
7377
# order is undefined
7478
res = self.git.transform_kwargs(**{'s': True, 't': True})
7579
assert ['-s', '-t'] == res or ['-t', '-s'] == res

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.