/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
164 by Jelmer Vernooij
Add copyright information.
1
# Trivial Bazaar plugin for Nautilus
2
#
3
# Copyright (C) 2006 Jeff Bailey
4
# Copyright (C) 2006 Wouter van Heyst
423.13.1 by Jelmer Vernooij
Fix handling of NoWorkingTree error.
5
# Copyright (C) 2006-2008 Jelmer Vernooij <jelmer@samba.org>
164 by Jelmer Vernooij
Add copyright information.
6
#
7
# Published under the GNU GPL
8
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
9
import gtk
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
10
import nautilus
11
import bzrlib
423.13.1 by Jelmer Vernooij
Fix handling of NoWorkingTree error.
12
from bzrlib.branch import Branch
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
13
from bzrlib.bzrdir import BzrDir
423.13.1 by Jelmer Vernooij
Fix handling of NoWorkingTree error.
14
from bzrlib.errors import NotBranchError, NoWorkingTree, UnsupportedProtocol
15
from bzrlib.tree import file_status
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
16
from bzrlib.workingtree import WorkingTree
454 by Martin Albisetti
Add the logic to enable/disable the plugin
17
from bzrlib.config import GlobalConfig
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
18
0.7.1 by Wouter van Heyst
use the bzrlib method of loading plugins, takes care of ~/.bazaar/plugins
19
from bzrlib.plugin import load_plugins
20
load_plugins()
21
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
22
from bzrlib.plugins.gtk import cmd_visualise, cmd_gannotate
0.6.2 by Jelmer Vernooij
Add 'Annotate' menu entry that uses the gannotate bzr plugin
23
88 by Jelmer Vernooij
Show column with file status.
24
class BzrExtension(nautilus.MenuProvider, nautilus.ColumnProvider, nautilus.InfoProvider):
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
25
    def __init__(self):
26
        pass
27
0.5.4 by jbailey at ubuntu
Add 'add' function. Give framework for other callbacks.
28
    def add_cb(self, menu, vfs_file):
29
        # We can only cope with local files
30
        if vfs_file.get_uri_scheme() != 'file':
31
            return
32
33
        file = vfs_file.get_uri()
34
        try:
35
            tree, path = WorkingTree.open_containing(file)
36
        except NotBranchError:
37
            return
38
39
        tree.add(path)
40
41
        return
42
43
    def ignore_cb(self, menu, vfs_file):
44
        # We can only cope with local files
45
        if vfs_file.get_uri_scheme() != 'file':
46
            return
47
48
        file = vfs_file.get_uri()
49
        try:
50
            tree, path = WorkingTree.open_containing(file)
51
        except NotBranchError:
52
            return
53
0.5.16 by Jelmer Vernooij
Adapt to bzr-gtk's API changes, add 'Clone' dialog
54
        #FIXME
55
0.5.4 by jbailey at ubuntu
Add 'add' function. Give framework for other callbacks.
56
        return
57
58
    def unignore_cb(self, menu, vfs_file):
59
        # We can only cope with local files
60
        if vfs_file.get_uri_scheme() != 'file':
61
            return
62
63
        file = vfs_file.get_uri()
64
        try:
65
            tree, path = WorkingTree.open_containing(file)
66
        except NotBranchError:
67
            return
68
0.5.16 by Jelmer Vernooij
Adapt to bzr-gtk's API changes, add 'Clone' dialog
69
        #FIXME
70
0.5.4 by jbailey at ubuntu
Add 'add' function. Give framework for other callbacks.
71
        return
72
73
    def diff_cb(self, menu, vfs_file):
74
        # We can only cope with local files
75
        if vfs_file.get_uri_scheme() != 'file':
76
            return
77
78
        file = vfs_file.get_uri()
79
        try:
80
            tree, path = WorkingTree.open_containing(file)
81
        except NotBranchError:
82
            return
83
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
84
        from bzrlib.plugins.gtk.diff import DiffWindow
0.5.13 by Jelmer Vernooij
Use the gtk plugin rather than separate bzrk and gannotate
85
        window = DiffWindow()
87 by Jelmer Vernooij
Fix diff window in nautilus.
86
        window.set_diff(tree.branch.nick, tree, tree.branch.basis_tree())
0.5.13 by Jelmer Vernooij
Use the gtk plugin rather than separate bzrk and gannotate
87
        window.show()
