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