Mercurial > public > mercurial-scm > hg
diff hgext/absorb.py @ 42128:537a8aeb9977
absorb: aborting if another operation is in progress
This increases safety of using absorb by both aborting when another operation
is in progress (since the absorption could confuse any other command a lot)
and holding the locks throughout the reading of the working directory (for
which changes to absorb) and the reading of the repo (for which changes to
absorb into).
Differential Revision: https://phab.mercurial-scm.org/D6237
author | Rodrigo Damazio Bovendorp <rdamazio@google.com> |
---|---|
date | Mon, 15 Apr 2019 22:13:11 -0700 |
parents | c6a5009ed04a |
children | b3fc78c028ef |
line wrap: on
line diff
--- a/hgext/absorb.py Thu Apr 04 13:58:49 2019 +0200 +++ b/hgext/absorb.py Mon Apr 15 22:13:11 2019 -0700 @@ -682,13 +682,12 @@ def commit(self): """commit changes. update self.finalnode, self.replacemap""" - with self.repo.wlock(), self.repo.lock(): - with self.repo.transaction('absorb') as tr: - self._commitstack() - self._movebookmarks(tr) - if self.repo['.'].node() in self.replacemap: - self._moveworkingdirectoryparent() - self._cleanupoldcommits() + with self.repo.transaction('absorb') as tr: + self._commitstack() + self._movebookmarks(tr) + if self.repo['.'].node() in self.replacemap: + self._moveworkingdirectoryparent() + self._cleanupoldcommits() return self.finalnode def printchunkstats(self): @@ -1006,6 +1005,11 @@ Returns 0 on success, 1 if all chunks were ignored and nothing amended. """ opts = pycompat.byteskwargs(opts) - state = absorb(ui, repo, pats=pats, opts=opts) - if sum(s[0] for s in state.chunkstats.values()) == 0: - return 1 + + with repo.wlock(), repo.lock(): + if not opts['dry_run']: + cmdutil.checkunfinished(repo) + + state = absorb(ui, repo, pats=pats, opts=opts) + if sum(s[0] for s in state.chunkstats.values()) == 0: + return 1