Remove dependency on plumbum
diff --git a/pre_commit_hooks/check_case_conflict.py b/pre_commit_hooks/check_case_conflict.py
index 6a837d9..dd4ad86 100644
--- a/pre_commit_hooks/check_case_conflict.py
+++ b/pre_commit_hooks/check_case_conflict.py
@@ -4,9 +4,8 @@
import argparse
-from plumbum import local
-
from pre_commit_hooks.util import added_files
+from pre_commit_hooks.util import cmd_output
def lower_set(iterable):
@@ -14,7 +13,7 @@
def find_conflicting_filenames(filenames):
- repo_files = set(local['git']('ls-files').splitlines())
+ repo_files = set(cmd_output('git', 'ls-files').splitlines())
relevant_files = set(filenames) | added_files()
repo_files -= relevant_files
retv = 0
diff --git a/pre_commit_hooks/trailing_whitespace_fixer.py b/pre_commit_hooks/trailing_whitespace_fixer.py
index 7ac3d73..0642ac0 100644
--- a/pre_commit_hooks/trailing_whitespace_fixer.py
+++ b/pre_commit_hooks/trailing_whitespace_fixer.py
@@ -4,7 +4,7 @@
import fileinput
import sys
-from plumbum import local
+from pre_commit_hooks.util import cmd_output
def _fix_file(filename):
@@ -17,9 +17,9 @@
parser.add_argument('filenames', nargs='*', help='Filenames to fix')
args = parser.parse_args(argv)
- bad_whitespace_files = local['grep'][
- ('-l', '[[:space:]]$') + tuple(args.filenames)
- ](retcode=None).strip().splitlines()
+ bad_whitespace_files = cmd_output(
+ 'grep', '-l', '[[:space:]]$', *args.filenames, retcode=None
+ ).strip().splitlines()
if bad_whitespace_files:
for bad_whitespace_file in bad_whitespace_files:
diff --git a/pre_commit_hooks/util.py b/pre_commit_hooks/util.py
index eedf7b6..7c2175e 100644
--- a/pre_commit_hooks/util.py
+++ b/pre_commit_hooks/util.py
@@ -2,10 +2,26 @@
from __future__ import print_function
from __future__ import unicode_literals
-from plumbum import local
+import subprocess
+
+
+class CalledProcessError(RuntimeError):
+ pass
def added_files():
- return set(local['git'](
- 'diff', '--staged', '--name-only', '--diff-filter', 'A',
+ return set(cmd_output(
+ 'git', 'diff', '--staged', '--name-only', '--diff-filter', 'A',
).splitlines())
+
+
+def cmd_output(*cmd, **kwargs):
+ retcode = kwargs.pop('retcode', 0)
+ popen_kwargs = {'stdout': subprocess.PIPE, 'stderr': subprocess.PIPE}
+ popen_kwargs.update(kwargs)
+ proc = subprocess.Popen(cmd, **popen_kwargs)
+ stdout, stderr = proc.communicate()
+ stdout, stderr = stdout.decode('UTF-8'), stderr.decode('UTF-8')
+ if retcode is not None and proc.returncode != retcode:
+ raise CalledProcessError(cmd, retcode, proc.returncode, stdout, stderr)
+ return stdout