summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Thiel <sebastian.thiel@icloud.com>2022-01-07 08:59:19 +0800
committerSebastian Thiel <sebastian.thiel@icloud.com>2022-01-07 09:02:49 +0800
commit636da6e3c73dbc842401e046bdc8c32231955a41 (patch)
treeace357582c59e90d8f3a547da3f9fc5549e44f56
parent2141eaef76fdfb2775dde45d087b34144d34a1fb (diff)
downloadgitpython-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/gitdb0
-rw-r--r--git/index/base.py17
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)