changeset 2270:c9dc3cd9ce14

merge with beta
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 15 May 2012 23:27:52 +0200
parents 6eaa2395a80e (current diff) f1467dfcf093 (diff)
children a3fc1b09d715
files README.rst docs/changelog.rst rhodecode/__init__.py rhodecode/controllers/files.py rhodecode/templates/changelog/changelog.html
diffstat 3 files changed, 11 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/README.rst	Tue May 15 23:07:59 2012 +0200
+++ b/README.rst	Tue May 15 23:27:52 2012 +0200
@@ -15,7 +15,7 @@
 however RhodeCode can be run as standalone hosted application on your own server.
 It is open source and donation ware and focuses more on providing a customized, 
 self administered interface for Mercurial_ and GIT_  repositories. 
-RhodeCode works on *nix systems and Windows it is powered by a vcs_ library 
+RhodeCode works on \*nix systems and Windows it is powered by a vcs_ library 
 that Lukasz Balcerzak and Marcin Kuzminski created to handle multiple 
 different version control systems.
 
--- a/rhodecode/controllers/files.py	Tue May 15 23:07:59 2012 +0200
+++ b/rhodecode/controllers/files.py	Tue May 15 23:27:52 2012 +0200
@@ -26,6 +26,7 @@
 import os
 import logging
 import traceback
+import tempfile
 
 from pylons import request, response, tmpl_context as c, url
 from pylons.i18n.translation import _
@@ -359,25 +360,22 @@
         except (ImproperArchiveTypeError, KeyError):
             return _('Unknown archive type')
 
+        archive = tempfile.NamedTemporaryFile(mode='w+r+b')
+        cs.fill_archive(stream=archive, kind=fileformat, subrepos=subrepos)
+
         response.content_type = content_type
         response.content_disposition = 'attachment; filename=%s-%s%s' \
-            % (repo_name, revision, ext)
-
-        import tempfile
-        archive = tempfile.mkstemp()[1]
-        t = open(archive, 'wb')
-        cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
+            % (repo_name, revision[:12], ext)
+        response.content_length = str(os.path.getsize(archive.name))
 
-        def get_chunked_archive(archive):
-            stream = open(archive, 'rb')
+        def get_chunked_archive(tmpfile):
             while True:
-                data = stream.read(4096)
+                data = tmpfile.read(16 * 1024)
                 if not data:
-                    os.remove(archive)
+                    tmpfile.close()
                     break
                 yield data
-
-        return get_chunked_archive(archive)
+        return get_chunked_archive(tmpfile=archive)
 
     @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
                                    'repository.admin')
--- a/rhodecode/lib/vcs/backends/hg/changeset.py	Tue May 15 23:07:59 2012 +0200
+++ b/rhodecode/lib/vcs/backends/hg/changeset.py	Tue May 15 23:27:52 2012 +0200
@@ -263,8 +263,6 @@
         archival.archive(self.repository._repo, stream, self.raw_id,
                          kind, prefix=prefix, subrepos=subrepos)
 
-        #stream.close()
-
         if stream.closed and hasattr(stream, 'name'):
             stream = open(stream.name, 'rb')
         elif hasattr(stream, 'mode') and 'r' not in stream.mode: