mercurial/localrepo.py
changeset 13155 f02d7a562a21
parent 13136 6320101a638c
child 13172 84cec5895d01
--- 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