2 """This controller handles the merge dialog."""
5 from PyQt4
.Qt
import Qt
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
)
21 def local_merge(model
, parent
):
23 model
.create(revision
='', revision_list
=[])
24 view
= MergeView(parent
)
25 ctl
= MergeController(model
, view
)
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()
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()
69 qtutils
.information('No Revision Specified',
70 'You must specify a revision to merge')
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
,
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)
97 self
.view
.checkbox_commit
.setDisabled(False)
99 oldstate
= self
.old_commit_checkbox_state
100 self
.view
.checkbox_commit
.setCheckState(oldstate
)
101 except AttributeError: