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
34
from menu import OliveMenu
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
35
34
from launch import launch
37
36
class OliveHandler:
38
37
""" Signal handler class for Olive. """
39
def __init__(self, gladefile, comm):
40
self.gladefile = gladefile
43
self.dialog = OliveDialog(self.gladefile)
45
self.menu = OliveMenu(self.gladefile, self.comm, self.dialog)
38
def __init__(self, path):
39
self.wt, self.path = WorkingTree.open_containing(path)
47
41
def on_about_activate(self, widget):
50
44
def on_menuitem_add_files_activate(self, widget):
51
45
""" Add file(s)... menu handler. """
52
46
from add import OliveAdd
53
add = OliveAdd(self.gladefile, self.comm, self.dialog)
47
add = OliveAdd(self.wt, self.path, self.comm.get_selected_right())
56
50
def on_menuitem_branch_get_activate(self, widget):
57
51
""" Branch/Get... menu handler. """
58
52
from branch import OliveBranch
59
branch = OliveBranch(self.gladefile, self.comm, self.dialog)
53
branch = OliveBranch()
62
56
def on_menuitem_branch_checkout_activate(self, widget):
63
57
""" Branch/Checkout... menu handler. """
64
58
from checkout import OliveCheckout
65
checkout = OliveCheckout(self.gladefile, self.comm, self.dialog)
59
checkout = OliveCheckout()
68
62
def on_menuitem_branch_commit_activate(self, widget):
69
63
""" Branch/Commit... menu handler. """
70
64
from commit import OliveCommit
71
commit = OliveCommit(self.gladefile, self.comm, self.dialog)
65
commit = OliveCommit(self.wt, self.path)
74
68
def on_menuitem_branch_missing_revisions_activate(self, widget):
75
69
""" Branch/Missing revisions menu handler. """
76
import olive.backend.update as update
78
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'),
73
local_branch = self.wt.branch
75
other_branch = local_branch.get_parent()
76
if other_branch is None:
77
error_dialog(_('Parent location is unknown'),
90
78
_('Cannot determine missing revisions if no parent location is known.'))
81
remote_branch = Branch.open(other_branch)
83
if remote_branch.base == local_branch.base:
84
remote_branch = local_branch
86
ret = len(local_branch.missing_revisions(remote_branch))
89
info_dialog(_('There are missing revisions'),
90
_('%d revision(s) missing.') % ret)
93
self.dialog.info_dialog(_('There are missing revisions'),
94
_('%d revision(s) missing.') % ret)
96
self.dialog.info_dialog(_('Local branch up to date'),
97
_('There are no missing revisions.'))
99
self.comm.set_busy(self.comm.window_main, False)
92
info_dialog(_('Local branch up to date'),
93
_('There are no missing revisions.'))
101
95
def on_menuitem_branch_pull_activate(self, widget):
102
96
""" Branch/Pull menu handler. """
103
import olive.backend.update as update
105
self.comm.set_busy(self.comm.window_main)
98
branch_to = self.wt.branch
100
location = branch_to.get_parent()
102
error_dialog(_('Parent location is unknown'),
103
_('Pulling is not possible until there is a parent location.'))
108
ret = update.pull(self.comm.get_path())
107
branch_from = Branch.open(location)
109
108
except errors.NotBranchError:
110
self.dialog.error_dialog(_('Directory is not a branch'),
109
error_dialog(_('Directory is not a branch'),
111
110
_('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.'))
112
if branch_to.get_parent() is None:
113
branch_to.set_parent(branch_from.base)
115
old_rh = branch_to.revision_history()
116
if tree_to is not None:
117
tree_to.pull(branch_from)
116
self.dialog.info_dialog(_('Pull successful'),
117
_('%d revision(s) pulled.') % ret)
119
branch_to.pull(branch_from)
119
self.comm.set_busy(self.comm.window_main, False)
121
info_dialog(_('Pull successful'), _('%d revision(s) pulled.') % ret)
121
123
def on_menuitem_branch_push_activate(self, widget):
122
124
""" Branch/Push... menu handler. """
123
125
from push import OlivePush
124
push = OlivePush(self.gladefile, self.comm, self.dialog)
126
push = OlivePush(self.comm)
127
129
def on_menuitem_branch_status_activate(self, widget):
128
130
""" Branch/Status... menu handler. """
129
131
from status import OliveStatus
130
status = OliveStatus(self.gladefile, self.comm, self.dialog)
132
status = OliveStatus(self.wt, self.path)
133
135
def on_menuitem_branch_initialize_activate(self, widget):
134
136
""" Initialize current directory. """
135
import olive.backend.init as init
138
init.init(self.comm.get_path())
138
location = self.comm.get_path()
139
from bzrlib.builtins import get_format_type
141
format = get_format_type('default')
143
if not os.path.exists(location):
147
existing_bzrdir = bzrdir.BzrDir.open(location)
148
except NotBranchError:
149
bzrdir.BzrDir.create_branch_convenience(location, format=format)
151
if existing_bzrdir.has_branch():
152
if existing_bzrdir.has_workingtree():
153
raise AlreadyBranchError(location)
155
raise BranchExistsWithoutWorkingTree(location)
157
existing_bzrdir.create_branch()
158
existing_bzrdir.create_workingtree()
139
159
except errors.AlreadyBranchError, errmsg:
140
self.dialog.error_dialog(_('Directory is already a branch'),
160
error_dialog(_('Directory is already a branch'),
141
161
_('The current directory (%s) is already a branch.\nYou can start using it, or initialize another directory.') % errmsg)
142
162
except errors.BranchExistsWithoutWorkingTree, errmsg:
143
self.dialog.error_dialog(_('Branch without a working tree'),
163
error_dialog(_('Branch without a working tree'),
144
164
_('The current directory (%s)\nis a branch without a working tree.') % errmsg)
148
self.dialog.info_dialog(_('Ininialize successful'),
166
info_dialog(_('Initialize successful'),
149
167
_('Directory successfully initialized.'))
150
168
self.comm.refresh_right()
152
170
def on_menuitem_file_make_directory_activate(self, widget):
153
171
""" File/Make directory... menu handler. """
154
172
from mkdir import OliveMkdir
155
mkdir = OliveMkdir(self.gladefile, self.comm, self.dialog)
173
mkdir = OliveMkdir(self.comm)
158
176
def on_menuitem_file_move_activate(self, widget):
159
177
""" File/Move... menu handler. """
160
178
from move import OliveMove
161
move = OliveMove(self.gladefile, self.comm, self.dialog)
179
move = OliveMove(self.comm)
164
182
def on_menuitem_file_rename_activate(self, widget):
165
183
""" File/Rename... menu handler. """
166
184
from rename import OliveRename
167
rename = OliveRename(self.gladefile, self.comm, self.dialog)
185
rename = OliveRename(self.comm)
170
188
def on_menuitem_remove_file_activate(self, widget):
171
189
""" Remove (unversion) selected file. """
172
190
from remove import OliveRemove
173
remove = OliveRemove(self.gladefile, self.comm, self.dialog)
191
remove = OliveRemove(self.comm)
176
194
def on_menuitem_stats_diff_activate(self, widget):
177
195
""" Statistics/Differences... menu handler. """
178
from diff import OliveDiff
179
diff = OliveDiff(self.gladefile, self.comm, self.dialog)
196
from bzrlib.plugins.gtk.viz.diffwin import DiffWindow
197
window = DiffWindow()
198
parent_tree = self.wt.branch.repository.revision_tree(self.wt.branch.last_revision())
199
window.set_diff(self.wt.branch.nick, self.wt, parent_tree)
182
202
def on_menuitem_stats_infos_activate(self, widget):
183
203
""" Statistics/Informations... menu handler. """
184
204
from info import OliveInfo
185
info = OliveInfo(self.gladefile, self.comm, self.dialog)
205
info = OliveInfo(self.wt)
188
208
def on_menuitem_stats_log_activate(self, widget):
189
209
""" Statistics/Log... menu handler. """
190
from log import OliveLog
191
log = OliveLog(self.gladefile, self.comm, self.dialog)
210
from bzrlib.plugins.gtk.viz.branchwin import BranchWindow
211
window = BranchWindow()
212
window.set_branch(self.wt.branch, self.wt.branch.last_revision(), None)
194
215
def on_menuitem_view_refresh_activate(self, widget):
195
216
""" View/Refresh menu handler. """