Skip to content

Commit cc71f02

Browse files
committed
Remove optional from two member variables
1 parent 63a60b3 commit cc71f02

File tree

1 file changed

+28
-26
lines changed

1 file changed

+28
-26
lines changed

Diff for: git/repo/base.py

+28-26
Original file line numberDiff line numberDiff line change
@@ -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,9 +231,9 @@ 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:
235-
gitconf = self.config_reader("repository")
236+
gitconf = self._config_reader("repository", git_dir)
236237
if gitconf.has_option("core", "worktree"):
237238
self._working_tree_dir = gitconf.get("core", "worktree")
238239
if "GIT_WORK_TREE" in os.environ:
@@ -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:
@@ -532,7 +526,9 @@ def delete_remote(self, remote: "Remote") -> str:
532526
"""Delete the given remote."""
533527
return Remote.remove(self, remote)
534528

535-
def _get_config_path(self, config_level: Lit_config_levels) -> str:
529+
def _get_config_path(self, config_level: Lit_config_levels, git_dir: Optional[PathLike] = None) -> str:
530+
if git_dir is None:
531+
git_dir = self.git_dir
536532
# we do not support an absolute path of the gitconfig on windows ,
537533
# use the global config instead
538534
if is_win and config_level == "system":
@@ -546,7 +542,7 @@ def _get_config_path(self, config_level: Lit_config_levels) -> str:
546542
elif config_level == "global":
547543
return osp.normpath(osp.expanduser("~/.gitconfig"))
548544
elif config_level == "repository":
549-
repo_dir = self._common_dir or self.git_dir
545+
repo_dir = self._common_dir or git_dir
550546
if not repo_dir:
551547
raise NotADirectoryError
552548
else:
@@ -575,15 +571,21 @@ def config_reader(
575571
you know which file you wish to read to prevent reading multiple files.
576572
:note: On windows, system configuration cannot currently be read as the path is
577573
unknown, instead the global path will be used."""
578-
files = None
574+
return self._config_reader(config_level=config_level)
575+
576+
def _config_reader(
577+
self,
578+
config_level: Optional[Lit_config_levels] = None,
579+
git_dir: Optional[PathLike] = None,
580+
) -> GitConfigParser:
579581
if config_level is None:
580582
files = [
581-
self._get_config_path(cast(Lit_config_levels, f))
583+
self._get_config_path(cast(Lit_config_levels, f), git_dir)
582584
for f in self.config_level
583585
if cast(Lit_config_levels, f)
584586
]
585587
else:
586-
files = [self._get_config_path(config_level)]
588+
files = [self._get_config_path(config_level, git_dir)]
587589
return GitConfigParser(files, read_only=True, repo=self)
588590

589591
def config_writer(self, config_level: Lit_config_levels = "repository") -> GitConfigParser:

0 commit comments

Comments
 (0)