diff --git a/hgext/absorb.py b/hgext/absorb.py --- a/hgext/absorb.py +++ b/hgext/absorb.py @@ -682,13 +682,12 @@ class fixupstate(object): 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 @@ def absorbcmd(ui, repo, *pats, **opts): 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 diff --git a/tests/test-absorb-unfinished.t b/tests/test-absorb-unfinished.t new file mode 100644 --- /dev/null +++ b/tests/test-absorb-unfinished.t @@ -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] +