/loggerhead/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/loggerhead/trunk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#
# Copyright (C) 2010 Canonical Ltd.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

from loggerhead.controllers.view_ui import ViewUI
from loggerhead import util

class AnnotateUI(ViewUI):

    def annotate_file(self, info):
        file_id = info['file_id']
        revid = info['change'].revid
        
        tree = self.tree_for(file_id, revid)
        
        change_cache = {}
        last_line_revid = None
        parity = 1
        for line_revid, text in tree.annotate_iter(file_id):
            if line_revid == last_line_revid:
                # remember which lines have a new revno and which don't
                new_rev = False
            else:
                new_rev = True
                parity ^= 1
                last_line_revid = line_revid
                if line_revid in change_cache:
                    change = change_cache[line_revid]
                else:
                    change = self._history.get_changes([line_revid])[0]
                    change_cache[line_revid] = change

            yield util.Container(
                parity=parity, new_rev=new_rev, change=change)
            
    def get_values(self, path, kwargs, headers):
        values = super(AnnotateUI, self).get_values(path, kwargs, headers)
        values['annotated'] = self.annotate_file(values)
        
        return values