Mercurial > hg
changeset 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 | 70b71421fd33 |
children | 232a33a11ce0 |
files | hgext/absorb.py tests/test-absorb-unfinished.t |
diffstat | 2 files changed, 44 insertions(+), 10 deletions(-) [+] |
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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-absorb-unfinished.t Mon Apr 15 22:13:11 2019 -0700 @@ -0,0 +1,30 @@ + $ cat >> $HGRCPATH << EOF + > [extensions] + > absorb= + > EOF + +Abort absorb if there is an unfinished operation. + + $ hg init abortunresolved + $ cd abortunresolved + + $ echo "foo1" > foo.whole + $ hg commit -Aqm "foo 1" + + $ hg update null + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo "foo2" > foo.whole + $ hg commit -Aqm "foo 2" + + $ hg --config extensions.rebase= rebase -r 1 -d 0 + rebasing 1:c3b6dc0e177a "foo 2" (tip) + merging foo.whole + warning: conflicts while merging foo.whole! (edit, then use 'hg resolve --mark') + unresolved conflicts (see hg resolve, then hg rebase --continue) + [1] + + $ hg --config extensions.rebase= absorb + abort: rebase in progress + (use 'hg rebase --continue' or 'hg rebase --abort') + [255] +