--- 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