~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to __init__.py

  • Committer: Robey Pointer
  • Date: 2007-01-14 23:46:10 UTC
  • Revision ID: robey@lag.net-20070114234610-z3cn5j8eky0vqsg3
add a decorator to strip the whitespace from the generated html in the big
pages.  (kid theoretically can do this on its own, but it's not hooked up
from turbogears, and even if it was, it doesn't seem to work on html.)
removing whitespace appears to trim a good 20-30% from the generated pages,
so may help a lot for slow links.  in combination with the trimmed-down
javascript names, some of the worst offenders (revisions with gigantic
diffs) are now nearly half the size they were a few days ago.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2009 Canonical Ltd
2
 
#
3
 
# This program is free software; you can redistribute it and/or modify
4
 
# it under the terms of the GNU General Public License as published by
5
 
# the Free Software Foundation; either version 2 of the License, or
6
 
# (at your option) any later version.
7
 
#
8
 
# This program is distributed in the hope that it will be useful,
9
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
# GNU General Public License for more details.
12
 
#
13
 
# You should have received a copy of the GNU General Public License
14
 
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
 
 
17
 
 
18
 
# This file allows loggerhead to be treated as a plugin for bzr.
19
 
#
20
 
# XXX: Because loggerhead already contains a loggerhead directory, much of the
21
 
# code is going to appear loaded at bzrlib.plugins.loggerhead.loggerhead.
22
 
# This seems like the easiest thing, because bzrlib wants the top-level plugin
23
 
# directory to be the module, but when it's used as a library people expect
24
 
# the source directory to contain a directory called loggerhead.  -- mbp
25
 
# 20090123
26
 
 
27
 
"""Loggerhead web viewer for Bazaar branches.
28
 
 
29
 
This provides a new option "--http" to the "bzr serve" command, that 
30
 
starts a web server to browse the contents of a branch.
31
 
"""
32
 
 
33
 
version_info = (1, 11, 0)
34
 
 
35
 
if __name__ == 'bzrlib.plugins.loggerhead':
36
 
    import bzrlib
37
 
    from bzrlib.api import require_any_api
38
 
 
39
 
    require_any_api(bzrlib, [(1, 11, 0), (1, 13, 0)])
40
 
 
41
 
    # TODO: This should provide a new type of server that can be used by bzr
42
 
    # serve, maybe through a registry, rather than overriding the command.  Though
43
 
    # maybe we should keep the wrapper to work with older bzr releases, at least
44
 
    # for a bit.
45
 
 
46
 
    # NB: Normally plugins should lazily load almost everything, but this
47
 
    # seems reasonable to have in-line here: bzrlib.commands and options are
48
 
    # normally loaded, and the rest of loggerhead won't be loaded until serve
49
 
    # --http is run.
50
 
        
51
 
    import bzrlib.builtins
52
 
    from bzrlib.commands import get_cmd_object, register_command
53
 
    from bzrlib.option import Option
54
 
 
55
 
    _original_command = get_cmd_object('serve')
56
 
 
57
 
    DEFAULT_PORT = 8080
58
 
 
59
 
    class cmd_serve(bzrlib.builtins.cmd_serve):
60
 
        __doc__ = _original_command.__doc__
61
 
 
62
 
        takes_options = _original_command.takes_options + [
63
 
            Option('http',
64
 
                help='Run an http (Loggerhead) server to browse code, '
65
 
                    'by default on port %s.' % DEFAULT_PORT)]
66
 
 
67
 
        def run(self, *args, **kw):
68
 
            if 'http' in kw:
69
 
                # loggerhead internal code will try to 'import loggerhead', so
70
 
                # let's put it on the path
71
 
                import os.path, sys
72
 
                sys.path.append(os.path.dirname(__file__))
73
 
 
74
 
                from loggerhead.apps.filesystem import BranchesFromFileSystemRoot
75
 
                from paste.httpexceptions import HTTPExceptionHandler
76
 
                from paste.httpserver import serve
77
 
                a = HTTPExceptionHandler(BranchesFromFileSystemRoot('.'))
78
 
                port = kw.get('port', DEFAULT_PORT)
79
 
                # port might be an int already...
80
 
                if isinstance(port, basestring) and ':' in port:
81
 
                    host, port = port.split(':')
82
 
                else:
83
 
                    host = '0.0.0.0'
84
 
                serve(a, host=host, port=port)
85
 
            else:
86
 
                super(cmd_serve, self).run(*args, **kw)
87
 
 
88
 
    register_command(cmd_serve)