diff hgext/largefiles/remotestore.py @ 19004:6614e5e24e66

largefiles: move protocol conversion into getlfile and make it an iterable Avoid the intermediate limitreader and filechunkiter between getlfile and copyandhash - return the right protocol and put the complexity where it better can be managed.
author Mads Kiilerich <madski@unity3d.com>
date Tue, 16 Apr 2013 01:46:39 +0200
parents ad993cb7bbb1
children 9d33d6e0d442
line wrap: on
line diff
--- a/hgext/largefiles/remotestore.py	Mon Apr 15 23:47:04 2013 +0200
+++ b/hgext/largefiles/remotestore.py	Tue Apr 16 01:46:39 2013 +0200
@@ -58,7 +58,7 @@
                                'statlfile (%r)' % stat)
 
         try:
-            length, infile = self._get(hash)
+            chunks = self._get(hash)
         except urllib2.HTTPError, e:
             # 401s get converted to util.Aborts; everything else is fine being
             # turned into a StoreError
@@ -71,14 +71,7 @@
         except IOError, e:
             raise basestore.StoreError(filename, hash, self.url, str(e))
 
-        # Mercurial does not close its SSH connections after writing a stream
-        if length is not None:
-            infile = lfutil.limitreader(infile, length)
-        try:
-            return lfutil.copyandhash(util.filechunkiter(infile, 128 * 1024),
-                                      tmpfile)
-        finally:
-            infile.close()
+        return lfutil.copyandhash(chunks, tmpfile)
 
     def _verifyfile(self, cctx, cset, contents, standin, verified):
         filename = lfutil.splitstandin(standin)