--- a/mercurial/dirstate.py Mon Apr 05 01:10:09 2010 +0200
+++ b/mercurial/dirstate.py Mon Apr 05 17:48:00 2010 -0500
@@ -391,16 +391,8 @@
# use the modification time of the newly created temporary file as the
# filesystem's notion of 'now'
now = int(util.fstat(st).st_mtime)
-
- cs = cStringIO.StringIO()
- copymap = self._copymap
- pack = struct.pack
- write = cs.write
- write("".join(self._pl))
- for f, e in self._map.iteritems():
- if f in copymap:
- f = "%s\0%s" % (f, copymap[f])
-
+ for f in self._map.keys():
+ e = self._map[f]
if e[0] == 'n' and e[3] == now:
# The file was last modified "simultaneously" with the current
# write to dirstate (i.e. within the same second for file-
@@ -411,8 +403,16 @@
# dirstate, forcing future 'status' calls to compare the
# contents of the file. This prevents mistakenly treating such
# files as clean.
- e = (e[0], 0, -1, -1) # mark entry as 'unset'
+ self._map[f] = (e[0], 0, -1, -1) # mark entry as 'unset'
+ cs = cStringIO.StringIO()
+ copymap = self._copymap
+ pack = struct.pack
+ write = cs.write
+ write("".join(self._pl))
+ for f, e in self._map.iteritems():
+ if f in copymap:
+ f = "%s\0%s" % (f, copymap[f])
e = pack(_format, e[0], e[1], e[2], e[3], len(f))
write(e)
write(f)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-status-inprocess.py Mon Apr 05 17:48:00 2010 -0500
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+import os
+from mercurial.ui import ui
+from mercurial.localrepo import localrepository
+from mercurial.commands import add, commit, status
+
+u = ui()
+
+print '% creating repo'
+repo = localrepository(u, '.', create=True)
+
+f = open('test.py', 'w')
+try:
+ f.write('foo\n')
+finally:
+ f.close
+
+print '% add and commit'
+add(u, repo, 'test.py')
+commit(u, repo, message='*')
+status(u, repo, clean=True)
+
+
+print '% change'
+f = open('test.py', 'w')
+try:
+ f.write('bar\n')
+finally:
+ f.close()
+
+# this would return clean instead of changed before the fix
+status(u, repo, clean=True, modified=True)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-status-inprocess.py.out Mon Apr 05 17:48:00 2010 -0500
@@ -0,0 +1,5 @@
+% creating repo
+% add and commit
+C test.py
+% change
+M test.py