diff --git a/qa/base.py b/qa/base.py index 39394250..21425c1e 100644 --- a/qa/base.py +++ b/qa/base.py @@ -93,6 +93,13 @@ def create_file(parent_dir): io.open(os.path.join(parent_dir, test_filename), 'a', encoding=DEFAULT_ENCODING).close() return test_filename + def create_tmp_git_config(self, contents): + """ Creates an environment with the GIT_CONFIG variable set to a file with the given contents. """ + tmp_config = self.create_tmpfile(contents) + env = os.environ.copy() + env["GIT_CONFIG"] = tmp_config + return env + def create_simple_commit(self, message, out=None, ok_code=None, env=None, git_repo=None, tty_in=False): """ Creates a simple commit with an empty test file. :param message: Commit message for the commit. """ diff --git a/qa/shell.py b/qa/shell.py index 1a9295db..43e5bbdb 100644 --- a/qa/shell.py +++ b/qa/shell.py @@ -67,6 +67,8 @@ def _exec(*args, **kwargs): popen_kwargs = {'stdout': pipe, 'stderr': pipe, 'shell': kwargs.get('_tty_out', False)} if '_cwd' in kwargs: popen_kwargs['cwd'] = kwargs['_cwd'] + if '_env' in kwargs: + popen_kwargs['env'] = kwargs['_env'] try: p = subprocess.Popen(args, **popen_kwargs) diff --git a/qa/test_gitlint.py b/qa/test_gitlint.py index 47627216..2e837b95 100644 --- a/qa/test_gitlint.py +++ b/qa/test_gitlint.py @@ -157,6 +157,28 @@ def test_msg_filename_no_tty(self): self.assertEqualStdout(output, self.get_expected("test_gitlint/test_msg_filename_no_tty_1")) + def test_no_git_name_set(self): + """ Ensure we print out a helpful message if user.name is not set """ + tmp_commit_msg_file = self.create_tmpfile(u"WIP: msg-fïlename NO name test.") + # Name is checked before email so this isn't strictly + # necessary but seems good for consistency. + env = self.create_tmp_git_config(u"[user]\n email = test-emåil@foo.com\n") + output = gitlint("--staged", "--msg-filename", tmp_commit_msg_file, + _ok_code=[self.GIT_CONTEXT_ERROR_CODE], + _env=env) + expected = u"Missing git configuration: please set user.name\n" + self.assertEqualStdout(output, expected) + + def test_no_git_email_set(self): + """ Ensure we print out a helpful message if user.email is not set """ + tmp_commit_msg_file = self.create_tmpfile(u"WIP: msg-fïlename NO email test.") + env = self.create_tmp_git_config(u"[user]\n name = test åuthor\n") + output = gitlint("--staged", "--msg-filename", tmp_commit_msg_file, + _ok_code=[self.GIT_CONTEXT_ERROR_CODE], + _env=env) + expected = u"Missing git configuration: please set user.email\n" + self.assertEqualStdout(output, expected) + def test_git_errors(self): # Repo has no commits: caused by `git log` empty_git_repo = self.create_tmp_git_repo()