diff options
author | Sebastian Thiel <sebastian.thiel@icloud.com> | 2022-01-07 08:59:19 +0800 |
---|---|---|
committer | Sebastian Thiel <sebastian.thiel@icloud.com> | 2022-01-07 09:02:49 +0800 |
commit | 636da6e3c73dbc842401e046bdc8c32231955a41 (patch) | |
tree | ace357582c59e90d8f3a547da3f9fc5549e44f56 | |
parent | 2141eaef76fdfb2775dde45d087b34144d34a1fb (diff) | |
download | gitpython-index-no-read-lock.tar.gz |
Avoid taking a lock for readingindex-no-read-lock
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.
m--------- | git/ext/gitdb | 0 | ||||
-rw-r--r-- | git/index/base.py | 17 |
2 files changed, 2 insertions, 15 deletions
diff --git a/git/ext/gitdb b/git/ext/gitdb -Subproject 03ab3a1d40c04d6a944299c21db61cf9ce30f6b +Subproject 1c976835c5d1779a28b9e11afd1656152db26a6 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) |