3
3
# Copyright (C) 2006 Jeff Bailey
4
4
# Copyright (C) 2006 Wouter van Heyst
5
# Copyright (C) 2006-2008 Jelmer Vernooij <jelmer@samba.org>
5
# Copyright (C) 2006 Jelmer Vernooij
7
7
# Published under the GNU GPL
12
from bzrlib.bzrdir import BzrDir
13
from bzrlib.errors import NotBranchError
14
from bzrlib.errors import NoWorkingTree
15
from bzrlib.errors import UnsupportedProtocol
16
from bzrlib.workingtree import WorkingTree
12
17
from bzrlib.branch import Branch
13
from bzrlib.bzrdir import BzrDir
14
from bzrlib.errors import NotBranchError, NoWorkingTree, UnsupportedProtocol
15
18
from bzrlib.tree import file_status
16
from bzrlib.workingtree import WorkingTree
17
from bzrlib.config import GlobalConfig
19
20
from bzrlib.plugin import load_plugins
22
from bzrlib.plugins.gtk import _i18n, cmd_gannotate, start_viz_window
24
print "Bazaar nautilus module initialized"
23
from bzrlib.plugins.gtk import cmd_visualise, cmd_gannotate
27
25
class BzrExtension(nautilus.MenuProvider, nautilus.ColumnProvider, nautilus.InfoProvider):
28
26
def __init__(self):
179
176
# We only want to continue here if we get a NotBranchError
181
branch, path = Branch.open_containing(file)
178
tree, path = WorkingTree.open_containing(file)
182
179
except NotBranchError:
185
pp = start_viz_window(branch, [branch.last_revision()])
182
vis = cmd_visualise()
189
187
def pull_cb(self, menu, vfs_file):
190
188
# We can only cope with local files
220
218
from bzrlib.plugins.gtk.merge import MergeDialog
221
219
dialog = MergeDialog(tree, path)
225
223
def get_background_items(self, window, vfs_file):
227
225
file = vfs_file.get_uri()
230
227
tree, path = WorkingTree.open_containing(file)
231
disabled_flag = self.check_branch_enabled(tree.branch)
232
228
except UnsupportedProtocol:
234
230
except NotBranchError:
235
disabled_flag = self.check_branch_enabled()
236
231
item = nautilus.MenuItem('BzrNautilus::newtree',
237
232
'Make directory versioned',
238
233
'Create new Bazaar tree in this folder')
240
235
items.append(item)
242
237
item = nautilus.MenuItem('BzrNautilus::clone',
243
'Checkout Bazaar branch ...',
238
'Checkout Bazaar branch',
244
239
'Checkout Existing Bazaar Branch')
245
240
item.connect('activate', self.clone_cb, vfs_file)
246
241
items.append(item)
249
except NoWorkingTree:
252
if disabled_flag == 'False':
253
item = nautilus.MenuItem('BzrNautilus::enable',
254
'Enable Bazaar Plugin for this Branch',
255
'Enable Bazaar plugin for nautilus')
256
item.connect('activate', self.toggle_integration, 'True', vfs_file)
259
item = nautilus.MenuItem('BzrNautilus::disable',
260
'Disable Bazaar Plugin this Branch',
261
'Disable Bazaar plugin for nautilus')
262
item.connect('activate', self.toggle_integration, 'False', vfs_file)
265
245
item = nautilus.MenuItem('BzrNautilus::log',
267
247
'Show Bazaar history')
268
248
item.connect('activate', self.log_cb, vfs_file)
269
249
items.append(item)
271
251
item = nautilus.MenuItem('BzrNautilus::pull',
273
253
'Pull from another branch')
274
254
item.connect('activate', self.pull_cb, vfs_file)
275
255
items.append(item)
277
257
item = nautilus.MenuItem('BzrNautilus::merge',
279
259
'Merge from another branch')
280
260
item.connect('activate', self.merge_cb, vfs_file)
281
261
items.append(item)
283
263
item = nautilus.MenuItem('BzrNautilus::commit',
285
265
'Commit Changes')
286
266
item.connect('activate', self.commit_cb, vfs_file)
287
267
items.append(item)
291
272
def get_file_items(self, window, files):
295
276
for vfs_file in files:
296
277
# We can only cope with local files
297
278
if vfs_file.get_uri_scheme() != 'file':
300
281
file = vfs_file.get_uri()
302
283
tree, path = WorkingTree.open_containing(file)
303
disabled_flag = self.check_branch_enabled(tree.branch)
304
284
except NotBranchError:
305
disabled_flag = self.check_branch_enabled()
306
285
if not vfs_file.is_directory():
309
if disabled_flag == 'False':
312
287
item = nautilus.MenuItem('BzrNautilus::newtree',
313
288
'Make directory versioned',
314
289
'Create new Bazaar tree in %s' % vfs_file.get_name())
315
290
item.connect('activate', self.newtree_cb, vfs_file)
317
except NoWorkingTree:
319
292
# Refresh the list of filestatuses in the working tree
320
293
if path not in wtfiles.keys():
344
317
items.append(item)
345
318
elif wtfiles[path] == 'V':
346
319
item = nautilus.MenuItem('BzrNautilus::log',
349
322
item.connect('activate', self.log_cb, vfs_file)
350
323
items.append(item)
352
325
item = nautilus.MenuItem('BzrNautilus::diff',
354
327
'Show differences')
355
328
item.connect('activate', self.diff_cb, vfs_file)
356
329
items.append(item)
390
362
tree, path = WorkingTree.open_containing(file.get_uri())
391
363
except NotBranchError:
393
except NoWorkingTree:
396
disabled_flag = self.check_branch_enabled(tree.branch)
397
if disabled_flag == 'False':
403
369
if tree.has_filename(path):
404
emblem = 'bzr-controlled'
370
emblem = 'cvs-controlled'
405
371
status = 'unchanged'
406
372
id = tree.path2id(path)
408
374
delta = tree.changes_from(tree.branch.basis_tree())
409
375
if delta.touches_file_id(id):
410
emblem = 'bzr-modified'
376
emblem = 'cvs-modified'
411
377
status = 'modified'
412
378
for f, _, _ in delta.added:
417
383
for of, f, _, _, _, _ in delta.renamed:
428
394
if emblem is not None:
429
395
file.add_emblem(emblem)
430
396
file.add_string_attribute('bzr_status', status)
432
def check_branch_enabled(self, branch=None):
433
# Supports global disable, but there is currently no UI to do this
434
config = GlobalConfig()
435
disabled_flag = config.get_user_option('nautilus_integration')
436
if disabled_flag != 'False':
437
if branch is not None:
438
config = branch.get_config()
439
disabled_flag = config.get_user_option('nautilus_integration')
442
def toggle_integration(self, menu, action, vfs_file=None):
444
tree, path = WorkingTree.open_containing(vfs_file.get_uri())
445
except NotBranchError:
447
except NoWorkingTree:
451
config = GlobalConfig()
453
config = branch.get_config()
454
config.set_user_option('nautilus_integration', action)