From 823e9cfa4fd11b312ee33a15bf6a20d5063e7837 Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Sun, 23 Jun 2013 15:19:53 +0200 Subject: [PATCH] Avoid crash when git commit title cannot be found Avoids a crash when there is no git commit title, because e.g. called outside a git checkout. Change-Id: Icf8e943a75b59adff51028dd2973ed34d80a4e69 --- hacking/core.py | 2 +- hacking/tests/test_gittest.py | 37 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 hacking/tests/test_gittest.py diff --git a/hacking/core.py b/hacking/core.py index ff75732..584762e 100755 --- a/hacking/core.py +++ b/hacking/core.py @@ -870,7 +870,7 @@ class OnceGitCheckCommitTitlePeriodEnding(GitCheck): def run_once(self): title = self._get_commit_title() - if title.rstrip().endswith('.'): + if title and title.rstrip().endswith('.'): return ( 1, 0, "H803: git commit title ('%s') should not end with period" diff --git a/hacking/tests/test_gittest.py b/hacking/tests/test_gittest.py new file mode 100644 index 0000000..85c8445 --- /dev/null +++ b/hacking/tests/test_gittest.py @@ -0,0 +1,37 @@ +# Copyright (c) 2013 SUSE Linux Products GmbH. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import fixtures + +import hacking.core +import hacking.tests +import inspect + + +def _fake_none_commit_title(self): + return None + + +class HackingGitTestCase(hacking.tests.TestCase): + def test_run_outside_git(self): + """Verify that GitChecks don't fail if no .git available.""" + + with fixtures.MonkeyPatch('hacking.core.GitCheck._get_commit_title', + _fake_none_commit_title): + + for name, obj in inspect.getmembers(hacking.core): + if (inspect.isclass(obj) and + isinstance(obj(None), hacking.core.GitCheck)): + obj(None).run_once()