test-largefiles-small-disk.t
74 lines
| 2.0 KiB
| text/troff
|
Tads3Lexer
/ tests / test-largefiles-small-disk.t
Martin Geisler
|
r15571 | Test how largefiles abort in case the disk runs full | ||
$ cat > criple.py <<EOF | ||||
Augie Fackler
|
r33964 | > from __future__ import absolute_import | ||
> import errno | ||||
> import os | ||||
> import shutil | ||||
Martin Geisler
|
r15571 | > from mercurial import util | ||
> # | ||||
> # this makes the original largefiles code abort: | ||||
Jun Wu
|
r31207 | > _origcopyfileobj = shutil.copyfileobj | ||
Martin Geisler
|
r15571 | > def copyfileobj(fsrc, fdst, length=16*1024): | ||
Jun Wu
|
r31207 | > # allow journal files (used by transaction) to be written | ||
> if 'journal.' in fdst.name: | ||||
> return _origcopyfileobj(fsrc, fdst, length) | ||||
Martin Geisler
|
r15571 | > fdst.write(fsrc.read(4)) | ||
> raise IOError(errno.ENOSPC, os.strerror(errno.ENOSPC)) | ||||
> shutil.copyfileobj = copyfileobj | ||||
> # | ||||
> # this makes the rewritten code abort: | ||||
Mads Kiilerich
|
r30181 | > def filechunkiter(f, size=131072, limit=None): | ||
Martin Geisler
|
r15571 | > yield f.read(4) | ||
> raise IOError(errno.ENOSPC, os.strerror(errno.ENOSPC)) | ||||
> util.filechunkiter = filechunkiter | ||||
Martin Geisler
|
r15572 | > # | ||
> def oslink(src, dest): | ||||
> raise OSError("no hardlinks, try copying instead") | ||||
> util.oslink = oslink | ||||
Martin Geisler
|
r15571 | > EOF | ||
$ echo "[extensions]" >> $HGRCPATH | ||||
$ echo "largefiles =" >> $HGRCPATH | ||||
$ hg init alice | ||||
$ cd alice | ||||
$ echo "this is a very big file" > big | ||||
$ hg add --large big | ||||
$ hg commit --config extensions.criple=$TESTTMP/criple.py -m big | ||||
abort: No space left on device | ||||
[255] | ||||
The largefile is not created in .hg/largefiles: | ||||
$ ls .hg/largefiles | ||||
dirstate | ||||
The user cache is not even created: | ||||
>>> import os; os.path.exists("$HOME/.cache/largefiles/") | ||||
False | ||||
Martin Geisler
|
r15572 | |||
Make the commit with space on the device: | ||||
$ hg commit -m big | ||||
Now make a clone with a full disk, and make sure lfutil.link function | ||||
makes copies instead of hardlinks: | ||||
$ cd .. | ||||
$ hg --config extensions.criple=$TESTTMP/criple.py clone --pull alice bob | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
updating to branch default | ||||
getting changed largefiles | ||||
abort: No space left on device | ||||
[255] | ||||
The largefile is not created in .hg/largefiles: | ||||
$ ls bob/.hg/largefiles | ||||
Mads Kiilerich
|
r20063 | dirstate | ||