88
0.5.4 by jbailey at ubuntu
Add 'add' function. Give framework for other callbacks.
89
        return
90
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
91
    def newtree_cb(self, menu, vfs_file):
92
        # We can only cope with local files
93
        if vfs_file.get_uri_scheme() != 'file':
94
            return
95
96
        file = vfs_file.get_uri()
97
98
        # We only want to continue here if we get a NotBranchError
99
        try:
100
            tree, path = WorkingTree.open_containing(file)
101
        except NotBranchError:
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
102
            BzrDir.create_standalone_workingtree(file)
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
103
0.5.4 by jbailey at ubuntu
Add 'add' function. Give framework for other callbacks.
104
    def remove_cb(self, menu, vfs_file):
105
        # We can only cope with local files
106
        if vfs_file.get_uri_scheme() != 'file':
107
            return
108
109
        file = vfs_file.get_uri()
110
        try:
111
            tree, path = WorkingTree.open_containing(file)
112
        except NotBranchError:
113
            return
114
0.5.6 by jbailey at ubuntu
Implement remove
115
        tree.remove(path)
116
0.6.2 by Jelmer Vernooij
Add 'Annotate' menu entry that uses the gannotate bzr plugin
117
    def annotate_cb(self, menu, vfs_file):
118
        # We can only cope with local files
119
        if vfs_file.get_uri_scheme() != 'file':
120
            return
121
122
        file = vfs_file.get_uri()
123
124
        vis = cmd_gannotate()
125
        vis.run(file)
0.5.16 by Jelmer Vernooij
Adapt to bzr-gtk's API changes, add 'Clone' dialog
126
127
    def clone_cb(self, menu, vfs_file=None):
128
        # We can only cope with local files
129
        if vfs_file.get_uri_scheme() != 'file':
130
            return
131
142 by Jelmer Vernooij
Move some files to the top-level directory, add first test.
132
        from bzrlib.plugins.gtk.branch import BranchDialog
90 by Jelmer Vernooij
Use Olive's clone dialog in nautilus-bzr; remove the old Clone dialog
133
        
134
        dialog = BranchDialog(vfs_file.get_name())
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
135
        response = dialog.run()
136
        if response != gtk.RESPONSE_NONE:
137
            dialog.hide()
138
            dialog.destroy()
0.6.2 by Jelmer Vernooij
Add 'Annotate' menu entry that uses the gannotate bzr plugin
139
 
0.5.15 by Jelmer Vernooij
Add 'Commit' entries
140
    def commit_cb(self, menu, vfs_file=None):
141
        # We can only cope with local files
142
        if vfs_file.get_uri_scheme() != 'file':
143
            return
144
145
        file = vfs_file.get_uri()
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
146
        tree = None
147
        branch = None
0.5.15 by Jelmer Vernooij
Add 'Commit' entries
148
        try:
149
            tree, path = WorkingTree.open_containing(file)
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
150
            branch = tree.branch
151
        except NotBranchError, e:
152
            path = e.path
153
            #return
154
        except NoWorkingTree, e:
155
            path = e.base
156
            try:
157
                (branch, path) = Branch.open_containing(path)
158
            except NotBranchError, e:
159
                path = e.path
0.5.15 by Jelmer Vernooij
Add 'Commit' entries
160
142 by Jelmer Vernooij
Move some files to the top-level directory, add first test.
161
        from bzrlib.plugins.gtk.commit import CommitDialog
423.13.4 by Jelmer Vernooij
Fix commit dialog from nautilus.
162
        dialog = CommitDialog(tree, path)
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
163
        response = dialog.run()
164
        if response != gtk.RESPONSE_NONE:
165
            dialog.hide()
166
            dialog.destroy()
0.6.2 by Jelmer Vernooij
Add 'Annotate' menu entry that uses the gannotate bzr plugin
167
0.5.12 by Jelmer Vernooij
Rename "Visualise Bazaar Branch" to "Log", which is a term
168
    def log_cb(self, menu, vfs_file):
0.5.8 by jbailey at ubuntu
Add bzrk plugin
169
        # We can only cope with local files
170
        if vfs_file.get_uri_scheme() != 'file':
171
            return
172
173
        file = vfs_file.get_uri()
174
175
        # We only want to continue here if we get a NotBranchError
176
        try:
177
            tree, path = WorkingTree.open_containing(file)
178
        except NotBranchError:
179
            return
