2727if TYPE_CHECKING :
2828from git .repo import Repo
2929from git .refs import Head ,TagReference ,Reference
30+ from .log import RefLogEntry
31+ from git .config import GitConfigParser
32+ from git .objects .commit import Actor
33+
3034
3135T_References = TypeVar ('T_References' ,bound = 'SymbolicReference' )
3236
@@ -391,7 +395,8 @@ def log(self):
391395 instead of calling this method repeatedly. It should be considered read-only."""
392396return RefLog .from_file (RefLog .path (self ))
393397
394- def log_append (self ,oldbinsha ,message ,newbinsha = None ):
398+ def log_append (self ,oldbinsha :bytes ,message :Union [str ,None ],
399+ newbinsha :Union [bytes ,None ]= None )-> 'RefLogEntry' :
395400"""Append a logentry to the logfile of this ref
396401
397402 :param oldbinsha: binary sha this ref used to point to
@@ -403,15 +408,19 @@ def log_append(self, oldbinsha, message, newbinsha=None):
403408# correct to allow overriding the committer on a per-commit level.
404409# See https://github.com/gitpython-developers/GitPython/pull/146
405410try :
406- committer_or_reader = self .commit .committer
411+ committer_or_reader : Union [ 'Actor' , 'GitConfigParser' ] = self .commit .committer
407412except ValueError :
408413committer_or_reader = self .repo .config_reader ()
409414# end handle newly cloned repositories
410- return RefLog .append_entry (committer_or_reader ,RefLog .path (self ),oldbinsha ,
411- (newbinsha is None and self .commit .binsha )or newbinsha ,
412- message )
415+ if newbinsha is None :
416+ newbinsha = self .commit .binsha
417+
418+ if message is None :
419+ message = ''
420+
421+ return RefLog .append_entry (committer_or_reader ,RefLog .path (self ),oldbinsha ,newbinsha ,message )
413422
414- def log_entry (self ,index ) :
423+ def log_entry (self ,index : int ) -> 'RefLogEntry' :
415424""":return: RefLogEntry at the given index
416425 :param index: python list compatible positive or negative index
417426