changeset 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 7f9e006aa26f
children 386fe4ce5f97
files docs/changelog.rst rhodecode/config/routing.py rhodecode/controllers/files.py rhodecode/templates/summary/summary.html setup.py
diffstat 5 files changed, 44 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/docs/changelog.rst	Sun Dec 19 20:53:44 2010 +0100
+++ b/docs/changelog.rst	Tue Dec 21 01:11:38 2010 +0100
@@ -3,7 +3,7 @@
 Changelog
 =========
 
-1.1.0 (**2010-XX-XX**)
+1.2.0 (**2010-12-18**)
 ----------------------
 
 :status: in-progress
@@ -12,6 +12,18 @@
 news
 ++++
 
+- implemented #91 added nicer looking archive urls
+
+fixes
+++++
+
+
+1.1.0 (**2010-12-18**)
+----------------------
+
+news
+++++
+
 - rewrite of internals for vcs >=0.1.10
 - uses mercurial 1.7 with dotencode disabled for maintaining compatibility 
   with older clients
@@ -117,5 +129,4 @@
 
 - Disabled dirsize in file browser, it's causing nasty bug when dir renames 
   occure. After vcs is fixed it'll be put back again.
-- templating/css rewrites, optimized css.
-
+- templating/css rewrites, optimized css.
\ No newline at end of file
--- a/rhodecode/config/routing.py	Sun Dec 19 20:53:44 2010 +0100
+++ b/rhodecode/config/routing.py	Tue Dec 21 01:11:38 2010 +0100
@@ -189,8 +189,8 @@
     map.connect('files_annotate_home', '/{repo_name:.*}/annotate/{revision}/{f_path:.*}',
                 controller='files', action='annotate', revision='tip', f_path='',
                 conditions=dict(function=check_repo))
-    map.connect('files_archive_home', '/{repo_name:.*}/archive/{revision}/{fileformat}',
-                controller='files', action='archivefile', revision='tip',
+    map.connect('files_archive_home', '/{repo_name:.*}/archive/{fname}',
+                controller='files', action='archivefile',
                 conditions=dict(function=check_repo))
     map.connect('repo_settings_delete', '/{repo_name:.*}/settings',
                 controller='settings', action="delete",
--- 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):
--- a/rhodecode/templates/summary/summary.html	Sun Dec 19 20:53:44 2010 +0100
+++ b/rhodecode/templates/summary/summary.html	Tue Dec 21 01:11:38 2010 +0100
@@ -223,7 +223,7 @@
 		             %endif
 		             ${h.link_to(c.repo_info.name+'.'+archive['type'],
 		                h.url('files_archive_home',repo_name=c.repo_info.name,
-		                revision='tip',fileformat=archive['extension']),class_="archive_icon")}
+		                fname='tip'+archive['extension']),class_="archive_icon")}
 		        %endfor
 			  </div>
 			 </div>
--- a/setup.py	Sun Dec 19 20:53:44 2010 +0100
+++ b/setup.py	Tue Dec 21 01:11:38 2010 +0100
@@ -5,13 +5,13 @@
 
 requirements = [
         "Pylons==1.0.0",
-        "SQLAlchemy==0.6.5",
+        "SQLAlchemy>=0.6.5",
         "Mako==0.3.6",
-        "vcs==0.1.10",
-        "pygments==1.3.1",
-        "mercurial==1.7.2",
-        "whoosh==1.3.4",
-        "celery==2.1.4",
+        "vcs=>0.1.10",
+        "pygments>=1.3.1",
+        "mercurial>=1.7.2",
+        "whoosh>=1.3.4",
+        "celery>=2.1.4",
         "py-bcrypt",
         "babel",
     ]