/usr/share/pyshared/bzrlib/plugins/gtk/branchview/treemodel.py is in bzr-gtk 0.103.0+bzr792-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | # -*- coding: UTF-8 -*-
"""BranchTreeModel."""
__copyright__ = "Copyright © 2005 Canonical Ltd."
__author__ = "Gary van der Merwe <garyvdm@gmail.com>"
from gi.repository import Gtk
from gi.repository import GObject
from xml.sax.saxutils import escape
from bzrlib.config import parse_username
from bzrlib.revision import NULL_REVISION
from time import (
strftime,
localtime,
)
REVID = 0
NODE = 1
LINES = 2
LAST_LINES = 3
REVNO = 4
SUMMARY = 5
MESSAGE = 6
COMMITTER = 7
TIMESTAMP = 8
REVISION = 9
PARENTS = 10
CHILDREN = 11
TAGS = 12
AUTHORS = 13
class BranchTreeModel(Gtk.ListStore):
"""A model of branch's merge history."""
def __init__(self, branch, line_graph_data):
super(BranchTreeModel, self).__init__(
GObject.TYPE_STRING,
GObject.TYPE_PYOBJECT,
GObject.TYPE_PYOBJECT,
GObject.TYPE_PYOBJECT,
GObject.TYPE_STRING,
GObject.TYPE_STRING,
GObject.TYPE_STRING,
GObject.TYPE_STRING,
GObject.TYPE_STRING,
GObject.TYPE_PYOBJECT,
GObject.TYPE_PYOBJECT,
GObject.TYPE_PYOBJECT,
GObject.TYPE_PYOBJECT,
GObject.TYPE_STRING)
self.revisions = {}
self.branch = branch
self.repository = branch.repository
if self.branch.supports_tags():
self.tags = self.branch.tags.get_reverse_tag_dict()
else:
self.tags = {}
self.set_line_graph_data(line_graph_data)
def add_tag(self, tag, revid):
self.branch.tags.set_tag(tag, revid)
try:
self.tags[revid].append(tag)
except KeyError:
self.tags[revid] = [tag]
def _line_graph_item_to_model_row(self, rowref, data):
revid, node, lines, parents, children, revno_sequence = data
if rowref > 0:
last_lines = self.line_graph_data[rowref - 1][2]
else:
last_lines = []
revno = ".".join(["%d" % (revno) for revno in revno_sequence])
tags = self.tags.get(revid, [])
if not revid or revid == NULL_REVISION:
revision = None
elif revid not in self.revisions:
revision = self.repository.get_revisions([revid])[0]
self.revisions[revid] = revision
else:
revision = self.revisions[revid]
if revision is None:
summary = message = committer = timestamp = authors = None
else:
summary = escape(revision.get_summary())
message = escape(revision.message)
committer = parse_username(revision.committer)[0]
timestamp = strftime(
"%Y-%m-%d %H:%M", localtime(revision.timestamp))
authors = ", ".join([
parse_username(author)[0]
for author in revision.get_apparent_authors()])
return (revid, node, lines, last_lines, revno, summary, message,
committer, timestamp, revision, parents, children, tags,
authors)
def set_line_graph_data(self, line_graph_data):
self.clear()
self.line_graph_data = line_graph_data
for rowref, data in enumerate(self.line_graph_data):
row = self._line_graph_item_to_model_row(rowref, data)
self.append(row)
|