# HG changeset patch # User Pierre-Yves David # Date 1641573207 -3600 # Node ID bf424fe4f814c411d614530b7a7213d0c0a63d4e # Parent d7135d8e8998c9cc3b85458203744a2e96ebd5fc lfs: take lock before writing requirements With `share-safe`, we will also write file in the store, so we take the store lock before writing requirements. Differential Revision: https://phab.mercurial-scm.org/D11991 diff -r d7135d8e8998 -r bf424fe4f814 hgext/lfs/__init__.py --- a/hgext/lfs/__init__.py Tue Jan 11 06:32:18 2022 +0100 +++ b/hgext/lfs/__init__.py Fri Jan 07 17:33:27 2022 +0100 @@ -257,25 +257,28 @@ if b'lfs' not in repo.requirements: def checkrequireslfs(ui, repo, **kwargs): - if b'lfs' in repo.requirements: - return 0 + with repo.lock(): + if b'lfs' in repo.requirements: + return 0 - last = kwargs.get('node_last') - if last: - s = repo.set(b'%n:%n', bin(kwargs['node']), bin(last)) - else: - s = repo.set(b'%n', bin(kwargs['node'])) - match = repo._storenarrowmatch - for ctx in s: - # TODO: is there a way to just walk the files in the commit? - if any( - ctx[f].islfs() for f in ctx.files() if f in ctx and match(f) - ): - repo.requirements.add(b'lfs') - repo.features.add(repository.REPO_FEATURE_LFS) - scmutil.writereporequirements(repo) - repo.prepushoutgoinghooks.add(b'lfs', wrapper.prepush) - break + last = kwargs.get('node_last') + if last: + s = repo.set(b'%n:%n', bin(kwargs['node']), bin(last)) + else: + s = repo.set(b'%n', bin(kwargs['node'])) + match = repo._storenarrowmatch + for ctx in s: + # TODO: is there a way to just walk the files in the commit? + if any( + ctx[f].islfs() + for f in ctx.files() + if f in ctx and match(f) + ): + repo.requirements.add(b'lfs') + repo.features.add(repository.REPO_FEATURE_LFS) + scmutil.writereporequirements(repo) + repo.prepushoutgoinghooks.add(b'lfs', wrapper.prepush) + break ui.setconfig(b'hooks', b'commit.lfs', checkrequireslfs, b'lfs') ui.setconfig(