Repository: pre-commit/pre-commit
Pull request #972 (2019-03-17 11:59:58)

Added test for git.no_git_env()


Patch:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 55e2d33..e7ecdf8 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -10,6 +10,7 @@ repos:
     -   id: debug-statements
     -   id: name-tests-test
     -   id: requirements-txt-fixer
+    -   id: double-quote-string-fixer
 -   repo: https://gitlab.com/pycqa/flake8
     rev: 3.7.1
     hooks:
diff --git a/pre_commit/color_windows.py b/pre_commit/color_windows.py
index 4e193f9..9b8555e 100644
--- a/pre_commit/color_windows.py
+++ b/pre_commit/color_windows.py
@@ -20,18 +20,18 @@ def bool_errcheck(result, func, args):
 
 
 GetStdHandle = WINFUNCTYPE(HANDLE, DWORD)(
-    ("GetStdHandle", windll.kernel32), ((1, "nStdHandle"),),
+    ('GetStdHandle', windll.kernel32), ((1, 'nStdHandle'),),
 )
 
 GetConsoleMode = WINFUNCTYPE(BOOL, HANDLE, POINTER(DWORD))(
-    ("GetConsoleMode", windll.kernel32),
-    ((1, "hConsoleHandle"), (2, "lpMode")),
+    ('GetConsoleMode', windll.kernel32),
+    ((1, 'hConsoleHandle'), (2, 'lpMode')),
 )
 GetConsoleMode.errcheck = bool_errcheck
 
 SetConsoleMode = WINFUNCTYPE(BOOL, HANDLE, DWORD)(
-    ("SetConsoleMode", windll.kernel32),
-    ((1, "hConsoleHandle"), (1, "dwMode")),
+    ('SetConsoleMode', windll.kernel32),
+    ((1, 'hConsoleHandle'), (1, 'dwMode')),
 )
 SetConsoleMode.errcheck = bool_errcheck
 
diff --git a/pre_commit/git.py b/pre_commit/git.py
index 06c847f..c24ca86 100644
--- a/pre_commit/git.py
+++ b/pre_commit/git.py
@@ -18,7 +18,7 @@ def zsplit(s):
         return []
 
 
-def no_git_env():
+def no_git_env(_env=None):
     # Too many bugs dealing with environment variables and GIT:
     # https://github.com/pre-commit/pre-commit/issues/300
     # In git 2.6.3 (maybe others), git exports GIT_WORK_TREE while running
@@ -27,8 +27,9 @@ def no_git_env():
     # while running pre-commit hooks in submodules.
     # GIT_DIR: Causes git clone to clone wrong thing
     # GIT_INDEX_FILE: Causes 'error invalid object ...' during commit
+    _env = _env if _env is not None else os.environ
     return {
-        k: v for k, v in os.environ.items()
+        k: v for k, v in _env.items()
         if not k.startswith('GIT_') or
         k in {'GIT_EXEC_PATH', 'GIT_SSH', 'GIT_SSH_COMMAND'}
     }


Test patch:
diff --git a/tests/git_test.py b/tests/git_test.py
index 43f1c15..299729d 100644
--- a/tests/git_test.py
+++ b/tests/git_test.py
@@ -173,3 +173,20 @@ def test_status_output_with_rename(in_git_dir):
     cmd_output('git', 'add', '--intent-to-add', 'c')
 
     assert git.intent_to_add_files() == ['c']
+
+
+def test_no_git_env():
+    env = {
+        'http_proxy': 'http://myproxy:80',
+        'GIT_EXEC_PATH': '/some/git/exec/path',
+        'GIT_SSH': '/usr/bin/ssh',
+        'GIT_SSH_COMMAND': 'ssh -o',
+        'GIT_DIR': '/none/shall/pass',
+    }
+    no_git_env = git.no_git_env(env)
+    assert no_git_env == {
+        'http_proxy': 'http://myproxy:80',
+        'GIT_EXEC_PATH': '/some/git/exec/path',
+        'GIT_SSH': '/usr/bin/ssh',
+        'GIT_SSH_COMMAND': 'ssh -o',
+    }
diff --git a/tests/meta_hooks/check_useless_excludes_test.py b/tests/meta_hooks/check_useless_excludes_test.py
index 4adaacd..d261e81 100644
--- a/tests/meta_hooks/check_useless_excludes_test.py
+++ b/tests/meta_hooks/check_useless_excludes_test.py
@@ -40,7 +40,7 @@ def test_useless_exclude_for_hook(capsys, in_git_dir):
     out = out.strip()
     expected = (
         "The exclude pattern 'foo' for check-useless-excludes "
-        "does not match any files"
+        'does not match any files'
     )
     assert expected == out
 
@@ -69,7 +69,7 @@ def test_useless_exclude_with_types_filter(capsys, in_git_dir):
     out = out.strip()
     expected = (
         "The exclude pattern '.pre-commit-config.yaml' for "
-        "check-useless-excludes does not match any files"
+        'check-useless-excludes does not match any files'
     )
     assert expected == out
 
diff --git a/tests/repository_test.py b/tests/repository_test.py
index 5f03a45..32915f1 100644
--- a/tests/repository_test.py
+++ b/tests/repository_test.py
@@ -528,7 +528,7 @@ def test_local_golang_additional_dependencies(store):
     }
     ret = _get_hook(config, store, 'hello').run(())
     assert ret[0] == 0
-    assert _norm_out(ret[1]) == b"Hello, Go examples!\n"
+    assert _norm_out(ret[1]) == b'Hello, Go examples!\n'
 
 
 def test_local_rust_additional_dependencies(store):
@@ -544,7 +544,7 @@ def test_local_rust_additional_dependencies(store):
     }
     ret = _get_hook(config, store, 'hello').run(())
     assert ret[0] == 0
-    assert _norm_out(ret[1]) == b"Hello World!\n"
+    assert _norm_out(ret[1]) == b'Hello World!\n'
 
 
 def test_fail_hooks(store):
diff --git a/tests/util_test.py b/tests/util_test.py
index 8178bb4..94c6ae6 100644
--- a/tests/util_test.py
+++ b/tests/util_test.py
@@ -17,12 +17,12 @@ def test_CalledProcessError_str():
     )
     assert str(error) == (
         "Command: ['git', 'status']\n"
-        "Return code: 1\n"
-        "Expected return code: 0\n"
-        "Output: \n"
-        "    stdout\n"
-        "Errors: \n"
-        "    stderr\n"
+        'Return code: 1\n'
+        'Expected return code: 0\n'
+        'Output: \n'
+        '    stdout\n'
+        'Errors: \n'
+        '    stderr\n'
     )
 
 
@@ -32,10 +32,10 @@ def test_CalledProcessError_str_nooutput():
     )
     assert str(error) == (
         "Command: ['git', 'status']\n"
-        "Return code: 1\n"
-        "Expected return code: 0\n"
-        "Output: (none)\n"
-        "Errors: (none)\n"
+        'Return code: 1\n'
+        'Expected return code: 0\n'
+        'Output: (none)\n'
+        'Errors: (none)\n'
     )