def test_change_directory(self): old_dir = os.getcwd() with TemporaryDirectory("temp") as tempdir: tempdir = os.path.realpath(tempdir) with change_directory(tempdir): self.assertEqual(os.getcwd(), tempdir) self.assertEqual(os.getcwd(), old_dir)
def run(self, allow_empty_commit_message: bool = False, **kwargs): """ Check the current git commit message at HEAD. This bear ensures automatically that the shortlog and body do not exceed a given line-length and that a newline lies between them. :param allow_empty_commit_message: Whether empty commit messages are allowed or not. """ with change_directory(self.get_config_dir() or os.getcwd()): stdout, stderr = run_shell_command("git log -1 --pretty=%B") if stderr: self.err("git:", repr(stderr)) return stdout = stdout.rstrip("\n").splitlines() if len(stdout) == 0: if not allow_empty_commit_message: yield Result(self, "HEAD commit has no message.") return yield from self.check_shortlog( stdout[0], **self.get_shortlog_checks_metadata().filter_parameters(kwargs)) yield from self.check_body( stdout[1:], **self.get_body_checks_metadata().filter_parameters(kwargs))
def test_no_config(self): current_dir = os.path.abspath(os.path.dirname(__file__)) child_dir = os.path.join(current_dir, "section_manager_test_files", "child_dir") with change_directory(child_dir): sections, targets = load_configuration([], self.log_printer) self.assertIn('value', sections["default"]) sections, targets = load_configuration( ['--no-config'], self.log_printer) self.assertNotIn('value', sections["default"]) sections, targets = load_configuration( ['--no-config', '-S', 'use_spaces=True'], self.log_printer) self.assertIn('use_spaces', sections["default"]) self.assertNotIn('values', sections["default"]) with self.assertRaises(SystemExit) as cm: sections, target = load_configuration( ['--no-config', '--save'], self.log_printer) self.assertEqual(cm.exception.code, 2) with self.assertRaises(SystemExit) as cm: sections, target = load_configuration( ['--no-config', '--find-config'], self.log_printer) self.assertEqual(cm.exception.code, 2)
def test_no_config(self): current_dir = os.path.abspath(os.path.dirname(__file__)) child_dir = os.path.join(current_dir, "section_manager_test_files", "child_dir") with change_directory(child_dir): sections, targets = load_configuration([], self.log_printer) self.assertIn('value', sections["default"]) sections, targets = load_configuration(['--no-config'], self.log_printer) self.assertNotIn('value', sections["default"]) sections, targets = load_configuration( ['--no-config', '-S', 'use_spaces=True'], self.log_printer) self.assertIn('use_spaces', sections["default"]) self.assertNotIn('values', sections["default"]) with self.assertRaises(SystemExit) as cm: sections, target = load_configuration( ['--no-config', '--save'], self.log_printer) self.assertEqual(cm.exception.code, 2) with self.assertRaises(SystemExit) as cm: sections, target = load_configuration( ['--no-config', '--find-config'], self.log_printer) self.assertEqual(cm.exception.code, 2)
def test_find_user_config(self): current_dir = os.path.abspath(os.path.dirname(__file__)) c_file = os.path.join(current_dir, "section_manager_test_files", "project", "test.c") retval = find_user_config(c_file, 1) self.assertEqual("", retval) retval = find_user_config(c_file, 2) self.assertEqual(os.path.join(current_dir, "section_manager_test_files", ".coafile"), retval) child_dir = os.path.join(current_dir, "section_manager_test_files", "child_dir") retval = find_user_config(child_dir, 2) self.assertEqual(os.path.join(current_dir, "section_manager_test_files", "child_dir", ".coafile"), retval) with change_directory(child_dir): sections, _, _, _ = gather_configuration( lambda *args: True, self.log_printer, arg_list=["--find-config"]) self.assertEqual(bool(sections["default"]['find_config']), True)
def test_find_user_config(self): current_dir = os.path.abspath(os.path.dirname(__file__)) c_file = os.path.join(current_dir, "section_manager_test_files", "project", "test.c") retval = find_user_config(c_file, 1) self.assertEqual("", retval) retval = find_user_config(c_file, 2) self.assertEqual( os.path.join(current_dir, "section_manager_test_files", ".coafile"), retval) child_dir = os.path.join(current_dir, "section_manager_test_files", "child_dir") retval = find_user_config(child_dir, 2) self.assertEqual( os.path.join(current_dir, "section_manager_test_files", "child_dir", ".coafile"), retval) with change_directory(child_dir): sections, _, _, _ = gather_configuration( lambda *args: True, self.log_printer, arg_list=["--find-config"]) self.assertEqual(bool(sections["default"]['find_config']), True)
def test_change_directory(self): old_dir = os.getcwd() with TemporaryDirectory('temp') as tempdir: tempdir = os.path.realpath(tempdir) with change_directory(tempdir): self.assertEqual(os.getcwd(), tempdir) self.assertEqual(os.getcwd(), old_dir)
def test_find_user_config(self): current_dir = os.path.abspath(os.path.dirname(__file__)) c_file = os.path.join(current_dir, 'section_manager_test_files', 'project', 'test.c') retval = find_user_config(c_file, 1) self.assertEqual('', retval) retval = find_user_config(c_file, 2) self.assertEqual( os.path.join(current_dir, 'section_manager_test_files', '.coafile'), retval) child_dir = os.path.join(current_dir, 'section_manager_test_files', 'child_dir') retval = find_user_config(child_dir, 2) self.assertEqual( os.path.join(current_dir, 'section_manager_test_files', 'child_dir', '.coafile'), retval) with change_directory(child_dir): sections, _, _, _ = gather_configuration( lambda *args: True, self.log_printer, arg_list=['--find-config']) self.assertEqual(bool(sections['default']['find_config']), True)
def run(self, shortlog_length: int=50, body_line_length: int=73, force_body: bool=False, allow_empty_commit_message: bool=False, shortlog_regex: str="", shortlog_trailing_period: bool=None): """ Checks the current git commit message at HEAD. This bear ensures that the shortlog and body do not exceed a given line-length and that a newline lies between them. :param shortlog_length: The maximum length of the shortlog. The shortlog is the first line of the commit message. The newline character at end does not count to the length. :param body_line_length: The maximum line-length of the body. The newline character at each line end does not count to the length. :param force_body: Whether a body shall exist or not. :param allow_empty_commit_message: Whether empty commit messages are allowed or not. :param shortlog_regex: A regex to check the shortlog with. A full match of this regex is then required. Passing an empty string disable the regex-check. :param shortlog_trailing_period: Whether a dot shall be enforced at the end of the shortlog line. Providing ``None`` means "doesn't care". """ with change_directory(self.get_config_dir() or os.getcwd()): stdout, stderr = run_shell_command("git log -1 --pretty=%B") if stderr: self.err("git:", repr(stderr)) return stdout = stdout.rstrip("\n").splitlines() if len(stdout) == 0: if not allow_empty_commit_message: yield Result(self, "HEAD commit has no message.") return yield from self.check_shortlog(shortlog_length, shortlog_regex, shortlog_trailing_period, stdout[0]) yield from self.check_body(body_line_length, force_body, stdout[1:])
def run(self, shortlog_length: int = 50, body_line_length: int = 73, force_body: bool = False, allow_empty_commit_message: bool = False, shortlog_regex: str = "", shortlog_trailing_period: bool = None): """ Checks the current git commit message at HEAD. This bear ensures that the shortlog and body do not exceed a given line-length and that a newline lies between them. :param shortlog_length: The maximum length of the shortlog. The shortlog is the first line of the commit message. The newline character at end does not count to the length. :param body_line_length: The maximum line-length of the body. The newline character at each line end does not count to the length. :param force_body: Whether a body shall exist or not. :param allow_empty_commit_message: Whether empty commit messages are allowed or not. :param shortlog_regex: A regex to check the shortlog with. A full match of this regex is then required. Passing an empty string disable the regex-check. :param shortlog_trailing_period: Whether a dot shall be enforced at the end of the shortlog line. Providing ``None`` means "doesn't care". """ with change_directory(self.get_config_dir() or os.getcwd()): stdout, stderr = run_shell_command("git log -1 --pretty=%B") if stderr: self.err("git:", repr(stderr)) return stdout = stdout.rstrip("\n").splitlines() if len(stdout) == 0: if not allow_empty_commit_message: yield Result(self, "HEAD commit has no message.") return yield from self.check_shortlog(shortlog_length, shortlog_regex, shortlog_trailing_period, stdout[0]) yield from self.check_body(body_line_length, force_body, stdout[1:])