Mercurial > public > mercurial-scm > hg-stable
diff mercurial/sparse.py @ 51849:95cdc01f313d
sparse: reliably avoid writing to store without a lock
With the code as written before this patch we can still end up writing to
store in `debugsparse`. Obviously we'll write to it if by accident a store
requirement is modified, but more importantly we write to it if another
concurrent transaction modifies the requirements file on disk.
We can't rule this out since we're not holding the store lock,
so it's better to explicitly pass a permission to write instead
of inferring it based on file contents.
author | Arseniy Alekseyev <aalekseyev@janestreet.com> |
---|---|
date | Fri, 16 Aug 2024 11:12:19 +0100 |
parents | 0d7ccb163b4f |
children | f4733654f144 |
line wrap: on
line diff
--- a/mercurial/sparse.py Thu Aug 15 13:52:14 2024 +0100 +++ b/mercurial/sparse.py Fri Aug 16 11:12:19 2024 +0100 @@ -632,10 +632,10 @@ if requirements.SPARSE_REQUIREMENT in oldrequires and removing: repo.requirements.discard(requirements.SPARSE_REQUIREMENT) - scmutil.writereporequirements(repo) + scmutil.writereporequirements(repo, maywritestore=False) elif requirements.SPARSE_REQUIREMENT not in oldrequires: repo.requirements.add(requirements.SPARSE_REQUIREMENT) - scmutil.writereporequirements(repo) + scmutil.writereporequirements(repo, maywritestore=False) try: writeconfig(repo, includes, excludes, profiles) @@ -644,7 +644,7 @@ if repo.requirements != oldrequires: repo.requirements.clear() repo.requirements |= oldrequires - scmutil.writereporequirements(repo) + scmutil.writereporequirements(repo, maywritestore=False) writeconfig(repo, oldincludes, oldexcludes, oldprofiles) raise