21
22
pygtk.require("2.0")
30
from olive.backend.info import is_branch
31
import olive.backend.errors as errors
33
from dialog import OliveDialog
29
import bzrlib.errors as errors
30
from bzrlib.branch import Branch
31
from bzrlib.workingtree import WorkingTree
33
from dialog import about, error_dialog, info_dialog
34
34
from menu import OliveMenu
35
35
from launch import launch
37
37
class OliveHandler:
38
38
""" Signal handler class for Olive. """
39
def __init__(self, gladefile, comm):
40
self.gladefile = gladefile
39
def __init__(self, comm):
43
self.dialog = OliveDialog(self.gladefile)
45
self.menu = OliveMenu(self.gladefile, self.comm, self.dialog)
42
self.menu = OliveMenu(self.comm)
47
44
def on_about_activate(self, widget):
50
47
def on_menuitem_add_files_activate(self, widget):
51
48
""" Add file(s)... menu handler. """
52
49
from add import OliveAdd
53
add = OliveAdd(self.gladefile, self.comm, self.dialog)
50
wt, path = WorkingTree.open_containing(self.comm.get_path())
51
add = OliveAdd(wt, path,
52
self.comm.get_selected_right())
56
55
def on_menuitem_branch_get_activate(self, widget):
57
56
""" Branch/Get... menu handler. """
58
57
from branch import OliveBranch
59
branch = OliveBranch(self.gladefile, self.comm, self.dialog)
58
branch = OliveBranch(self.comm)
62
61
def on_menuitem_branch_checkout_activate(self, widget):
63
62
""" Branch/Checkout... menu handler. """
64
63
from checkout import OliveCheckout
65
checkout = OliveCheckout(self.gladefile, self.comm, self.dialog)
64
checkout = OliveCheckout(self.comm)
68
67
def on_menuitem_branch_commit_activate(self, widget):
69
68
""" Branch/Commit... menu handler. """
70
69
from commit import OliveCommit
71
commit = OliveCommit(self.gladefile, self.comm, self.dialog)
70
wt, path = WorkingTree.open_containing(self.comm.get_path())
71
commit = OliveCommit(wt, path)
74
74
def on_menuitem_branch_missing_revisions_activate(self, widget):
75
75
""" Branch/Missing revisions menu handler. """
76
import olive.backend.update as update
78
77
self.comm.set_busy(self.comm.window_main)
81
ret = update.missing(self.comm.get_path())
82
except errors.NotBranchError:
83
self.dialog.error_dialog(_('Directory is not a branch'),
84
_('You can perform this action only in a branch.'))
85
except errors.ConnectionError:
86
self.dialog.error_dialog(_('Connection error'),
87
_('Cannot connect to remote location.\nPlease try again later.'))
88
except errors.NoLocationKnown:
89
self.dialog.error_dialog(_('Parent location is unknown'),
90
_('Cannot determine missing revisions if no parent location is known.'))
83
local_branch = Branch.open_containing(self.comm.get_path())[0]
84
except NotBranchError:
85
error_dialog(_('Directory is not a branch'),
86
_('You can perform this action only in a branch.'))
89
other_branch = local_branch.get_parent()
90
if other_branch is None:
91
error_dialog(_('Parent location is unknown'),
92
_('Cannot determine missing revisions if no parent location is known.'))
95
remote_branch = Branch.open(other_branch)
97
if remote_branch.base == local_branch.base:
98
remote_branch = local_branch
100
ret = len(local_branch.missing_revisions(remote_branch))
93
self.dialog.info_dialog(_('There are missing revisions'),
103
info_dialog(_('There are missing revisions'),
94
104
_('%d revision(s) missing.') % ret)
96
self.dialog.info_dialog(_('Local branch up to date'),
106
info_dialog(_('Local branch up to date'),
97
107
_('There are no missing revisions.'))
99
self.comm.set_busy(self.comm.window_main, False)
109
self.comm.set_busy(self.comm.window_main, False)
101
111
def on_menuitem_branch_pull_activate(self, widget):
102
112
""" Branch/Pull menu handler. """
103
import olive.backend.update as update
105
114
self.comm.set_busy(self.comm.window_main)
108
ret = update.pull(self.comm.get_path())
109
except errors.NotBranchError:
110
self.dialog.error_dialog(_('Directory is not a branch'),
111
_('You can perform this action only in a branch.'))
112
except errors.NoLocationKnown:
113
self.dialog.error_dialog(_('Parent location is unknown'),
114
_('Pulling is not possible until there is no parent location.'))
116
self.dialog.info_dialog(_('Pull successful'),
118
from bzrlib.workingtree import WorkingTree
119
tree_to = WorkingTree.open_containing(self.comm.get_path())[0]
120
branch_to = tree_to.branch
121
except errors.NoWorkingTree:
123
branch_to = Branch.open_containing(self.comm.get_path())[0]
124
except errors.NotBranchError:
125
error_dialog(_('Directory is not a branch'),
126
_('You can perform this action only in a branch.'))
128
location = branch_to.get_parent()
130
error_dialog(_('Parent location is unknown'),
131
_('Pulling is not possible until there is a parent location.'))
135
branch_from = Branch.open(location)
136
except errors.NotBranchError:
137
error_dialog(_('Directory is not a branch'),
138
_('You can perform this action only in a branch.'))
140
if branch_to.get_parent() is None:
141
branch_to.set_parent(branch_from.base)
143
old_rh = branch_to.revision_history()
144
if tree_to is not None:
145
tree_to.pull(branch_from)
147
branch_to.pull(branch_from)
149
info_dialog(_('Pull successful'),
117
150
_('%d revision(s) pulled.') % ret)
119
self.comm.set_busy(self.comm.window_main, False)
153
self.comm.set_busy(self.comm.window_main, False)
121
155
def on_menuitem_branch_push_activate(self, widget):
122
156
""" Branch/Push... menu handler. """
123
157
from push import OlivePush
124
push = OlivePush(self.gladefile, self.comm, self.dialog)
158
push = OlivePush(self.comm)
127
161
def on_menuitem_branch_status_activate(self, widget):
128
162
""" Branch/Status... menu handler. """
129
163
from status import OliveStatus
130
status = OliveStatus(self.gladefile, self.comm, self.dialog)
164
wt, wtpath = WorkingTree.open_containing(self.comm.get_path())
165
status = OliveStatus(wt, wtpath)
133
168
def on_menuitem_branch_initialize_activate(self, widget):
134
169
""" Initialize current directory. """
135
import olive.backend.init as init
138
init.init(self.comm.get_path())
171
location = self.comm.get_path()
172
from bzrlib.builtins import get_format_type
174
format = get_format_type('default')
176
if not os.path.exists(location):
180
existing_bzrdir = bzrdir.BzrDir.open(location)
181
except NotBranchError:
182
bzrdir.BzrDir.create_branch_convenience(location, format=format)
184
if existing_bzrdir.has_branch():
185
if existing_bzrdir.has_workingtree():
186
raise AlreadyBranchError(location)
188
raise BranchExistsWithoutWorkingTree(location)
190
existing_bzrdir.create_branch()
191
existing_bzrdir.create_workingtree()
139
192
except errors.AlreadyBranchError, errmsg:
140
self.dialog.error_dialog(_('Directory is already a branch'),
193
error_dialog(_('Directory is already a branch'),
141
194
_('The current directory (%s) is already a branch.\nYou can start using it, or initialize another directory.') % errmsg)
142
195
except errors.BranchExistsWithoutWorkingTree, errmsg:
143
self.dialog.error_dialog(_('Branch without a working tree'),
196
error_dialog(_('Branch without a working tree'),
144
197
_('The current directory (%s)\nis a branch without a working tree.') % errmsg)
148
self.dialog.info_dialog(_('Ininialize successful'),
199
info_dialog(_('Initialize successful'),
149
200
_('Directory successfully initialized.'))
150
201
self.comm.refresh_right()
152
203
def on_menuitem_file_make_directory_activate(self, widget):
153
204
""" File/Make directory... menu handler. """
154
205
from mkdir import OliveMkdir
155
mkdir = OliveMkdir(self.gladefile, self.comm, self.dialog)
206
mkdir = OliveMkdir(self.comm)
158
209
def on_menuitem_file_move_activate(self, widget):
159
210
""" File/Move... menu handler. """
160
211
from move import OliveMove
161
move = OliveMove(self.gladefile, self.comm, self.dialog)
212
move = OliveMove(self.comm)
164
215
def on_menuitem_file_rename_activate(self, widget):
165
216
""" File/Rename... menu handler. """
166
217
from rename import OliveRename
167
rename = OliveRename(self.gladefile, self.comm, self.dialog)
218
rename = OliveRename(self.comm)
170
221
def on_menuitem_remove_file_activate(self, widget):
171
222
""" Remove (unversion) selected file. """
172
223
from remove import OliveRemove
173
remove = OliveRemove(self.gladefile, self.comm, self.dialog)
224
remove = OliveRemove(self.comm)
176
227
def on_menuitem_stats_diff_activate(self, widget):
177
228
""" Statistics/Differences... menu handler. """
178
from diff import OliveDiff
179
diff = OliveDiff(self.gladefile, self.comm, self.dialog)
229
from bzrlib.plugins.gtk.viz.diffwin import DiffWindow
230
window = DiffWindow()
231
wt = WorkingTree.open_containing(self.comm.get_path())[0]
232
parent_tree = wt.branch.repository.revision_tree(wt.branch.last_revision())
233
window.set_diff(wt.branch.nick, wt, parent_tree)
182
236
def on_menuitem_stats_infos_activate(self, widget):
183
237
""" Statistics/Informations... menu handler. """
184
238
from info import OliveInfo
185
info = OliveInfo(self.gladefile, self.comm, self.dialog)
239
info = OliveInfo(self.comm)
188
242
def on_menuitem_stats_log_activate(self, widget):
189
243
""" Statistics/Log... menu handler. """
190
244
from log import OliveLog
191
log = OliveLog(self.gladefile, self.comm, self.dialog)
245
log = OliveLog(self.comm)
194
248
def on_menuitem_view_refresh_activate(self, widget):