From patchwork Thu Jun 1 00:25:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2, of, 3, RFC] context: start the move of wlock from repo to workingctx From: Sean Farley X-Patchwork-Id: 21110 Message-Id: <11f1b897d1475648a88f.1496276721@1.0.0.127.in-addr.arpa> To: mercurial-devel@mercurial-scm.org Cc: sean@farley.io Date: Wed, 31 May 2017 17:25:21 -0700 # HG changeset patch # User Sean Farley # Date 1494537056 25200 # Thu May 11 14:10:56 2017 -0700 # Branch wctxds # Node ID 11f1b897d1475648a88ff0115954413f46bf4137 # Parent 498dae194ccf1e82caed51a02e6ce0b77f8d92e8 context: start the move of wlock from repo to workingctx diff --git a/mercurial/context.py b/mercurial/context.py index a3dc7c5..c42c5e6 100644 --- a/mercurial/context.py +++ b/mercurial/context.py @@ -1564,10 +1564,11 @@ class workingctx(committablectx): changes=None): super(workingctx, self).__init__(repo, text, user, date, extra, changes) # This is where working directory references should live. For now we # just borrow references to stuff in localrepo. + self.wlock = self._repo.wlock @property def dirstate(self): return self._repo.dirstate @@ -1607,11 +1608,11 @@ class workingctx(committablectx): self.modified() or self.added() or self.removed() or (missing and self.deleted())) def add(self, list, prefix=""): join = lambda f: os.path.join(prefix, f) - with self._repo.wlock(): + with self.wlock(): ui, ds = self._repo.ui, self.dirstate rejected = [] lstat = self._repo.wvfs.lstat for f in list: scmutil.checkportable(ui, join(f)) @@ -1639,11 +1640,11 @@ class workingctx(committablectx): ds.add(f) return rejected def forget(self, files, prefix=""): join = lambda f: os.path.join(prefix, f) - with self._repo.wlock(): + with self.wlock(): rejected = [] for f in files: if f not in self.dirstate: self._repo.ui.warn(_("%s not tracked!\n") % join(f)) rejected.append(f) @@ -1653,11 +1654,11 @@ class workingctx(committablectx): self.dirstate.drop(f) return rejected def undelete(self, list): pctxs = self.parents() - with self._repo.wlock(): + with self.wlock(): for f in list: if self.dirstate[f] != 'r': self._repo.ui.warn(_("%s not removed!\n") % f) else: fctx = f in pctxs[0] and pctxs[0][f] or pctxs[1][f] @@ -1675,11 +1676,11 @@ class workingctx(committablectx): return if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)): self._repo.ui.warn(_("copy failed: %s is not a file or a " "symbolic link\n") % dest) else: - with self._repo.wlock(): + with self.wlock(): if self.dirstate[dest] in '?': self.dirstate.add(dest) elif self.dirstate[dest] in 'r': self.dirstate.normallookup(dest) self.dirstate.copy(source, dest) @@ -1738,11 +1739,11 @@ class workingctx(committablectx): try: # updating the dirstate is optional # so we don't wait on the lock # wlock can invalidate the dirstate, so cache normal _after_ # taking the lock - with self._repo.wlock(False): + with self.wlock(False): normal = self.dirstate.normal for f in fixup: normal(f) # write changes out explicitly, because nesting # wlock at runtime may prevent 'wlock.release()'