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