From 636da6e3c73dbc842401e046bdc8c32231955a41 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 7 Jan 2022 08:59:19 +0800 Subject: Avoid taking a lock for reading This isn't needed as git will replace this file atomicially, hence we always see a fully written file when reading. Only when writing we need to obtain a lock. --- git/ext/gitdb | 2 +- git/index/base.py | 17 ++--------------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/git/ext/gitdb b/git/ext/gitdb index 03ab3a1d..1c976835 160000 --- a/git/ext/gitdb +++ b/git/ext/gitdb @@ -1 +1 @@ -Subproject commit 03ab3a1d40c04d6a944299c21db61cf9ce30f6bb +Subproject commit 1c976835c5d1779a28b9e11afd1656152db26a68 diff --git a/git/index/base.py b/git/index/base.py index 102703e6..d1f039cd 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -127,30 +127,17 @@ class IndexFile(LazyMixin, git_diff.Diffable, Serializable): def _set_cache_(self, attr: str) -> None: if attr == "entries": - # read the current index - # try memory map for speed - lfd = LockedFD(self._file_path) - ok = False try: - fd = lfd.open(write=False, stream=False) - ok = True + fd = os.open(self._file_path, os.O_RDONLY) except OSError: # in new repositories, there may be no index, which means we are empty self.entries: Dict[Tuple[PathLike, StageType], IndexEntry] = {} return None - finally: - if not ok: - lfd.rollback() # END exception handling stream = file_contents_ro(fd, stream=True, allow_mmap=True) - try: - self._deserialize(stream) - finally: - lfd.rollback() - # The handles will be closed on destruction - # END read from default index on demand + self._deserialize(stream) else: super(IndexFile, self)._set_cache_(attr) -- cgit v1.2.1