@@ -123,9 +123,9 @@ class Repo(object):
123
123
DAEMON_EXPORT_FILE = "git-daemon-export-ok"
124
124
125
125
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
127
127
_working_tree_dir : Optional [PathLike ] = None
128
- git_dir : PathLike = ""
128
+ git_dir : PathLike
129
129
_common_dir : PathLike = ""
130
130
131
131
# precompiled regex
@@ -215,13 +215,14 @@ def __init__(
215
215
## Walk up the path to find the `.git` dir.
216
216
#
217
217
curpath = epath
218
+ _git_dir = None
218
219
while curpath :
219
220
# ABOUT osp.NORMPATH
220
221
# It's important to normalize the paths, as submodules will otherwise initialize their
221
222
# repo instances with paths that depend on path-portions that will not exist after being
222
223
# removed. It's just cleaner.
223
224
if is_git_dir (curpath ):
224
- self . git_dir = curpath
225
+ _git_dir = curpath
225
226
# from man git-config : core.worktree
226
227
# Set the path to the root of the working tree. If GIT_COMMON_DIR environment
227
228
# variable is set, core.worktree is ignored and not used for determining the
@@ -230,7 +231,7 @@ def __init__(
230
231
# directory, which is either specified by GIT_DIR, or automatically discovered.
231
232
# If GIT_DIR is specified but none of GIT_WORK_TREE and core.worktree is specified,
232
233
# 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 )
234
235
if os .environ .get ("GIT_COMMON_DIR" ) is None :
235
236
gitconf = self .config_reader ("repository" )
236
237
if gitconf .has_option ("core" , "worktree" ):
@@ -242,14 +243,14 @@ def __init__(
242
243
dotgit = osp .join (curpath , ".git" )
243
244
sm_gitpath = find_submodule_git_dir (dotgit )
244
245
if sm_gitpath is not None :
245
- self . git_dir = osp .normpath (sm_gitpath )
246
+ _git_dir = osp .normpath (sm_gitpath )
246
247
247
248
sm_gitpath = find_submodule_git_dir (dotgit )
248
249
if sm_gitpath is None :
249
250
sm_gitpath = find_worktree_git_dir (dotgit )
250
251
251
252
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 )
253
254
self ._working_tree_dir = curpath
254
255
break
255
256
@@ -260,8 +261,9 @@ def __init__(
260
261
break
261
262
# END while curpath
262
263
263
- if self . git_dir is None :
264
+ if _git_dir is None :
264
265
raise InvalidGitRepositoryError (epath )
266
+ self .git_dir = _git_dir
265
267
266
268
self ._bare = False
267
269
try :
@@ -282,7 +284,7 @@ def __init__(
282
284
self ._working_tree_dir = None
283
285
# END working dir handling
284
286
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
286
288
self .git = self .GitCommandWrapperType (self .working_dir )
287
289
288
290
# special handling, in special times
@@ -320,7 +322,7 @@ def close(self) -> None:
320
322
gc .collect ()
321
323
322
324
def __eq__ (self , rhs : object ) -> bool :
323
- if isinstance (rhs , Repo ) and self . git_dir :
325
+ if isinstance (rhs , Repo ):
324
326
return self .git_dir == rhs .git_dir
325
327
return False
326
328
@@ -332,14 +334,12 @@ def __hash__(self) -> int:
332
334
333
335
# Description property
334
336
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" )
337
338
with open (filename , "rb" ) as fp :
338
339
return fp .read ().rstrip ().decode (defenc )
339
340
340
341
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" )
343
343
with open (filename , "wb" ) as fp :
344
344
fp .write ((descr + "\n " ).encode (defenc ))
345
345
@@ -357,13 +357,7 @@ def common_dir(self) -> PathLike:
357
357
"""
358
358
:return: The git dir that holds everything except possibly HEAD,
359
359
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
367
361
368
362
@property
369
363
def bare (self ) -> bool :
0 commit comments