# HG changeset patch # User Mads Kiilerich # Date 1476402795 -7200 # Node ID 7356e6b1f5b8f9d73d2b2c8cf0db0498c80b6239 # Parent 736f92c446563e665c9b544838d052e6e5e8a394 util: increase filechunkiter size to 128k 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. diff -r 736f92c44656 -r 7356e6b1f5b8 hgext/largefiles/lfutil.py --- a/hgext/largefiles/lfutil.py Wed Oct 12 12:22:18 2016 +0200 +++ b/hgext/largefiles/lfutil.py Fri Oct 14 01:53:15 2016 +0200 @@ -372,7 +372,7 @@ return '' hasher = hashlib.sha1('') with open(file, 'rb') as fd: - for data in util.filechunkiter(fd, 128 * 1024): + for data in util.filechunkiter(fd): hasher.update(data) return hasher.hexdigest() diff -r 736f92c44656 -r 7356e6b1f5b8 hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py Wed Oct 12 12:22:18 2016 +0200 +++ b/hgext/largefiles/overrides.py Fri Oct 14 01:53:15 2016 +0200 @@ -1356,7 +1356,7 @@ 'downloaded') % lf) path = lfutil.usercachepath(repo.ui, hash) with open(path, "rb") as fpin: - for chunk in util.filechunkiter(fpin, 128 * 1024): + for chunk in util.filechunkiter(fpin): fp.write(chunk) err = 0 return err diff -r 736f92c44656 -r 7356e6b1f5b8 hgext/largefiles/proto.py --- a/hgext/largefiles/proto.py Wed Oct 12 12:22:18 2016 +0200 +++ b/hgext/largefiles/proto.py Fri Oct 14 01:53:15 2016 +0200 @@ -134,7 +134,7 @@ length)) # SSH streams will block if reading more than length - for chunk in util.filechunkiter(stream, 128 * 1024, length): + for chunk in util.filechunkiter(stream, limit=length): yield chunk # HTTP streams must hit the end to process the last empty # chunk of Chunked-Encoding so the connection can be reused. diff -r 736f92c44656 -r 7356e6b1f5b8 mercurial/util.py --- a/mercurial/util.py Wed Oct 12 12:22:18 2016 +0200 +++ b/mercurial/util.py Fri Oct 14 01:53:15 2016 +0200 @@ -1684,9 +1684,9 @@ return ''.join(buf) -def filechunkiter(f, size=65536, limit=None): +def filechunkiter(f, size=131072, limit=None): """Create a generator that produces the data in the file size - (default 65536) bytes at a time, up to optional limit (default is + (default 131072) bytes at a time, up to optional limit (default is to read all data). Chunks may be less than size bytes if the chunk is the last chunk in the file, or the file is a socket or some other type of file that sometimes reads less data than is diff -r 736f92c44656 -r 7356e6b1f5b8 tests/test-largefiles-small-disk.t --- a/tests/test-largefiles-small-disk.t Wed Oct 12 12:22:18 2016 +0200 +++ b/tests/test-largefiles-small-disk.t Fri Oct 14 01:53:15 2016 +0200 @@ -11,7 +11,7 @@ > shutil.copyfileobj = copyfileobj > # > # this makes the rewritten code abort: - > def filechunkiter(f, size=65536, limit=None): + > def filechunkiter(f, size=131072, limit=None): > yield f.read(4) > raise IOError(errno.ENOSPC, os.strerror(errno.ENOSPC)) > util.filechunkiter = filechunkiter