40
 
    def __init__(self, repository, revids, branch=None, wt=None, parent=None):
 
41
 
        super(RevisionMenu, self).__init__()
 
 
40
    def __init__(self, repository, revids, branch=None, wt=None):
 
 
41
        super(RevisionPopupMenu, self).__init__()
 
43
42
        self.branch = branch
 
44
43
        self.repository = repository
 
46
 
        self.set_revision_ids(revids)
 
48
 
    def set_revision_ids(self, revids):
 
49
 
        assert isinstance(revids, list)
 
50
 
        for c in self.get_children():
 
52
45
        self.revids = revids
 
53
46
        self.create_items()
 
 
57
50
            item = gtk.MenuItem("View _Changes")
 
58
51
            item.connect('activate', self.show_diff)
 
61
55
            item = gtk.MenuItem("_Push")
 
62
56
            item.connect('activate', self.show_push)
 
65
60
            item = gtk.MenuItem("_Tag Revision")
 
66
61
            item.connect('activate', self.show_tag)
 
69
65
            item = gtk.MenuItem("_Merge Directive")
 
70
66
            item.connect('activate', self.store_merge_directive)
 
71
67
            # FIXME: self.append(item)
 
73
 
            item = gtk.MenuItem("_Send Merge Directive")
 
74
 
            item.connect('activate', self.send_merge_directive)
 
78
71
                item = gtk.MenuItem("_Revert to this revision")
 
79
72
                item.connect('activate', self.revert)
 
84
76
    def store_merge_directive(self, item):
 
85
77
        from bzrlib.plugins.gtk.mergedirective import CreateMergeDirectiveDialog
 
86
78
        window = CreateMergeDirectiveDialog(self.branch, self.revids[0])
 
89
 
    def send_merge_directive(self, item):
 
90
 
        from bzrlib.plugins.gtk.mergedirective import SendMergeDirectiveDialog
 
91
 
        from cStringIO import StringIO
 
92
 
        window = SendMergeDirectiveDialog(self.branch, self.revids[0])
 
93
 
        if window.run() == gtk.RESPONSE_OK:
 
95
 
            outf.writelines(window.get_merge_directive().to_lines())
 
96
 
            mail_client = self.branch.get_config().get_mail_client()
 
97
 
            mail_client.compose_merge_request(window.get_mail_to(), "[MERGE]",
 
101
81
    def show_diff(self, item):
 
102
82
        from bzrlib.plugins.gtk.diff import DiffWindow
 
103
 
        window = DiffWindow(parent=self._parent)
 
104
 
        parentids = self.repository.get_revision(self.revids[0]).parent_ids
 
 
83
        window = DiffWindow(parent=self.parent)
 
 
84
        parentids = self.repository.revision_parents(self.revids[0])
 
105
86
        if len(parentids) == 0:
 
106
87
            parentid = NULL_REVISION
 
108
89
            parentid = parentids[0]
 
109
91
        rev_tree    = self.repository.revision_tree(self.revids[0])
 
110
92
        parent_tree = self.repository.revision_tree(parentid)
 
111
93
        window.set_diff(self.revids[0], rev_tree, parent_tree)