Mercurial > hg
view tests/test-atomictempfile.py @ 23813:932f814bf016
setdiscovery: always add exponential sample to the heads
As explained in a previous changeset, prioritizing heads too much behaves
pathologically when there are more heads than the sample size. To counter this,
we always inject exponential samples before reducing to the sample size limit.
This already show some benefit in the test themselves, but on a real-world example
this moves my discovery for push to pathologically headed repo from 45 rounds to
17 of them.
We should maybe ensure that at least 25% of the result sample is heads, but I
think the random sampling will be fine in practice.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Wed, 07 Jan 2015 17:28:51 -0800 |
parents | fb9d1c2805ff |
children | f00f1de16454 |
line wrap: on
line source
import os import glob import unittest import silenttestrunner from mercurial.util import atomictempfile class testatomictempfile(unittest.TestCase): def test1_simple(self): if os.path.exists('foo'): os.remove('foo') file = atomictempfile('foo') (dir, basename) = os.path.split(file._tempname) self.assertFalse(os.path.isfile('foo')) self.assertTrue(basename in glob.glob('.foo-*')) file.write('argh\n') file.close() self.assertTrue(os.path.isfile('foo')) self.assertTrue(basename not in glob.glob('.foo-*')) # discard() removes the temp file without making the write permanent def test2_discard(self): if os.path.exists('foo'): os.remove('foo') file = atomictempfile('foo') (dir, basename) = os.path.split(file._tempname) file.write('yo\n') file.discard() self.assertFalse(os.path.isfile('foo')) self.assertTrue(basename not in os.listdir('.')) # if a programmer screws up and passes bad args to atomictempfile, they # get a plain ordinary TypeError, not infinite recursion def test3_oops(self): self.assertRaises(TypeError, atomictempfile) if __name__ == '__main__': silenttestrunner.main(__name__)