diff --git a/git.py b/git.py
index 5bebd3f..505ff6c 100644
--- a/git.py
+++ b/git.py
@@ -19,11 +19,11 @@
 import subprocess
 import tempfile
 import pathlib
-from typing import TextIO, List, Dict, Generator
+from typing import TextIO, List, Dict, Generator, Optional
 
 from absl import logging
 
-def _git_long(verb: str, *args, git_flag: str = None, cwd=None, input=None) -> TextIO:
+def _git_long(verb: str, *args, git_flag: Optional[str] = None, cwd=None, input=None) -> str:
     logging.debug('Running\ngit %s %s\n with input: %s', verb, ' '.join(args), input)
     command = ['git']
     if git_flag:
@@ -39,7 +39,7 @@
                             stdout=subprocess.PIPE)
     return result.stdout
 
-def _git(verb: str, *args, git_flag: str = None, cwd=None, input=None) -> str:
+def _git(verb: str, *args, git_flag: Optional[str] = None, cwd=None, input=None) -> str:
     result = _git_long(verb, *args, git_flag=git_flag, cwd=cwd, input=input)
     stdout = str(result)
     logging.info('git %s stdout: %s', verb, stdout)
@@ -75,7 +75,7 @@
     def commit(self, *args) -> str:
         return _git('commit', *args, cwd=self._git_dir)
 
-    def log(self, *args) -> TextIO:
+    def log(self, *args) -> str:
         return _git_long('log', *args, git_flag='--no-pager', cwd=self._git_dir)
 
     def log_no_page(self, commit_hash: str) -> CommitMessage:
@@ -86,10 +86,10 @@
 
 class BugFixChecker(object):
     def bug_fix_log_grep(self) -> str:
-        pass
+        return ''
 
     def is_bug_fix(self, commit_message: CommitMessage) -> bool:
-        pass
+        return False
 
 class UpstreamKernelBugFixChecker(BugFixChecker):
     def bug_fix_log_grep(self) -> str:
@@ -155,7 +155,7 @@
 
 class BugFixFileTreeNode(object):
     def get_bugs_of_children(self) -> List[str]:
-        pass
+        return []
 
     def get_number_of_child_bugs(self) -> int:
         return len(self.get_bugs_of_children())
@@ -170,7 +170,7 @@
         pass
 
 class BugFixFileNode(BugFixFileTreeNode):
-    def __init__(self, file_name: str, bug_list: List[str] = None) -> None:
+    def __init__(self, file_name: str, bug_list: Optional[List[str]] = None) -> None:
         self.file_name = file_name
         self._bug_list = bug_list or []
 
@@ -191,7 +191,10 @@
         #    print(indent, bug_hash)
 
 class BugFixDirectoryNode(BugFixFileTreeNode):
-    def __init__(self, directory_name: str, child_directory_nodes: Dict[str, 'BugFixDirectoryNode'] = None, child_file_nodes: Dict[str, BugFixFileNode] = None) -> None:
+    def __init__(self,
+                 directory_name: str,
+                 child_directory_nodes: Optional[Dict[str, 'BugFixDirectoryNode']] = None,
+                 child_file_nodes: Optional[Dict[str, BugFixFileNode]] = None) -> None:
         self.directory_name = directory_name
         self._child_directory_nodes = child_directory_nodes or {}
         self._child_file_nodes = child_file_nodes or {}
