##// END OF EJS Templates
streamclone: disable the volatile file open handle optimization on Windows...
streamclone: disable the volatile file open handle optimization on Windows Leaving files open caused new failures like this, since a47f09da8bd1: diff --git a/tests/test-persistent-nodemap-stream-clone.t b/tests/test-persistent-nodemap-stream-clone.t --- a/tests/test-persistent-nodemap-stream-clone.t +++ b/tests/test-persistent-nodemap-stream-clone.t @@ -115,7 +115,12 @@ Do a mix of clone and commit at the same $ (hg clone -U --stream ssh://user@dummy/test-repo stream-clone-race-1 --debug 2>> clone-output | grep -E '00(changelog|manifest)' >> clone-output; touch $HG_TEST_STREAM_WALKED_FILE_3) & $ $RUNTESTDIR/testlib/wait-on-file 10 $HG_TEST_STREAM_WALKED_FILE_1 $ hg -R test-repo/ commit -m foo - created new head + transaction abort! + failed to recover 00changelog.n ([WinError 32] The process cannot access the file because it is being used by another process: b'$STR_REPR_TESTTMP\\test-repo/.hg/store/00changelog.n' -> b'$STR_REPR_TESTTMP\\test-repo/.hg/store/00changelog.n-f418dcd6') + rollback failed - please run hg recover + (failure reason: [WinError 32] The process cannot access the file because it is being used by another process: b'$STR_REPR_TESTTMP\\test-repo/.hg/store/00changelog.n' -> b'$STR_REPR_TESTTMP\\test-repo/.hg/store/00changelog.n-f418dcd6') + abort: The process cannot access the file because it is being used by another process: '$TESTTMP\test-repo\.hg\store\00changelog.n' + [255] $ touch $HG_TEST_STREAM_WALKED_FILE_2 $ $RUNTESTDIR/testlib/wait-on-file 10 $HG_TEST_STREAM_WALKED_FILE_3 $ cat clone-output Since the `VolatileManager` falls back to the old copy method when the open file threshold is exceeded, this just drops the threshold so that only 1 file is open. The actual value used (2) is unexpected, and explained inline. I'd like to have a config option for this so that we can test both ways (in theory, it could resort to copies on non-Windows systems too), but I don't see a `uimod.ui` handy. Alternately, I tried replacing the 3 `open()` calls in the `VolatileManager` with `util.posixfile()`, but that simply hung the test on Windows for some reason, I think on the same line that's indicated as failing above. (There was a `grep` command hanging around, as well as `hg -R test-repo serve --stdio`.)

File last commit:

r49730:6000f5b2 default
r53081:e4b242f9 stable
Show More
bdiff-torture.py
107 lines | 2.1 KiB | text/x-python | PythonLexer
Matt Mackall
bdiff: fix latent normalization bug...
r29012 # Randomized torture test generation for bdiff
Yuya Nishihara
py3: make contrib/bdiff-torture.py conform to our import style
r29209 import random
import sys
Matt Mackall
bdiff: fix latent normalization bug...
r29012 from mercurial import (
Yuya Nishihara
bdiff: proxy through mdiff module...
r32201 mdiff,
Gregory Szorc
contrib: use pycompat.xrange in bdiff-torture.py...
r43279 pycompat,
Matt Mackall
bdiff: fix latent normalization bug...
r29012 )
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Mackall
bdiff: fix latent normalization bug...
r29012 def reducetest(a, b):
tries = 0
reductions = 0
print("reducing...")
while tries < 1000:
Augie Fackler
formatting: blacken the codebase...
r43346 a2 = (
"\n".join(l for l in a.splitlines() if random.randint(0, 100) > 0)
+ "\n"
)
b2 = (
"\n".join(l for l in b.splitlines() if random.randint(0, 100) > 0)
+ "\n"
)
Matt Mackall
bdiff: fix latent normalization bug...
r29012 if a2 == a and b2 == b:
continue
if a2 == b2:
continue
tries += 1
try:
test1(a, b)
Martin von Zweigbergk
cleanup: delete lots of unused local variables...
r41401 except Exception:
Matt Mackall
bdiff: fix latent normalization bug...
r29012 reductions += 1
tries = 0
a = a2
b = b2
Augie Fackler
formatting: blacken the codebase...
r43346 print("reduced:", reductions, len(a) + len(b), repr(a), repr(b))
Matt Mackall
bdiff: fix latent normalization bug...
r29012 try:
test1(a, b)
except Exception as inst:
print("failed:", inst)
sys.exit(0)
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Mackall
bdiff: fix latent normalization bug...
r29012 def test1(a, b):
Yuya Nishihara
bdiff: proxy through mdiff module...
r32201 d = mdiff.textdiff(a, b)
Matt Mackall
bdiff: fix latent normalization bug...
r29012 if not d:
raise ValueError("empty")
Yuya Nishihara
mpatch: proxy through mdiff module...
r32202 c = mdiff.patches(a, [d])
Matt Mackall
bdiff: fix latent normalization bug...
r29012 if c != b:
raise ValueError("bad")
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Mackall
bdiff: fix latent normalization bug...
r29012 def testwrap(a, b):
try:
test1(a, b)
return
except Exception as inst:
Pulkit Goyal
bdiff-torture: fix pyflakes warning reporting undefined name 'inst'...
r43123 print("exception:", inst)
Matt Mackall
bdiff: fix latent normalization bug...
r29012 reducetest(a, b)
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Mackall
bdiff: fix latent normalization bug...
r29012 def test(a, b):
testwrap(a, b)
testwrap(b, a)
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Mackall
bdiff: fix latent normalization bug...
r29012 def rndtest(size, noise):
a = []
src = " aaaaaaaabbbbccd"
Gregory Szorc
contrib: use pycompat.xrange in bdiff-torture.py...
r43279 for x in pycompat.xrange(size):
Matt Mackall
bdiff: fix latent normalization bug...
r29012 a.append(src[random.randint(0, len(src) - 1)])
while True:
b = [c for c in a if random.randint(0, 99) > noise]
b2 = []
for c in b:
b2.append(c)
while random.randint(0, 99) < noise:
b2.append(src[random.randint(0, len(src) - 1)])
if b2 != a:
break
a = "\n".join(a) + "\n"
b = "\n".join(b2) + "\n"
test(a, b)
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Mackall
bdiff: fix latent normalization bug...
r29012 maxvol = 10000
startsize = 2
while True:
size = startsize
count = 0
while size < maxvol:
print(size)
volume = 0
while volume < maxvol:
rndtest(size, 2)
volume += size
count += 2
size *= 2
maxvol *= 4
startsize *= 4