fork+exec when launching standalone apps
[ugit.git] / ugitlibs / pushcontroller.py
blob2a23edf9fb9ee76bb99e39627699a26056aa34f0
1 import os
3 from qobserver import QObserver
4 import cmds
5 import utils
6 import qtutils
8 class GitPushController(QObserver):
9 def __init__(self, model, view):
10 QObserver.__init__(self,model,view)
12 self.model_to_view('remote', 'remoteText')
13 self.model_to_view('remotes', 'remoteList')
14 self.model_to_view('local_branch', 'localBranchText')
15 self.model_to_view('remote_branch', 'remoteBranchText')
16 self.model_to_view('local_branches', 'localBranchList')
17 self.model_to_view('remote_branches', 'remoteBranchList')
19 self.add_signals('textChanged(const QString&)', view.remoteText,
20 view.localBranchText, view.remoteBranchText)
22 self.add_signals( 'itemSelectionChanged()', view.remoteList,
23 view.localBranchList, view.remoteBranchList)
25 self.add_signals('released()',
26 view.pushButton, view.cancelButton)
28 self.connect(view.cancelButton, 'clicked()', view.reject)
30 self.add_actions('remotes', self.remotes)
31 self.add_callbacks({
32 'remoteList': self.remote_list,
33 'localBranchList': self.local_branch_list,
34 'remoteBranchList': self.remote_branch_list,
35 'pushButton': self.push,
38 model.init_branch_data()
40 def push(self):
41 if not self.model.get_remote():
42 errmsg = 'ERROR: Please specify a remote.'
43 qtutils.show_command(self.view, errmsg)
44 return
46 if not self.model.get_remote_branch():
47 errmsg = 'ERROR: Please specify a remote branch.'
48 qtutils.show_command(self.view, errmsg)
49 return
51 if not self.model.get_local_branch():
52 msg = ('Pushing with an empty local branch '
53 + 'will remove the remote branch.\n'
54 + 'Continue?')
55 if not qtutils.question(self.view,
56 'WARNING', msg):
57 return
59 remote = self.model.get_remote()
60 local_branch = self.model.get_local_branch()
61 remote_branch = self.model.get_remote_branch()
62 ffwd = self.view.allowFFOnlyCheckBox.isChecked()
63 tags = self.view.tagsCheckBox.isChecked()
65 status, output = cmds.git_push(remote,
66 local_branch, remote_branch,
67 ffwd=ffwd, tags=tags)
69 qtutils.show_command(self.view, output)
70 if not status:
71 self.view.accept()
73 def remotes(self, widget):
74 displayed = []
75 for remote in self.model.get_remotes():
76 url = cmds.git_remote_url(remote)
77 display = '%s\t(%s %s)' \
78 % (remote, unicode(self.tr('URL:')), url)
79 displayed.append(display)
80 qtutils.set_items(widget,displayed)
82 def remote_list(self):
83 widget = self.view.remoteList
84 remotes = self.model.get_remotes()
85 selection = qtutils.get_selected_item(widget,remotes)
86 if not selection: return
87 self.model.set_remote(selection)
88 self.view.remoteText.selectAll()
90 def local_branch_list(self):
91 branches = self.model.get_local_branches()
92 widget = self.view.localBranchList
93 selection = qtutils.get_selected_item(widget,branches)
94 if not selection: return
96 self.model.set_local_branch(selection)
97 self.model.set_remote_branch(selection)
99 self.view.localBranchText.selectAll()
100 self.view.remoteBranchText.selectAll()
102 def remote_branch_list(self):
103 widget = self.view.remoteBranchList
104 branches = self.model.get_remote_branches()
105 selection = qtutils.get_selected_item(widget,branches)
106 if not selection: return
108 branch = utils.basename(selection)
109 self.model.set_remote_branch(branch)
110 self.view.remoteBranchText.selectAll()