remotefilelog: acquire lock before writing requirements on clone
authorPulkit Goyal <7895pulkit@gmail.com>
Thu, 17 Sep 2020 18:28:53 -0700
changeset 45481 bddc4f2ef317
parent 45480 8ceb5b4b2728
child 45482 9a99ab8217bd
remotefilelog: acquire lock before writing requirements on clone Performing a shallow clone in remotefilelog does not acquire lock. This leads to following warning when we try to write some requirements in store: ``` --- /home/gps/src/hg-committed/tests/test-remotefilelog-share.t +++ /home/gps/src/hg-committed/tests/test-remotefilelog-share.t#safe.err @@ -28,6 +28,7 @@ $ hgcloneshallow ssh://user@dummy/master source --noupdate -q + devel-warn: write with no lock: "requires" at: /home/gps/src/hg-committed/mercurial/scmutil.py:1505 (writerequires) $ hg share source dest updating working directory 1 files updated, 0 files merged, 0 files removed, 0 files unresolved ``` Let's lock before writing the requirements file. Another solution which I can think of is not warn about missing lock when writing to requires file in store. Differential Revision: https://phab.mercurial-scm.org/D8952
hgext/remotefilelog/__init__.py
--- a/hgext/remotefilelog/__init__.py	Thu Sep 10 14:23:12 2020 +0900
+++ b/hgext/remotefilelog/__init__.py	Thu Sep 17 18:28:53 2020 -0700
@@ -362,7 +362,10 @@
                         self.unfiltered().__class__,
                     )
                 self.requirements.add(constants.SHALLOWREPO_REQUIREMENT)
-                scmutil.writereporequirements(self)
+                with self.lock():
+                    # acquire store lock before writing requirements as some
+                    # requirements might be written to .hg/store/requires
+                    scmutil.writereporequirements(self)
 
                 # Since setupclient hadn't been called, exchange.pull was not
                 # wrapped. So we need to manually invoke our version of it.