diff options
author | Vincent Driessen <me@nvie.com> | 2016-04-18 11:08:41 +0200 |
---|---|---|
committer | Vincent Driessen <me@nvie.com> | 2016-04-19 21:47:45 +0200 |
commit | a3c89a5e020bb4747fd9470ba9a82a54c33bb5fa (patch) | |
tree | 68399d970b2c3ee32be9178cfb7ecb84c1705ed6 /git/cmd.py | |
parent | 8bbf1a3b801fb4e00c10f631faa87114dcd0462f (diff) | |
download | gitpython-a3c89a5e020bb4747fd9470ba9a82a54c33bb5fa.tar.gz |
Support repeated kwargs
Some Git command line options are allowed to be repeated multiple times.
Examples of this are the -C flag which may occur more than once to
"strengthen" its effect, or the -L flag on Git blames, to select
multiple blocks of lines to blame.
$ git diff -C -C HEAD~1 HEAD
$ git blame -L 1-3 -L 12-18 HEAD -- somefile.py
This patch supports passing a list/tuple as the value part for kwargs,
so that the generated Git command contain the repeated options.
Diffstat (limited to 'git/cmd.py')
-rw-r--r-- | git/cmd.py | 32 |
1 files changed, 20 insertions, 12 deletions
@@ -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 |