--- a/mercurial/merge.py Thu Feb 17 18:05:27 2011 -0200
+++ b/mercurial/merge.py Wed Feb 16 08:56:11 2011 -0800
@@ -508,6 +508,11 @@
if not force and (wc.files() or wc.deleted()):
raise util.Abort(_("outstanding uncommitted changes "
"(use 'hg status' to list changes)"))
+ for s in wc.substate:
+ if wc.sub(s).dirty():
+ raise util.Abort(_("outstanding uncommitted changes in "
+ "subrepository '%s'") % s)
+
elif not overwrite:
if pa == p1 or pa == p2: # linear
pass # all good
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-subrepos.t Wed Feb 16 08:56:11 2011 -0800
@@ -0,0 +1,25 @@
+ $ hg init
+
+ $ echo a > a
+ $ hg ci -qAm 'add a'
+
+ $ hg init subrepo
+ $ echo 'subrepo = http://example.net/libfoo' > .hgsub
+ $ hg ci -qAm 'added subrepo'
+
+ $ hg up -qC 0
+ $ echo ax > a
+ $ hg ci -m 'changed a'
+ created new head
+
+ $ hg up -qC 1
+ $ cd subrepo
+ $ echo b > b
+ $ hg add b
+ $ cd ..
+
+Should fail, since there are added files to subrepo:
+
+ $ hg merge
+ abort: outstanding uncommitted changes in subrepository 'subrepo'
+ [255]