mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 17:27:53 +03:00
commitcloud: don't take wlock when storing commit cloud state
Summary: Commit cloud state is stored in the store, so the wlock is not necessary. Reviewed By: liubov-dmitrieva Differential Revision: D8121600 fbshipit-source-id: f96f4764e3cf0637cd45a0bc83d1227318ac9083
This commit is contained in:
parent
54f1c1f14f
commit
a55b165063
@ -56,7 +56,7 @@ from __future__ import absolute_import
|
||||
from mercurial import error, extensions, localrepo, registrar, util
|
||||
from mercurial.i18n import _
|
||||
|
||||
from . import commitcloudcommands, commitcloudcommon, commitcloudutil
|
||||
from . import commitcloudcommands, commitcloudcommon, commitcloudutil, state
|
||||
|
||||
|
||||
cmdtable = commitcloudcommands.cmdtable
|
||||
@ -137,9 +137,8 @@ def extsetup(ui):
|
||||
commitcloudcommands.infinitepush = infinitepush
|
||||
commitcloudcommands.infinitepushbackup = infinitepushbackup
|
||||
|
||||
localrepo.localrepository._wlockfreeprefix.update(
|
||||
[commitcloudutil._obsmarkerssyncing]
|
||||
)
|
||||
localrepo.localrepository._wlockfreeprefix.add(commitcloudutil._obsmarkerssyncing)
|
||||
localrepo.localrepository._lockfreeprefix.add(state.SyncState.prefix)
|
||||
|
||||
|
||||
def reposetup(ui, repo):
|
||||
|
@ -21,27 +21,27 @@ class SyncState(object):
|
||||
last sync.
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def _filename(workspace):
|
||||
prefix = "commitcloudstate."
|
||||
|
||||
@classmethod
|
||||
def _filename(cls, workspace):
|
||||
# make a unique valid filename
|
||||
return (
|
||||
"commitcloudstate."
|
||||
cls.prefix
|
||||
+ "".join(x for x in workspace if x.isalnum())
|
||||
+ ".%s" % (hashlib.sha256(workspace).hexdigest()[0:5])
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def erasestate(repo):
|
||||
@classmethod
|
||||
def erasestate(cls, repo):
|
||||
# get current workspace
|
||||
workspace = commitcloudutil.getworkspacename(repo)
|
||||
if not workspace:
|
||||
raise commitcloudcommon.WorkspaceError(repo.ui, _("undefined workspace"))
|
||||
|
||||
filename = SyncState._filename(workspace)
|
||||
filename = cls._filename(workspace)
|
||||
# clean up the current state in force recover mode
|
||||
if repo.svfs.exists(filename):
|
||||
with repo.wlock(), repo.lock():
|
||||
repo.svfs.unlink(filename)
|
||||
repo.svfs.tryunlink(filename)
|
||||
|
||||
def __init__(self, repo):
|
||||
# get current workspace
|
||||
@ -49,7 +49,7 @@ class SyncState(object):
|
||||
if not workspace:
|
||||
raise commitcloudcommon.WorkspaceError(repo.ui, _("undefined workspace"))
|
||||
|
||||
self.filename = SyncState._filename(workspace)
|
||||
self.filename = self._filename(workspace)
|
||||
repo = shareutil.getsrcrepo(repo)
|
||||
self.repo = repo
|
||||
if repo.svfs.exists(self.filename):
|
||||
@ -73,9 +73,8 @@ class SyncState(object):
|
||||
|
||||
def update(self, newversion, newheads, newbookmarks):
|
||||
data = {"version": newversion, "heads": newheads, "bookmarks": newbookmarks}
|
||||
with self.repo.wlock(), self.repo.lock():
|
||||
with self.repo.svfs.open(self.filename, "w", atomictemp=True) as f:
|
||||
json.dump(data, f)
|
||||
with self.repo.svfs.open(self.filename, "w", atomictemp=True) as f:
|
||||
json.dump(data, f)
|
||||
self.version = newversion
|
||||
self.heads = newheads
|
||||
self.bookmarks = newbookmarks
|
||||
|
Loading…
Reference in New Issue
Block a user