~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/apps/branch.py

merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
11
11
from paste import httpexceptions
12
12
 
13
13
from loggerhead.apps import static_app
 
14
from loggerhead.controllers.annotate_ui import AnnotateUI
 
15
from loggerhead.controllers.atom_ui import AtomUI
14
16
from loggerhead.controllers.changelog_ui import ChangeLogUI
 
17
from loggerhead.controllers.diff_ui import DiffUI
 
18
from loggerhead.controllers.download_ui import DownloadUI
 
19
from loggerhead.controllers.filediff_ui import FileDiffUI
15
20
from loggerhead.controllers.inventory_ui import InventoryUI
16
 
from loggerhead.controllers.annotate_ui import AnnotateUI
17
21
from loggerhead.controllers.revision_ui import RevisionUI
18
 
from loggerhead.controllers.atom_ui import AtomUI
19
 
from loggerhead.controllers.download_ui import DownloadUI
 
22
from loggerhead.controllers.revlog_ui import RevLogUI
20
23
from loggerhead.controllers.search_ui import SearchUI
21
 
from loggerhead.controllers.diff_ui import DiffUI
22
24
from loggerhead.history import History
23
25
from loggerhead import util
24
26
 
25
27
 
 
28
_DEFAULT = object()
 
29
 
26
30
class BranchWSGIApp(object):
27
31
 
28
32
    def __init__(self, branch, friendly_name=None, config={},
29
 
                 graph_cache=None, branch_link=None, is_root=False):
 
33
                 graph_cache=None, branch_link=None, is_root=False,
 
34
                 served_url=_DEFAULT):
30
35
        self.branch = branch
31
36
        self._config = config
32
37
        self.friendly_name = friendly_name
36
41
            graph_cache = bzrlib.lru_cache.LRUCache()
37
42
        self.graph_cache = graph_cache
38
43
        self.is_root = is_root
 
44
        self.served_url = served_url
39
45
 
40
46
    def get_history(self):
41
47
        _history = History(self.branch, self.graph_cache)
63
69
        qs = '&'.join(qs)
64
70
        return request.construct_url(
65
71
            self._environ, script_name=self._url_base,
66
 
            path_info='/'.join(args),
 
72
            path_info=unicode('/'.join(args)).encode('utf-8'),
67
73
            querystring=qs)
68
74
 
69
75
    def context_url(self, *args, **kw):
74
80
        return self._static_url_base + path
75
81
 
76
82
    controllers_dict = {
 
83
        '+filediff': FileDiffUI,
 
84
        '+revlog': RevLogUI,
77
85
        'annotate': AnnotateUI,
 
86
        'atom': AtomUI,
78
87
        'changes': ChangeLogUI,
 
88
        'diff': DiffUI,
 
89
        'download': DownloadUI,
79
90
        'files': InventoryUI,
80
91
        'revision': RevisionUI,
81
 
        'download': DownloadUI,
82
 
        'atom': AtomUI,
83
92
        'search': SearchUI,
84
 
        'diff': DiffUI,
85
93
        }
86
94
 
87
95
    def last_updated(self):
98
106
        if self._static_url_base is None:
99
107
            self._static_url_base = self._url_base
100
108
        self._environ = environ
 
109
        if self.served_url is _DEFAULT:
 
110
            self.served_url = self.url([])
101
111
        path = request.path_info_pop(environ)
102
112
        if not path:
103
113
            raise httpexceptions.HTTPMovedPermanently(
110
120
        self.branch.lock_read()
111
121
        try:
112
122
            try:
113
 
                c = cls(self, self.get_history())
 
123
                c = cls(self, self.get_history)
114
124
                return c(environ, start_response)
115
125
            except:
116
126
                environ['exc_info'] = sys.exc_info()