[PATCH] make commit fail when committing unresolved files

Stefano Tortarolo stefano.tortarolo at gmail.com
Thu Jul 31 15:37:18 CDT 2008


# HG changeset patch
# User Stefano Tortarolo <stefano.tortarolo at gmail.com>
# Date 1217536632 -7200
# Node ID acb7091e4eea7a7dbd863d489233b03d6aaa4c9d
# Parent  8dc510c4caee437631e47ec9be891279abeffc33
make commit fail when committing unresolved files

diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -12,6 +12,7 @@
 import lock, transaction, stat, errno, ui, store
 import os, revlog, time, util, extensions, hook, inspect
 import match as match_
+import merge as merge_
 
 class localrepository(repo.repository):
     capabilities = util.set(('lookup', 'changegroupsubset'))
@@ -766,6 +767,11 @@
                 update_dirstate = (self.dirstate.parents()[0] == p1)
                 changes = [files, [], [], [], []]
 
+            ms = merge_.mergestate(self)
+            for f in changes[0]:
+                if f in ms and ms[f] == 'u':
+                    raise util.Abort(_("unresolved merge conflicts "
+                                                    "(see hg resolve)"))
             wctx = context.workingctx(self, (p1, p2), text, user, date,
                                       extra, changes)
             return self._commitctx(wctx, force, force_editor, empty_ok,
diff --git a/tests/test-add b/tests/test-add
--- a/tests/test-add
+++ b/tests/test-add
@@ -32,6 +32,7 @@
 echo % should fail
 hg add a
 hg st
+hg resolve -m a
 hg ci -m merge
 
 echo % issue683
diff --git a/tests/test-commit-unresolved b/tests/test-commit-unresolved
new file mode 100755
--- /dev/null
+++ b/tests/test-commit-unresolved
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+echo "[extensions]" >> $HGRCPATH
+echo "graphlog=" >> $HGRCPATH
+echo "rebase=" >> $HGRCPATH
+
+function addcommit {
+    echo $1 > $1
+    hg add $1
+    hg commit -d "${2} 0" -u test -m $1
+}
+function commit {
+    hg commit -d "${2} 0" -u test -m $1
+}
+
+hg init a
+cd a
+addcommit "A" 0
+addcommit "B" 1
+echo "C" >> A
+commit "C" 2
+
+hg update -C 0
+echo "D" >> A
+commit "D" 3
+
+echo
+echo "% Merging a conflict araises"
+hg merge
+
+echo
+echo "% Correct the conflict without marking the file as resolved"
+echo "ABCD" > A
+hg commit -m "Merged"
+
+echo
+echo "% Mark the conflict as resolved and commit"
+hg resolve -m A
+hg commit -m "Merged"
+
+exit 0
diff --git a/tests/test-commit-unresolved.out b/tests/test-commit-unresolved.out
new file mode 100644
--- /dev/null
+++ b/tests/test-commit-unresolved.out
@@ -0,0 +1,14 @@
+1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+created new head
+
+% Merging a conflict araises
+merging A
+warning: conflicts during merge.
+merging A failed!
+1 files updated, 0 files merged, 0 files removed, 1 files unresolved
+use 'hg resolve' to retry unresolved file merges
+
+% Correct the conflict without marking the file as resolved
+abort: unresolved merge conflicts (see hg resolve)
+
+% Mark the conflict as resolved and commit
diff --git a/tests/test-convert-svn-sink b/tests/test-convert-svn-sink
--- a/tests/test-convert-svn-sink
+++ b/tests/test-convert-svn-sink
@@ -128,6 +128,7 @@
 hg --cwd b up -C 2
 hg --cwd b merge
 hg --cwd b revert -r 2 b
+hg resolve -m b
 hg --cwd b ci -d '5 0' -m 'merge'
 
 hg convert -d svn b
diff --git a/tests/test-merge7 b/tests/test-merge7
--- a/tests/test-merge7
+++ b/tests/test-merge7
@@ -43,6 +43,7 @@
 three
 EOF
 rm -f *.orig
+hg resolve -m test.txt
 hg commit -m "Merge 1" -d "1000000 0"
 
 # change test-a again


More information about the Mercurial-devel mailing list