15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
16
"""Simple popup menu for revisions."""
18
from gi.repository import Gtk
19
from gi.repository import GObject
26
from bzrlib import (errors, ui)
21
27
from bzrlib.revision import NULL_REVISION
23
class RevisionMenu(Gtk.Menu):
27
GObject.SignalFlags.RUN_FIRST,
29
(GObject.TYPE_STRING, GObject.TYPE_STRING)
33
def __init__(self, repository, revids, branch=None, wt=None, parent=None):
34
super(RevisionMenu, self).__init__()
29
class RevisionPopupMenu(gtk.Menu):
30
def __init__(self, repository, revids, branch=None, wt=None):
31
super(RevisionPopupMenu, self).__init__()
36
32
self.branch = branch
37
33
self.repository = repository
39
self.set_revision_ids(revids)
41
def set_revision_ids(self, revids):
42
assert isinstance(revids, list)
43
for c in self.get_children():
45
35
self.revids = revids
46
36
self.create_items()
48
38
def create_items(self):
49
39
if len(self.revids) == 1:
50
item = Gtk.MenuItem("View _Changes")
40
item = gtk.MenuItem("View _Changes")
51
41
item.connect('activate', self.show_diff)
54
item = Gtk.MenuItem("_Push")
45
item = gtk.MenuItem("_Push")
55
46
item.connect('activate', self.show_push)
58
item = Gtk.MenuItem("_Tag Revision")
50
item = gtk.MenuItem("_Tag Revision")
59
51
item.connect('activate', self.show_tag)
62
item = Gtk.MenuItem("_Merge Directive")
55
item = gtk.MenuItem("_Merge Directive")
63
56
item.connect('activate', self.store_merge_directive)
64
57
# FIXME: self.append(item)
66
item = Gtk.MenuItem("_Send Merge Directive")
67
item.connect('activate', self.send_merge_directive)
71
item = Gtk.MenuItem("_Revert to this revision")
61
item = gtk.MenuItem("_Revert to this revision")
72
62
item.connect('activate', self.revert)
77
66
def store_merge_directive(self, item):
78
67
from bzrlib.plugins.gtk.mergedirective import CreateMergeDirectiveDialog
79
68
window = CreateMergeDirectiveDialog(self.branch, self.revids[0])
82
def send_merge_directive(self, item):
83
from bzrlib.plugins.gtk.mergedirective import SendMergeDirectiveDialog
84
from cStringIO import StringIO
85
window = SendMergeDirectiveDialog(self.branch, self.revids[0])
86
if window.run() == Gtk.ResponseType.OK:
88
outf.writelines(window.get_merge_directive().to_lines())
89
mail_client = self.branch.get_config().get_mail_client()
90
mail_client.compose_merge_request(window.get_mail_to(), "[MERGE]",
94
71
def show_diff(self, item):
95
72
from bzrlib.plugins.gtk.diff import DiffWindow
96
window = DiffWindow(parent=self._parent)
97
parentids = self.repository.get_revision(self.revids[0]).parent_ids
73
window = DiffWindow(parent=self.parent)
74
parentids = self.repository.revision_parents(self.revids[0])
98
76
if len(parentids) == 0:
99
77
parentid = NULL_REVISION
101
79
parentid = parentids[0]
102
81
rev_tree = self.repository.revision_tree(self.revids[0])
103
82
parent_tree = self.repository.revision_tree(parentid)
104
83
window.set_diff(self.revids[0], rev_tree, parent_tree)