cola: add more documentation strings to the cola modules
[git-cola.git] / cola / controllers / merge.py
blob7f9656e9e1b0f5c97153fd23fd3cf4a2bde81500
1 #!/usr/bin/env python
2 """This controller handles the merge dialog."""
5 from PyQt4.Qt import Qt
7 from cola import utils
8 from cola import qtutils
9 from cola.qobserver import QObserver
10 from cola.views import MergeView
12 def abort_merge(model, parent):
13 txt = parent.tr('Abort merge?\n'
14 'Aborting the current merge will cause '
15 '*ALL* uncommitted changes to be lost.\n\n'
16 'Continue with aborting the current merge?')
17 answer = qtutils.question(parent, parent.tr('Abort Merge?'), txt)
18 if answer:
19 model.abort_merge()
21 def local_merge(model, parent):
22 model = model.clone()
23 model.create(revision='', revision_list=[])
24 view = MergeView(parent)
25 ctl = MergeController(model, view)
26 view.show()
28 class MergeController(QObserver):
29 def init(self, model, view):
30 # Set the current branch label
31 branch = self.model.get_currentbranch()
32 title = unicode(self.tr('Merge Into %s')) % branch
33 self.view.label.setText(title)
34 self.add_observables('revision', 'revision_list')
35 self.add_callbacks(radio_local = self.radio_callback,
36 radio_remote = self.radio_callback,
37 radio_tag = self.radio_callback,
38 revision_list = self.revision_selected,
39 button_viz = self.viz_revision,
40 button_merge = self.merge_revision,
41 checkbox_squash = self.squash_update)
42 self.model.set_revision_list(self.model.get_local_branches())
43 self.view.radio_local.setChecked(True)
45 def get_revision_list(self):
46 if self.view.radio_local.isChecked():
47 return self.model.get_local_branches()
48 elif self.view.radio_remote.isChecked():
49 return self.model.get_remote_branches()
50 elif self.view.radio_tag.isChecked():
51 return self.model.get_tags()
52 return []
54 def revision_selected(self, *args):
55 revlist = self.get_revision_list()
56 widget = self.view.revision_list
57 row, selected = qtutils.get_selected_row(widget)
58 if selected and row < len(revlist):
59 revision = revlist[row]
60 self.model.set_revision(revision)
62 def radio_callback(self):
63 revlist = self.get_revision_list()
64 self.model.set_revision_list(revlist)
66 def merge_revision(self):
67 revision = self.model.get_revision()
68 if not revision:
69 qtutils.information('No Revision Specified',
70 'You must specify a revision to merge')
71 return
73 no_commit = not(self.view.checkbox_commit.isChecked())
74 squash = self.view.checkbox_squash.isChecked()
75 msg = self.model.get_merge_message()
76 qtutils.log(self.model.git.merge('-m'+msg,
77 revision,
78 strategy='recursive',
79 no_commit=no_commit,
80 squash=squash),
81 quiet=False,
82 doraise=True)
83 self.view.accept()
85 def viz_revision(self):
86 revision = self.model.get_revision()
87 browser = self.model.get_history_browser()
88 utils.fork(browser, revision)
90 def squash_update(self):
91 if self.view.checkbox_squash.isChecked():
92 self.old_commit_checkbox_state =\
93 self.view.checkbox_commit.checkState()
94 self.view.checkbox_commit.setCheckState(Qt.Unchecked)
95 self.view.checkbox_commit.setDisabled(True)
96 else:
97 self.view.checkbox_commit.setDisabled(False)
98 try:
99 oldstate = self.old_commit_checkbox_state
100 self.view.checkbox_commit.setCheckState(oldstate)
101 except AttributeError:
102 # no problem
103 pass