180
423.13.3 by Jelmer Vernooij
Remove fork() hack, it breaks X.
181
        vis = cmd_visualise()
182
        vis.run(file)
0.5.8 by jbailey at ubuntu
Add bzrk plugin
183
184
        return
185
91.1.4 by Jelmer Vernooij
List pull and merge in nautilus-bzr.
186
    def pull_cb(self, menu, vfs_file):
187
        # We can only cope with local files
188
        if vfs_file.get_uri_scheme() != 'file':
189
            return
190
191
        file = vfs_file.get_uri()
192
193
        # We only want to continue here if we get a NotBranchError
194
        try:
195
            tree, path = WorkingTree.open_containing(file)
196
        except NotBranchError:
197
            return
198
142 by Jelmer Vernooij
Move some files to the top-level directory, add first test.
199
        from bzrlib.plugins.gtk.pull import PullDialog
91.1.4 by Jelmer Vernooij
List pull and merge in nautilus-bzr.
200
        dialog = PullDialog(tree, path)
201
        dialog.display()
202
        gtk.main()
203
204
    def merge_cb(self, menu, vfs_file):
205
        # We can only cope with local files
206
        if vfs_file.get_uri_scheme() != 'file':
207
            return
208
209
        file = vfs_file.get_uri()
210
211
        # We only want to continue here if we get a NotBranchError
212
        try:
213
            tree, path = WorkingTree.open_containing(file)
214
        except NotBranchError:
215
            return
216
142 by Jelmer Vernooij
Move some files to the top-level directory, add first test.
217
        from bzrlib.plugins.gtk.merge import MergeDialog
91.1.4 by Jelmer Vernooij
List pull and merge in nautilus-bzr.
218
        dialog = MergeDialog(tree, path)
219
        dialog.display()
220
        gtk.main()
221
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
222
    def get_background_items(self, window, vfs_file):
90 by Jelmer Vernooij
Use Olive's clone dialog in nautilus-bzr; remove the old Clone dialog
223
        items = []
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
224
        file = vfs_file.get_uri()
455 by Martin Albisetti
Add enable/disable options to contexts menu
225
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
226
        try:
227
            tree, path = WorkingTree.open_containing(file)
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
228
            disabled_flag = self.check_branch_enabled(tree.branch)
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
229
        except UnsupportedProtocol:
230
            return
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
231
        except NotBranchError:
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
232
            disabled_flag = self.check_branch_enabled()
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
233
            item = nautilus.MenuItem('BzrNautilus::newtree',
91 by Jelmer Vernooij
Some update to TODO.
234
                                 'Make directory versioned',
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
235
                                 'Create new Bazaar tree in this folder')
236
            item.connect('activate', self.newtree_cb, vfs_file)
0.5.16 by Jelmer Vernooij
Adapt to bzr-gtk's API changes, add 'Clone' dialog
237
            items.append(item)
238
239
            item = nautilus.MenuItem('BzrNautilus::clone',
91 by Jelmer Vernooij
Some update to TODO.
240
                                 'Checkout Bazaar branch',
0.5.16 by Jelmer Vernooij
Adapt to bzr-gtk's API changes, add 'Clone' dialog
241
                                 'Checkout Existing Bazaar Branch')
242
            item.connect('activate', self.clone_cb, vfs_file)
243
            items.append(item)
244
245
            return items
423.13.2 by Jelmer Vernooij
Fix handling of NoWorkingTree exception in a couple more places.
246
        except NoWorkingTree:
247
            return
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
248
        
249
        if disabled_flag == 'False':
250
            item = nautilus.MenuItem('BzrNautilus::enable',
251
                                     'Enable Bazaar Plugin for this Branch',
252
                                     'Enable Bazaar plugin for nautilus')
460 by Martin Albisetti
Removed duplicate code
253
            item.connect('activate', self.toggle_integration, 'True', vfs_file)
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
254
            return item,
255
        else:
256
            item = nautilus.MenuItem('BzrNautilus::disable',
257
                                      'Disable Bazaar Plugin for the Branch',
258
                                      'Disable Bazaar plugin for nautilus')
460 by Martin Albisetti
Removed duplicate code
259
            item.connect('activate', self.toggle_integration, 'False', vfs_file)
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
260
            items.append(item)
0.5.8 by jbailey at ubuntu
Add bzrk plugin
261
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
262
        item = nautilus.MenuItem('BzrNautilus::log',
263
                             'Log',
264
                             'Show Bazaar history')
