# HG changeset patch # User Idan Kamara # Date 2012-02-15 23:21:34 # Node ID ce0ad184f489edb292034130b0d69e117f0ee390 # Parent 236bb604dc39438327db8551ced7ad7b9c37e487 localrepo: clear _filecache on rollback (issue3261) Files are being replaced by rollback but the corresponding data in localrepo isn't actually updated for things like bookmarks, phases, etc. Then when rollback is done, the cache is updated thinking it has the most up-to-date data, where in fact it is still pre-rollback. We clear _filecache to force everything to be recreated. diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1304,6 +1304,9 @@ class localrepository(repo.repository): # tag cache retrieval" case to work. self.invalidatecaches() + # Discard all cache entries to force reloading everything. + self._filecache.clear() + def walk(self, match, node=None): ''' walk recursively through the directory tree or a given diff --git a/tests/test-commandserver.py b/tests/test-commandserver.py --- a/tests/test-commandserver.py +++ b/tests/test-commandserver.py @@ -200,6 +200,16 @@ def setphase(server): os.system('hg phase -r . -p') runcommand(server, ['phase', '-r', '.']) +def rollback(server): + readchannel(server) + runcommand(server, ['phase', '-r', '.', '-p']) + f = open('a', 'ab') + f.write('a\n') + f.close() + runcommand(server, ['commit', '-Am.']) + runcommand(server, ['rollback']) + runcommand(server, ['phase', '-r', '.']) + if __name__ == '__main__': os.system('hg init') @@ -219,3 +229,4 @@ if __name__ == '__main__': check(bookmarks) check(tagscache) check(setphase) + check(rollback) diff --git a/tests/test-commandserver.py.out b/tests/test-commandserver.py.out --- a/tests/test-commandserver.py.out +++ b/tests/test-commandserver.py.out @@ -134,3 +134,14 @@ testing setphase: 3: draft runcommand phase -r . 3: public +no phases changed + +testing rollback: + + runcommand phase -r . -p + runcommand commit -Am. + runcommand rollback +repository tip rolled back to revision 3 (undo commit) +working directory now based on revision 3 + runcommand phase -r . +3: public