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