265
        item.connect('activate', self.log_cb, vfs_file)
266
        items.append(item)
0.5.15 by Jelmer Vernooij
Add 'Commit' entries
267
91.1.4 by Jelmer Vernooij
List pull and merge in nautilus-bzr.
268
        item = nautilus.MenuItem('BzrNautilus::pull',
269
                             'Pull',
270
                             'Pull from another branch')
271
        item.connect('activate', self.pull_cb, vfs_file)
272
        items.append(item)
273
274
        item = nautilus.MenuItem('BzrNautilus::merge',
275
                             'Merge',
276
                             'Merge from another branch')
277
        item.connect('activate', self.merge_cb, vfs_file)
278
        items.append(item)
279
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
280
        item = nautilus.MenuItem('BzrNautilus::commit',
281
                             'Commit',
282
                             'Commit Changes')
283
        item.connect('activate', self.commit_cb, vfs_file)
284
        items.append(item)
0.5.15 by Jelmer Vernooij
Add 'Commit' entries
285
286
        return items
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
287
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
288
    def get_file_items(self, window, files):
289
        items = []
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
290
        
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
291
        wtfiles = {}
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
292
        for vfs_file in files:
293
            # We can only cope with local files
294
            if vfs_file.get_uri_scheme() != 'file':
423.13.2 by Jelmer Vernooij
Fix handling of NoWorkingTree exception in a couple more places.
295
                continue
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
296
297
            file = vfs_file.get_uri()
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
298
            try:
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
299
                tree, path = WorkingTree.open_containing(file)
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
300
                disabled_flag = self.check_branch_enabled(tree.branch)
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
301
            except NotBranchError:
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
302
                disabled_flag = self.check_branch_enabled()
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
303
                if not vfs_file.is_directory():
423.13.2 by Jelmer Vernooij
Fix handling of NoWorkingTree exception in a couple more places.
304
                    continue
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
305
306
                if disabled_flag == 'False':
307
                    return
308
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
309
                item = nautilus.MenuItem('BzrNautilus::newtree',
91 by Jelmer Vernooij
Some update to TODO.
310
                                     'Make directory versioned',
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
311
                                     'Create new Bazaar tree in %s' % vfs_file.get_name())
312
                item.connect('activate', self.newtree_cb, vfs_file)
313
                return item,
423.13.2 by Jelmer Vernooij
Fix handling of NoWorkingTree exception in a couple more places.
314
            except NoWorkingTree:
315
                continue
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
316
            # Refresh the list of filestatuses in the working tree
317
            if path not in wtfiles.keys():
318
                tree.lock_read()
319
                for rpath, file_class, kind, id, entry in tree.list_files():
320
                    wtfiles[rpath] = file_class
321
                tree.unlock()
322
                wtfiles[u''] = 'V'
323
324
            if wtfiles[path] == '?':
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
325
                item = nautilus.MenuItem('BzrNautilus::add',
326
                                     'Add',
327
                                     'Add as versioned file')
328
                item.connect('activate', self.add_cb, vfs_file)
329
                items.append(item)
330
331
                item = nautilus.MenuItem('BzrNautilus::ignore',
332
                                     'Ignore',
333
                                     'Ignore file for versioning')
334
                item.connect('activate', self.ignore_cb, vfs_file)
335
                items.append(item)
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
336
            elif wtfiles[path] == 'I':
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
337
                item = nautilus.MenuItem('BzrNautilus::unignore',
338
                                     'Unignore',
339
                                     'Unignore file for versioning')
340
                item.connect('activate', self.unignore_cb, vfs_file)
341
                items.append(item)
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
342
            elif wtfiles[path] == 'V':
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
343
                item = nautilus.MenuItem('BzrNautilus::log',
344
                                 'Log',
345
                                 'List changes')
346
                item.connect('activate', self.log_cb, vfs_file)
347
                items.append(item)
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
348
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
349
                item = nautilus.MenuItem('BzrNautilus::diff',
350
                                 'Diff',
351
                                 'Show differences')
352
                item.connect('activate', self.diff_cb, vfs_file)
353
                items.append(item)
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
354
355
                item = nautilus.MenuItem('BzrNautilus::remove',
356
                                     'Remove',
357
                                     'Remove this file from versioning')
358
                item.connect('activate', self.remove_cb, vfs_file)
359
                items.append(item)
