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