diff -r 2ef915184ff2 -r d0e0d3d43e14 mercurial/subrepo.py --- a/mercurial/subrepo.py Fri Jan 21 14:42:15 2011 -0600 +++ b/mercurial/subrepo.py Sat Jan 22 16:15:40 2011 +0100 @@ -499,13 +499,23 @@ raise util.Abort(stderr) return stdout - def _wcrev(self): + def _wcrevs(self): + # Get the working directory revision as well as the last + # commit revision so we can compare the subrepo state with + # both. We used to store the working directory one. output = self._svncommand(['info', '--xml']) doc = xml.dom.minidom.parseString(output) entries = doc.getElementsByTagName('entry') - if not entries: - return '0' - return str(entries[0].getAttribute('revision')) or '0' + lastrev, rev = '0', '0' + if entries: + rev = str(entries[0].getAttribute('revision')) or '0' + commits = entries[0].getElementsByTagName('commit') + if commits: + lastrev = str(commits[0].getAttribute('revision')) or '0' + return (lastrev, rev) + + def _wcrev(self): + return self._wcrevs()[0] def _wcchanged(self): """Return (changes, extchanges) where changes is True @@ -534,7 +544,7 @@ return bool(changes), False def dirty(self): - if self._wcrev() == self._state[1] and not self._wcchanged()[0]: + if self._state[1] in self._wcrevs() and not self._wcchanged()[0]: return False return True