diff --git a/fastgit/core.py b/fastgit/core.py index c5fc0d9..d92fe68 100644 --- a/fastgit/core.py +++ b/fastgit/core.py @@ -30,11 +30,13 @@ class Git: def __init__(self, d): self.d = Path(d) def __call__(self, cmd, *args, split=None, mute_errors=False, **kwargs): + paths = [str(p) for p in listify(kwargs.pop('__', None) or [])] args = listify(args) args += concat((f'-{k}',v) for k,v in kwargs.items() if len(k)==1 and v is not True) args += [f'-{k}' for k,v in kwargs.items() if len(k)==1 and v is True] args += [f'--{k.replace("_","-")}={v}' for k,v in kwargs.items() if len(k)>1 and v is not True and v is not False] args += [f'--{k.replace("_","-")}' for k,v in kwargs.items() if len(k)>1 and v is True] + if paths: args += ['--'] + paths try: return callgit(self.d, cmd, *args, split=split) except CalledProcessError as e: if not mute_errors: print(f'ERROR: Git.__call__ caught exception {e} \n with stderr={e.stderr}') diff --git a/nbs/00_core.ipynb b/nbs/00_core.ipynb index 06635d9..b9258da 100644 --- a/nbs/00_core.ipynb +++ b/nbs/00_core.ipynb @@ -112,7 +112,32 @@ "id": "97f78839", "metadata": {}, "outputs": [], - "source": "#| export\nclass Git:\n def __init__(self, d): self.d = Path(d)\n\n def __call__(self, cmd, *args, split=None, mute_errors=False, **kwargs):\n args = listify(args)\n args += concat((f'-{k}',v) for k,v in kwargs.items() if len(k)==1 and v is not True)\n args += [f'-{k}' for k,v in kwargs.items() if len(k)==1 and v is True]\n args += [f'--{k.replace(\"_\",\"-\")}={v}' for k,v in kwargs.items() if len(k)>1 and v is not True and v is not False]\n args += [f'--{k.replace(\"_\",\"-\")}' for k,v in kwargs.items() if len(k)>1 and v is True]\n try: return callgit(self.d, cmd, *args, split=split)\n except CalledProcessError as e:\n if not mute_errors: print(f'ERROR: Git.__call__ caught exception {e} \\n with stderr={e.stderr}')\n\n def __getattr__(self, nm):\n if nm.startswith('_'): raise AttributeError(nm)\n return partial(self, nm.replace('_','-'))\n\n def top(self): return self.rev_parse('--show-toplevel', mute_errors=True)\n \n @property\n def exists(self): return self.top() is not None" + "source": [ + "#| export\n", + "class Git:\n", + " def __init__(self, d): self.d = Path(d)\n", + "\n", + " def __call__(self, cmd, *args, split=None, mute_errors=False, **kwargs):\n", + " paths = [str(p) for p in listify(kwargs.pop('__', None) or [])]\n", + " args = listify(args)\n", + " args += concat((f'-{k}',v) for k,v in kwargs.items() if len(k)==1 and v is not True)\n", + " args += [f'-{k}' for k,v in kwargs.items() if len(k)==1 and v is True]\n", + " args += [f'--{k.replace(\"_\",\"-\")}={v}' for k,v in kwargs.items() if len(k)>1 and v is not True and v is not False]\n", + " args += [f'--{k.replace(\"_\",\"-\")}' for k,v in kwargs.items() if len(k)>1 and v is True]\n", + " if paths: args += ['--'] + paths\n", + " try: return callgit(self.d, cmd, *args, split=split)\n", + " except CalledProcessError as e:\n", + " if not mute_errors: print(f'ERROR: Git.__call__ caught exception {e} \\n with stderr={e.stderr}')\n", + "\n", + " def __getattr__(self, nm):\n", + " if nm.startswith('_'): raise AttributeError(nm)\n", + " return partial(self, nm.replace('_','-'))\n", + "\n", + " def top(self): return self.rev_parse('--show-toplevel', mute_errors=True)\n", + " \n", + " @property\n", + " def exists(self): return self.top() is not None" + ] }, { "cell_type": "code",