comparison tests/test-largefiles-small-disk.t @ 15571:809788118aa2 stable

largefiles: write .hg/largefiles/ files atomically Before, it was possible to create a .hg/largefiles/hash file with truncated content, i.e., content where SHA-1(content) != hash This breaks the fundamental invariant in largefiles that the file content for files in .hg/largefiles hash to the filename.
author Martin Geisler <mg@aragost.com>
date Thu, 24 Nov 2011 18:12:13 +0100
parents
children 926bc23d0b6a
comparison
equal deleted inserted replaced
15570:0f208626d503 15571:809788118aa2
1 Test how largefiles abort in case the disk runs full
2
3 $ cat > criple.py <<EOF
4 > import os, errno, shutil
5 > from mercurial import util
6 > #
7 > # this makes the original largefiles code abort:
8 > def copyfileobj(fsrc, fdst, length=16*1024):
9 > fdst.write(fsrc.read(4))
10 > raise IOError(errno.ENOSPC, os.strerror(errno.ENOSPC))
11 > shutil.copyfileobj = copyfileobj
12 > #
13 > # this makes the rewritten code abort:
14 > def filechunkiter(f, size=65536, limit=None):
15 > yield f.read(4)
16 > raise IOError(errno.ENOSPC, os.strerror(errno.ENOSPC))
17 > util.filechunkiter = filechunkiter
18 > EOF
19
20 $ echo "[extensions]" >> $HGRCPATH
21 $ echo "largefiles =" >> $HGRCPATH
22
23 $ hg init alice
24 $ cd alice
25 $ echo "this is a very big file" > big
26 $ hg add --large big
27 $ hg commit --config extensions.criple=$TESTTMP/criple.py -m big
28 abort: No space left on device
29 [255]
30
31 The largefile is not created in .hg/largefiles:
32
33 $ ls .hg/largefiles
34 dirstate
35
36 The user cache is not even created:
37
38 >>> import os; os.path.exists("$HOME/.cache/largefiles/")
39 False