0.6.2 by Jelmer Vernooij
Add 'Annotate' menu entry that uses the gannotate bzr plugin
360
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
361
                item = nautilus.MenuItem('BzrNautilus::annotate',
362
                             'Annotate',
363
                             'Annotate File Data')
364
                item.connect('activate', self.annotate_cb, vfs_file)
365
                items.append(item)
366
367
                item = nautilus.MenuItem('BzrNautilus::commit',
368
                             'Commit',
369
                             'Commit Changes')
370
                item.connect('activate', self.commit_cb, vfs_file)
371
                items.append(item)
372
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
373
        return items
88 by Jelmer Vernooij
Show column with file status.
374
375
    def get_columns(self):
376
        return nautilus.Column("BzrNautilus::bzr_status",
377
                               "bzr_status",
378
                               "Bzr Status",
379
                               "Version control status"),
380
381
    def update_file_info(self, file):
454 by Martin Albisetti
Add the logic to enable/disable the plugin
382
88 by Jelmer Vernooij
Show column with file status.
383
        if file.get_uri_scheme() != 'file':
384
            return
385
        
386
        try:
387
            tree, path = WorkingTree.open_containing(file.get_uri())
388
        except NotBranchError:
389
            return
423.13.1 by Jelmer Vernooij
Fix handling of NoWorkingTree error.
390
        except NoWorkingTree:
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
391
            return   
392
393
        disabled_flag = self.check_branch_enabled(tree.branch)
394
        if disabled_flag == 'False':
423.13.1 by Jelmer Vernooij
Fix handling of NoWorkingTree error.
395
            return
88 by Jelmer Vernooij
Show column with file status.
396
397
        emblem = None
398
        status = None
399
400
        if tree.has_filename(path):
423.13.5 by Jelmer Vernooij
Change emblems to the new emblems submitted by Martin.
401
            emblem = 'bzr-controlled'
88 by Jelmer Vernooij
Show column with file status.
402
            status = 'unchanged'
403
            id = tree.path2id(path)
404
405
            delta = tree.changes_from(tree.branch.basis_tree())
406
            if delta.touches_file_id(id):
423.13.5 by Jelmer Vernooij
Change emblems to the new emblems submitted by Martin.
407
                emblem = 'bzr-modified'
88 by Jelmer Vernooij
Show column with file status.
408
                status = 'modified'
409
            for f, _, _ in delta.added:
410
                if f == path:
423.13.5 by Jelmer Vernooij
Change emblems to the new emblems submitted by Martin.
411
                    emblem = 'bzr-added'
88 by Jelmer Vernooij
Show column with file status.
412
                    status = 'added'
413
414
            for of, f, _, _, _, _ in delta.renamed:
415
                if f == path:
416
                    status = 'renamed from %s' % f
417
418
        elif tree.branch.basis_tree().has_filename(path):
423.13.5 by Jelmer Vernooij
Change emblems to the new emblems submitted by Martin.
419
            emblem = 'bzr-removed'
88 by Jelmer Vernooij
Show column with file status.
420
            status = 'removed'
421
        else:
422
            # FIXME: Check for ignored files
423
            status = 'unversioned'
424
        
425
        if emblem is not None:
426
            file.add_emblem(emblem)
427
        file.add_string_attribute('bzr_status', status)
454 by Martin Albisetti
Add the logic to enable/disable the plugin
428
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
429
    def check_branch_enabled(self, branch=None):
430
        # Supports global disable, but there is currently no UI to do this
431
        config = GlobalConfig()
432
        disabled_flag = config.get_user_option('nautilus_integration')
433
        if disabled_flag != 'False':
434
            if branch is not None:
435
                config = branch.get_config()
436
                disabled_flag = config.get_user_option('nautilus_integration')
437
        return disabled_flag
438
460 by Martin Albisetti
Removed duplicate code
439
    def toggle_integration(self, menu, action, vfs_file=None):
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
440
        try:
441
            tree, path = WorkingTree.open_containing(vfs_file.get_uri())
442
        except NotBranchError:
443
            return
444
        except NoWorkingTree:
445
            return
446
        branch = tree.branch
447
        if branch is None:
448
            config = GlobalConfig()
449
        else:
450
            config = branch.get_config()
460 by Martin Albisetti
Removed duplicate code
451
        config.set_user_option('nautilus_integration', action)
454 by Martin Albisetti
Add the logic to enable/disable the plugin
452