mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 09:17:30 +03:00
39f2a13215
util.filechunkiter has been using a chunk size of 64k for more than 10 years, also in years where Moore's law still was a law. It is probably ok to bump it now and perhaps get a slight win in some cases. Also, largefiles have been using 128k for a long time. Specifying that size multiple times (or forgetting to do it) seems a bit stupid. Decreasing it to 64k also seems unfortunate. Thus, we will set the default chunksize to 128k and use the default everywhere.
72 lines
1.9 KiB
Perl
72 lines
1.9 KiB
Perl
Test how largefiles abort in case the disk runs full
|
|
|
|
$ cat > criple.py <<EOF
|
|
> import os, errno, shutil
|
|
> from mercurial import util
|
|
> #
|
|
> # this makes the original largefiles code abort:
|
|
> _origcopyfileobj = shutil.copyfileobj
|
|
> def copyfileobj(fsrc, fdst, length=16*1024):
|
|
> # allow journal files (used by transaction) to be written
|
|
> if 'journal.' in fdst.name:
|
|
> return _origcopyfileobj(fsrc, fdst, length)
|
|
> fdst.write(fsrc.read(4))
|
|
> raise IOError(errno.ENOSPC, os.strerror(errno.ENOSPC))
|
|
> shutil.copyfileobj = copyfileobj
|
|
> #
|
|
> # this makes the rewritten code abort:
|
|
> def filechunkiter(f, size=131072, limit=None):
|
|
> yield f.read(4)
|
|
> raise IOError(errno.ENOSPC, os.strerror(errno.ENOSPC))
|
|
> util.filechunkiter = filechunkiter
|
|
> #
|
|
> def oslink(src, dest):
|
|
> raise OSError("no hardlinks, try copying instead")
|
|
> util.oslink = oslink
|
|
> 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
|
|
|
|
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
|
|
dirstate
|