~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/controllers/bundle_ui.py

  • Committer: Michael Hudson
  • Date: 2008-06-19 01:18:01 UTC
  • mto: This revision was merged to the branch mainline in revision 164.
  • Revision ID: michael.hudson@canonical.com-20080619011801-fwnrw5ntwnz7q3cu
testingĀ isĀ grate

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
#
18
18
 
19
 
import os
20
19
import time
21
20
 
22
 
import turbogears
23
 
from cherrypy import HTTPRedirect, response
24
 
 
25
 
from loggerhead import util
 
21
from paste import httpexceptions
 
22
from paste.request import path_info_pop
26
23
 
27
24
 
28
25
class BundleUI (object):
32
29
        self._branch = branch
33
30
        self.log = branch.log
34
31
 
35
 
    @turbogears.expose()
36
 
    def default(self, *args, **kw):
37
 
        # /bundle/<rev_id>/filename
 
32
    def default(self, request, response):
 
33
        # /bundle/<rev_id>/[<compare_rev_id>/]filename
38
34
        z = time.time()
39
 
        h = self._branch.get_history()
40
 
 
41
 
        if len(args) < 1:
42
 
            raise HTTPRedirect(self._branch.url('/changes'))
43
 
        revid = h.fix_revid(args[0])
44
 
 
 
35
        h = self._branch.history
 
36
 
 
37
        h._branch.lock_read()
45
38
        try:
46
 
            bundle_data = h.get_bundle(revid)
47
 
        except Exception, x:
48
 
            self.log.error('Exception fetching bundle: %s' % (x,))
49
 
            util.log_exception(self.log)
50
 
            raise HTTPRedirect(self._branch.url('/changes'))
51
 
            
52
 
        response.headers['Content-Type'] = 'text/plain'
53
 
        response.headers['Content-Length'] = len(bundle_data)
54
 
        response.body = bundle_data
55
 
        self.log.info('/bundle: %r seconds' % (time.time() - z,))
56
 
        return response.body
 
39
            args = []
 
40
            while 1:
 
41
                arg = path_info_pop(request.environ)
 
42
                if arg is None:
 
43
                    break
 
44
                args.append(arg)
 
45
            if len(args) < 1:
 
46
                raise httpexceptions.HTTPMovedPermanently('../changes')
 
47
            revid = h.fix_revid(args[0])
 
48
            if len(args) >= 3:
 
49
                compare_revid = h.fix_revid(args[1])
 
50
            else:
 
51
                compare_revid = None
 
52
 
 
53
            try:
 
54
                bundle_data = h.get_bundle(revid, compare_revid)
 
55
            except:
 
56
                self.log.exception('Exception fetching bundle')
 
57
                raise httpexceptions.HTTPServerError('Could not fetch bundle')
 
58
 
 
59
            response.headers['Content-Type'] = 'application/octet-stream'
 
60
            response.headers['Content-Length'] = len(bundle_data)
 
61
            response.write(bundle_data)
 
62
            self.log.info('/bundle: %r seconds' % (time.time() - z,))
 
63
        finally:
 
64
            h._branch.unlock()