largefiles: always use filechunkiter when iterating files
authorMads Kiilerich <madski@unity3d.com>
Wed, 12 Oct 2016 12:22:18 +0200
changeset 30180 736f92c44656
parent 30179 cdef35b38026
child 30181 7356e6b1f5b8
largefiles: always use filechunkiter when iterating files Before, we would sometimes use the default iterator over large files. That iterator is line based and would add extra buffering and use odd chunk sizes which could give some overhead. copyandhash can't just apply a filechunkiter as it sometimes is passed a genuine generator when downloading remotely.
hgext/largefiles/lfutil.py
hgext/largefiles/localstore.py
hgext/largefiles/remotestore.py
--- a/hgext/largefiles/lfutil.py	Fri Oct 14 23:33:00 2016 +0900
+++ b/hgext/largefiles/lfutil.py	Wed Oct 12 12:22:18 2016 +0200
@@ -231,7 +231,8 @@
     # don't use atomic writes in the working copy.
     with open(path, 'rb') as srcfd:
         with wvfs(filename, 'wb') as destfd:
-            gothash = copyandhash(srcfd, destfd)
+            gothash = copyandhash(
+                util.filechunkiter(srcfd), destfd)
     if gothash != hash:
         repo.ui.warn(_('%s: data corruption in %s with hash %s\n')
                      % (filename, path, gothash))
--- a/hgext/largefiles/localstore.py	Fri Oct 14 23:33:00 2016 +0900
+++ b/hgext/largefiles/localstore.py	Wed Oct 12 12:22:18 2016 +0200
@@ -10,6 +10,7 @@
 from __future__ import absolute_import
 
 from mercurial.i18n import _
+from mercurial import util
 
 from . import (
     basestore,
@@ -42,7 +43,8 @@
             raise basestore.StoreError(filename, hash, self.url,
                 _("can't get file locally"))
         with open(path, 'rb') as fd:
-            return lfutil.copyandhash(fd, tmpfile)
+            return lfutil.copyandhash(
+                util.filechunkiter(fd), tmpfile)
 
     def _verifyfiles(self, contents, filestocheck):
         failed = False
--- a/hgext/largefiles/remotestore.py	Fri Oct 14 23:33:00 2016 +0900
+++ b/hgext/largefiles/remotestore.py	Wed Oct 12 12:22:18 2016 +0200
@@ -118,7 +118,7 @@
         raise NotImplementedError('abstract method')
 
     def _get(self, hash):
-        '''Get file with the given hash from the remote store.'''
+        '''Get a iterator for content with the given hash.'''
         raise NotImplementedError('abstract method')
 
     def _stat(self, hashes):