diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -726,6 +726,12 @@ class svnsubrepo(abstractsubrepo): self._ui.status(commitinfo) newrev = re.search('Committed revision ([0-9]+).', commitinfo) if not newrev: + if not commitinfo.strip(): + # Sometimes, our definition of "changed" differs from + # svn one. For instance, svn ignores missing files + # when committing. If there are only missing files, no + # commit is made, no output and no error code. + raise util.Abort(_('failed to commit svn changes')) raise util.Abort(commitinfo.splitlines()[-1]) newrev = newrev.groups()[0] self._ui.status(self._svncommand(['update', '-r', newrev])[0]) diff --git a/tests/test-subrepo-svn.t b/tests/test-subrepo-svn.t --- a/tests/test-subrepo-svn.t +++ b/tests/test-subrepo-svn.t @@ -120,6 +120,15 @@ change file in svn and hg, commit source file://*/svn-repo/src (glob) revision 2 +missing svn file, commit should fail + + $ rm s/alpha + $ hg commit --subrepos -m 'abort on missing file' + committing subrepository s + abort: failed to commit svn changes + [255] + $ svn revert s/alpha > /dev/null + add an unrelated revision in svn and update the subrepo to without bringing any changes.