Mercurial > kallithea
diff rhodecode/controllers/files.py @ 872:b956e6f415a2 beta
implemented #91,
updated docs, and changelog
bumped to newest libs possible for setup.py requirements
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 21 Dec 2010 01:11:38 +0100 |
parents | e8b5be26fb78 |
children | 20ed6f6a6329 |
line wrap: on
line diff
--- a/rhodecode/controllers/files.py Sun Dec 19 20:53:44 2010 +0100 +++ b/rhodecode/controllers/files.py Tue Dec 21 01:11:38 2010 +0100 @@ -39,7 +39,7 @@ from rhodecode.lib.utils import EmptyChangeset from rhodecode.model.scm import ScmModel -from vcs.exceptions import RepositoryError, ChangesetError +from vcs.exceptions import RepositoryError, ChangesetError, ChangesetDoesNotExistError from vcs.nodes import FileNode from vcs.utils import diffs as differ @@ -133,14 +133,32 @@ return render('files/files_annotate.html') - def archivefile(self, repo_name, revision, fileformat): + def archivefile(self, repo_name, fname): + info = fname.split('.') + revision, fileformat = info[0], '.' + '.'.join(info[1:]) archive_specs = { '.tar.bz2': ('application/x-tar', 'tbz2'), '.tar.gz': ('application/x-tar', 'tgz'), '.zip': ('application/zip', 'zip'), } if not archive_specs.has_key(fileformat): - return 'Unknown archive type %s' % fileformat + return _('Unknown archive type %s') % fileformat + + repo = ScmModel().get_repo(repo_name) + + try: + repo.get_changeset(revision) + except ChangesetDoesNotExistError: + return _('Unknown revision %s') % revision + + archive = tempfile.TemporaryFile() + localrepo = repo.repo + fname = '%s-%s%s' % (repo_name, revision, fileformat) + archival.archive(localrepo, archive, revision, archive_specs[fileformat][1], + prefix='%s-%s' % (repo_name, revision)) + response.content_type = archive_specs[fileformat][0] + response.content_disposition = 'attachment; filename=%s' % fname + archive.seek(0) def read_in_chunks(file_object, chunk_size=1024 * 40): """Lazy function (generator) to read a file piece by piece. @@ -151,14 +169,6 @@ break yield data - archive = tempfile.TemporaryFile() - repo = ScmModel().get_repo(repo_name).repo - fname = '%s-%s%s' % (repo_name, revision, fileformat) - archival.archive(repo, archive, revision, archive_specs[fileformat][1], - prefix='%s-%s' % (repo_name, revision)) - response.content_type = archive_specs[fileformat][0] - response.content_disposition = 'attachment; filename=%s' % fname - archive.seek(0) return read_in_chunks(archive) def diff(self, repo_name, f_path):