diff -r e11c14f14491 -r f02d7a562a21 mercurial/localrepo.py --- a/mercurial/localrepo.py Thu Dec 16 07:45:22 2010 -0600 +++ b/mercurial/localrepo.py Mon Nov 29 09:37:23 2010 +0100 @@ -949,6 +949,7 @@ # commit subs if subs or removedsubs: + pstate = subrepo.substate(self['.']) state = wctx.substate.copy() for s in sorted(subs): sub = wctx.sub(s) @@ -956,7 +957,19 @@ subrepo.subrelpath(sub)) sr = sub.commit(cctx._text, user, date) state[s] = (state[s][0], sr) - subrepo.writestate(self, state) + + changed = False + if len(pstate) != len(state): + changed = True + if not changed: + for newstate in state: + if state[newstate][1] != pstate[newstate]: + changed = True + if changed: + subrepo.writestate(self, state) + elif (changes[0] == ['.hgsubstate'] and changes[1] == [] and + changes[2] == []): + return None # Save commit message in case this transaction gets rolled back # (e.g. by a pretxncommit hook). Leave the content alone on