Mercurial > public > mercurial-scm > hg-stable
diff tests/test-commandserver.py @ 18757:1c8e0d6ac3b0 stable
localrepo: always write the filtered phasecache when nodes are destroyed (issue3827)
When the strip command is run, it calls repo.destroyed, which in turn checks if
we read _phasecache, and if we did calls filterunknown on it and flushes the
changes immediately. But in some cases, nothing causes _phasecache to be read,
so we miss out on this and the file remains the same on-disk.
Then a call to invalidate comes, which should refresh _phasecache if it
changed, but it didn't, so it keeps using the old one with the stripped
revision which causes an IndexError.
Test written by Yuya Nishihara.
author | Idan Kamara <idankk86@gmail.com> |
---|---|
date | Sat, 23 Mar 2013 13:34:50 +0200 |
parents | e34106fa0dc3 |
children | 605deb776abf e958b17696fe |
line wrap: on
line diff
--- a/tests/test-commandserver.py Tue Mar 19 16:19:20 2013 -0700 +++ b/tests/test-commandserver.py Sat Mar 23 13:34:50 2013 +0200 @@ -236,6 +236,27 @@ f.close() runcommand(server, ['status', '-i', '-u']) +def phasecacheafterstrip(server): + readchannel(server) + + # create new head, 5:731265503d86 + runcommand(server, ['update', '-C', '0']) + f = open('a', 'ab') + f.write('a\n') + f.close() + runcommand(server, ['commit', '-Am.', 'a']) + runcommand(server, ['log', '-Gq']) + + # make it public; draft marker moves to 4:7966c8e3734d + runcommand(server, ['phase', '-p', '.']) + runcommand(server, ['phase', '.']) # load _phasecache.phaseroots + + # strip 1::4 outside server + os.system('hg --config extensions.mq= strip 1') + + # shouldn't raise "7966c8e3734d: no node!" + runcommand(server, ['branches']) + if __name__ == '__main__': os.system('hg init') @@ -258,3 +279,4 @@ check(rollback) check(branch) check(hgignore) + check(phasecacheafterstrip)