##// END OF EJS Templates
initial version of #788 tarball cache
marcink -
r3490:c0ac34b8 beta
parent child Browse files
Show More
@@ -65,6 +65,8 b' static_files = true'
65 65 lang = en
66 66 cache_dir = %(here)s/data
67 67 index_dir = %(here)s/data/index
68 # set this path to use archive download cache
69 #archive_cache_dir = /tmp/rhodecode_tarballcache
68 70 app_instance_uuid = rc-develop
69 71 cut_off_limit = 256000
70 72 vcs_full_cache = True
@@ -65,6 +65,8 b' static_files = true'
65 65 lang = en
66 66 cache_dir = %(here)s/data
67 67 index_dir = %(here)s/data/index
68 # set this path to use archive download cache
69 #archive_cache_dir = /tmp/rhodecode_tarballcache
68 70 app_instance_uuid = rc-production
69 71 cut_off_limit = 256000
70 72 vcs_full_cache = True
@@ -65,6 +65,8 b' static_files = true'
65 65 lang = en
66 66 cache_dir = %(here)s/data
67 67 index_dir = %(here)s/data/index
68 # set this path to use archive download cache
69 #archive_cache_dir = /tmp/rhodecode_tarballcache
68 70 app_instance_uuid = ${app_instance_uuid}
69 71 cut_off_limit = 256000
70 72 vcs_full_cache = True
@@ -27,6 +27,7 b' import os'
27 27 import logging
28 28 import traceback
29 29 import tempfile
30 import shutil
30 31
31 32 from pylons import request, response, tmpl_context as c, url
32 33 from pylons.i18n.translation import _
@@ -429,11 +430,40 b' class FilesController(BaseRepoController'
429 430 return _('Empty repository')
430 431 except (ImproperArchiveTypeError, KeyError):
431 432 return _('Unknown archive type')
433 # archive cache
434 from rhodecode import CONFIG
435 rev_name = cs.raw_id[:12]
436 archive_name = '%s-%s%s' % (safe_str(repo_name.replace('/', '_')),
437 safe_str(rev_name), ext)
432 438
433 fd, archive = tempfile.mkstemp()
434 t = open(archive, 'wb')
435 cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
436 t.close()
439 use_cached_archive = False # defines if we use cached version of archive
440 archive_cache_enabled = CONFIG.get('archive_cache_dir')
441 if not subrepos and archive_cache_enabled:
442 #check if we it's ok to write
443 if not os.path.isdir(CONFIG['archive_cache_dir']):
444 os.makedirs(CONFIG['archive_cache_dir'])
445 cached_archive_path = os.path.join(CONFIG['archive_cache_dir'], archive_name)
446 if os.path.isfile(cached_archive_path):
447 log.debug('Found cached archive in %s' % cached_archive_path)
448 fd, archive = None, cached_archive_path
449 use_cached_archive = True
450 else:
451 log.debug('Archive %s is not yet cached' % (archive_name))
452
453 if not use_cached_archive:
454 #generate new archive
455 try:
456 fd, archive = tempfile.mkstemp()
457 t = open(archive, 'wb')
458 log.debug('Creating new temp archive in %s' % archive)
459 cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
460 if archive_cache_enabled:
461 #if we generated the archive and use cache rename that
462 log.debug('Storing new archive in %s' % cached_archive_path)
463 shutil.move(archive, cached_archive_path)
464 archive = cached_archive_path
465 finally:
466 t.close()
437 467
438 468 def get_chunked_archive(archive):
439 469 stream = open(archive, 'rb')
@@ -441,14 +471,15 b' class FilesController(BaseRepoController'
441 471 data = stream.read(16 * 1024)
442 472 if not data:
443 473 stream.close()
444 os.close(fd)
445 os.remove(archive)
474 if fd: # fd means we used temporary file
475 os.close(fd)
476 if not archive_cache_enabled:
477 log.debug('Destroing temp archive %s' % archive)
478 os.remove(archive)
446 479 break
447 480 yield data
448 481
449 response.content_disposition = str('attachment; filename=%s-%s%s' \
450 % (safe_str(repo_name),
451 safe_str(revision), ext))
482 response.content_disposition = str('attachment; filename=%s' % (archive_name))
452 483 response.content_type = str(content_type)
453 484 return get_chunked_archive(archive)
454 485
@@ -65,6 +65,8 b' static_files = true'
65 65 lang = en
66 66 cache_dir = /tmp/rc/data
67 67 index_dir = /tmp/rc/index
68 # set this path to use archive download cache
69 #archive_cache_dir = /tmp/rhodecode_tarballcache
68 70 app_instance_uuid = develop-test
69 71 cut_off_limit = 256000
70 72 vcs_full_cache = False
General Comments 0
You need to be logged in to leave comments. Login now