@@ -123,9 +123,9 @@ class Repo(object):
123123 DAEMON_EXPORT_FILE = "git-daemon-export-ok"
124124
125125 git = cast ("Git" , None ) # Must exist, or __del__ will fail in case we raise on `__init__()`
126- working_dir : Optional [ PathLike ] = None
126+ working_dir : PathLike
127127 _working_tree_dir : Optional [PathLike ] = None
128- git_dir : PathLike = ""
128+ git_dir : PathLike
129129 _common_dir : PathLike = ""
130130
131131 # precompiled regex
@@ -215,13 +215,14 @@ def __init__(
215215 ## Walk up the path to find the `.git` dir.
216216 #
217217 curpath = epath
218+ _git_dir = None
218219 while curpath :
219220 # ABOUT osp.NORMPATH
220221 # It's important to normalize the paths, as submodules will otherwise initialize their
221222 # repo instances with paths that depend on path-portions that will not exist after being
222223 # removed. It's just cleaner.
223224 if is_git_dir (curpath ):
224- self . git_dir = curpath
225+ _git_dir = curpath
225226 # from man git-config : core.worktree
226227 # Set the path to the root of the working tree. If GIT_COMMON_DIR environment
227228 # variable is set, core.worktree is ignored and not used for determining the
@@ -230,7 +231,7 @@ def __init__(
230231 # directory, which is either specified by GIT_DIR, or automatically discovered.
231232 # If GIT_DIR is specified but none of GIT_WORK_TREE and core.worktree is specified,
232233 # the current working directory is regarded as the top level of your working tree.
233- self ._working_tree_dir = os .path .dirname (self . git_dir )
234+ self ._working_tree_dir = os .path .dirname (_git_dir )
234235 if os .environ .get ("GIT_COMMON_DIR" ) is None :
235236 gitconf = self .config_reader ("repository" )
236237 if gitconf .has_option ("core" , "worktree" ):
@@ -242,14 +243,14 @@ def __init__(
242243 dotgit = osp .join (curpath , ".git" )
243244 sm_gitpath = find_submodule_git_dir (dotgit )
244245 if sm_gitpath is not None :
245- self . git_dir = osp .normpath (sm_gitpath )
246+ _git_dir = osp .normpath (sm_gitpath )
246247
247248 sm_gitpath = find_submodule_git_dir (dotgit )
248249 if sm_gitpath is None :
249250 sm_gitpath = find_worktree_git_dir (dotgit )
250251
251252 if sm_gitpath is not None :
252- self . git_dir = expand_path (sm_gitpath , expand_vars )
253+ _git_dir = expand_path (sm_gitpath , expand_vars )
253254 self ._working_tree_dir = curpath
254255 break
255256
@@ -260,8 +261,9 @@ def __init__(
260261 break
261262 # END while curpath
262263
263- if self . git_dir is None :
264+ if _git_dir is None :
264265 raise InvalidGitRepositoryError (epath )
266+ self .git_dir = _git_dir
265267
266268 self ._bare = False
267269 try :
@@ -282,7 +284,7 @@ def __init__(
282284 self ._working_tree_dir = None
283285 # END working dir handling
284286
285- self .working_dir : Optional [ PathLike ] = self ._working_tree_dir or self .common_dir
287+ self .working_dir : PathLike = self ._working_tree_dir or self .common_dir
286288 self .git = self .GitCommandWrapperType (self .working_dir )
287289
288290 # special handling, in special times
@@ -320,7 +322,7 @@ def close(self) -> None:
320322 gc .collect ()
321323
322324 def __eq__ (self , rhs : object ) -> bool :
323- if isinstance (rhs , Repo ) and self . git_dir :
325+ if isinstance (rhs , Repo ):
324326 return self .git_dir == rhs .git_dir
325327 return False
326328
@@ -332,14 +334,12 @@ def __hash__(self) -> int:
332334
333335 # Description property
334336 def _get_description (self ) -> str :
335- if self .git_dir :
336- filename = osp .join (self .git_dir , "description" )
337+ filename = osp .join (self .git_dir , "description" )
337338 with open (filename , "rb" ) as fp :
338339 return fp .read ().rstrip ().decode (defenc )
339340
340341 def _set_description (self , descr : str ) -> None :
341- if self .git_dir :
342- filename = osp .join (self .git_dir , "description" )
342+ filename = osp .join (self .git_dir , "description" )
343343 with open (filename , "wb" ) as fp :
344344 fp .write ((descr + "\n " ).encode (defenc ))
345345
@@ -357,13 +357,7 @@ def common_dir(self) -> PathLike:
357357 """
358358 :return: The git dir that holds everything except possibly HEAD,
359359 FETCH_HEAD, ORIG_HEAD, COMMIT_EDITMSG, index, and logs/."""
360- if self ._common_dir :
361- return self ._common_dir
362- elif self .git_dir :
363- return self .git_dir
364- else :
365- # or could return ""
366- raise InvalidGitRepositoryError ()
360+ return self ._common_dir or self .git_dir
367361
368362 @property
369363 def bare (self ) -> bool :
0 commit comments