1
# -*- coding: UTF-8 -*-
4
__copyright__ = "Copyright � 2005 Canonical Ltd."
5
__author__ = "Gary van der Merwe <garyvdm@gmail.com>"
8
from gi.repository import Gtk
9
from gi.repository import GObject
10
from xml.sax.saxutils import escape
12
from bzrlib.config import parse_username
13
from bzrlib.revision import NULL_REVISION
37
class BranchTreeModel(Gtk.ListStore):
38
"""A model of branch's merge history."""
40
def __init__(self, branch, line_graph_data):
41
super(BranchTreeModel, self).__init__(
43
GObject.TYPE_PYOBJECT,
44
GObject.TYPE_PYOBJECT,
45
GObject.TYPE_PYOBJECT,
51
GObject.TYPE_PYOBJECT,
52
GObject.TYPE_PYOBJECT,
53
GObject.TYPE_PYOBJECT,
54
GObject.TYPE_PYOBJECT,
58
self.repository = branch.repository
59
if self.branch.supports_tags():
60
self.tags = self.branch.tags.get_reverse_tag_dict()
63
self.set_line_graph_data(line_graph_data)
65
def add_tag(self, tag, revid):
66
self.branch.tags.set_tag(tag, revid)
68
self.tags[revid].append(tag)
70
self.tags[revid] = [tag]
72
def _line_graph_item_to_model_row(self, rowref, data):
73
revid, node, lines, parents, children, revno_sequence = data
75
last_lines = self.line_graph_data[rowref - 1][2]
78
revno = ".".join(["%d" % (revno) for revno in revno_sequence])
79
tags = self.tags.get(revid, [])
80
if not revid or revid == NULL_REVISION:
82
elif revid not in self.revisions:
83
revision = self.repository.get_revisions([revid])[0]
84
self.revisions[revid] = revision
86
revision = self.revisions[revid]
88
summary = message = committer = timestamp = authors = None
90
summary = escape(revision.get_summary())
91
message = escape(revision.message)
92
committer = parse_username(revision.committer)[0]
94
"%Y-%m-%d %H:%M", localtime(revision.timestamp))
96
parse_username(author)[0]
97
for author in revision.get_apparent_authors()])
98
return (revid, node, lines, last_lines, revno, summary, message,
99
committer, timestamp, revision, parents, children, tags,
102
def set_line_graph_data(self, line_graph_data):
104
self.line_graph_data = line_graph_data
105
for rowref, data in enumerate(self.line_graph_data):
106
row = self._line_graph_item_to_model_row(rowref, data)