--- a/hgext/mq.py Fri Mar 08 16:59:36 2013 -0800
+++ b/hgext/mq.py Wed Mar 06 20:13:09 2013 -0800
@@ -3037,7 +3037,22 @@
wlock = repo.wlock()
try:
urev = repo.mq.qparents(repo, revs[0])
- repo.dirstate.rebuild(urev, repo[urev].manifest())
+ uctx = repo[urev]
+
+ # only reset the dirstate for files that would actually change
+ # between the working context and uctx
+ descendantrevs = repo.revs("%s::." % uctx.rev())
+ changedfiles = []
+ for rev in descendantrevs:
+ # blindy reset the files, regardless of what actually changed
+ changedfiles.extend(repo[rev].files())
+
+ # reset files that only changed in the dirstate too
+ dirstate = repo.dirstate
+ dirchanges = [f for f in dirstate if dirstate[f] != 'n']
+ changedfiles.extend(dirchanges)
+
+ repo.dirstate.rebuild(urev, uctx.manifest(), changedfiles)
repo.dirstate.write()
update = False
finally: