Patchwork D6237: absorb: aborting if another operation is in progress

login
register
mail settings
Submitter phabricator
Date April 16, 2019, 12:44 p.m.
Message ID <58724ab2e39dd21bcabf8dc7c014a89d@localhost.localdomain>
Download mbox | patch
Permalink /patch/39630/
State Not Applicable
Headers show

Comments

phabricator - April 16, 2019, 12:44 p.m.
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG537a8aeb9977: absorb: aborting if another operation is in progress (authored by rdamazio, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D6237?vs=14755&id=14760

REVISION DETAIL
  https://phab.mercurial-scm.org/D6237

AFFECTED FILES
  hgext/absorb.py
  tests/test-absorb-unfinished.t

CHANGE DETAILS




To: rdamazio, #hg-reviewers, pulkit
Cc: mercurial-devel

Patch

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]
+
diff --git a/hgext/absorb.py b/hgext/absorb.py
--- a/hgext/absorb.py
+++ b/hgext/absorb.py
@@ -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