/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()
578 by Jelmer Vernooij
Merge nautilus improvements.
222
        dialog.destroy()
91.1.4 by Jelmer Vernooij
List pull and merge in nautilus-bzr.
223
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
224
    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
225
        items = []
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
226
        file = vfs_file.get_uri()
455 by Martin Albisetti
Add enable/disable options to contexts menu
227
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
228
        try:
229
            tree, path = WorkingTree.open_containing(file)
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
230
            disabled_flag = self.check_branch_enabled(tree.branch)
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
231
        except UnsupportedProtocol:
232
            return
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
233
        except NotBranchError:
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
234
            disabled_flag = self.check_branch_enabled()
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
235
            item = nautilus.MenuItem('BzrNautilus::newtree',
91 by Jelmer Vernooij
Some update to TODO.
236
                                 'Make directory versioned',
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
237
                                 'Create new Bazaar tree in this folder')
238
            item.connect('activate', self.newtree_cb, vfs_file)
0.5.16 by Jelmer Vernooij
Adapt to bzr-gtk's API changes, add 'Clone' dialog
239
            items.append(item)
240
241
            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.
242
                                 'Checkout Bazaar branch ...',
0.5.16 by Jelmer Vernooij
Adapt to bzr-gtk's API changes, add 'Clone' dialog
243
                                 'Checkout Existing Bazaar Branch')
244
            item.connect('activate', self.clone_cb, vfs_file)
245
            items.append(item)
246
247
            return items
423.13.2 by Jelmer Vernooij
Fix handling of NoWorkingTree exception in a couple more places.
248
        except NoWorkingTree:
249
            return
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
250
        
251
        if disabled_flag == 'False':
252
            item = nautilus.MenuItem('BzrNautilus::enable',
253
                                     'Enable Bazaar Plugin for this Branch',
254
                                     'Enable Bazaar plugin for nautilus')
460 by Martin Albisetti
Removed duplicate code
255
            item.connect('activate', self.toggle_integration, 'True', vfs_file)
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
256
            return item,
257
        else:
258
            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.
259
                                      'Disable Bazaar Plugin this Branch',
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
260
                                      'Disable Bazaar plugin for nautilus')
460 by Martin Albisetti
Removed duplicate code
261
            item.connect('activate', self.toggle_integration, 'False', vfs_file)
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
262
            items.append(item)
0.5.8 by jbailey at ubuntu
Add bzrk plugin
263
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
264
        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.
265
                             'History ...',
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
266
                             'Show Bazaar history')
267
        item.connect('activate', self.log_cb, vfs_file)
268
        items.append(item)
0.5.15 by Jelmer Vernooij
Add 'Commit' entries
269
91.1.4 by Jelmer Vernooij
List pull and merge in nautilus-bzr.
270
        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.
271
                             'Pull ...',
91.1.4 by Jelmer Vernooij
List pull and merge in nautilus-bzr.
272
                             'Pull from another branch')
273
        item.connect('activate', self.pull_cb, vfs_file)
274
        items.append(item)
275
276
        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.
277
                             'Merge ...',
91.1.4 by Jelmer Vernooij
List pull and merge in nautilus-bzr.
278
                             'Merge from another branch')
279
        item.connect('activate', self.merge_cb, vfs_file)
280
        items.append(item)
281
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
282
        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.
283
                             'Commit ...',
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
284
                             'Commit Changes')
285
        item.connect('activate', self.commit_cb, vfs_file)
286
        items.append(item)
0.5.15 by Jelmer Vernooij
Add 'Commit' entries
287
288
        return items
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
289
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
290
    def get_file_items(self, window, files):
291
        items = []
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
292
        
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
293
        wtfiles = {}
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
294
        for vfs_file in files:
295
            # We can only cope with local files
296
            if vfs_file.get_uri_scheme() != 'file':
423.13.2 by Jelmer Vernooij
Fix handling of NoWorkingTree exception in a couple more places.
297
                continue
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
298
299
            file = vfs_file.get_uri()
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
300
            try:
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
301
                tree, path = WorkingTree.open_containing(file)
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
302
                disabled_flag = self.check_branch_enabled(tree.branch)
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
303
            except NotBranchError:
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
304
                disabled_flag = self.check_branch_enabled()
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
305
                if not vfs_file.is_directory():
423.13.2 by Jelmer Vernooij
Fix handling of NoWorkingTree exception in a couple more places.
306
                    continue
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
307
308
                if disabled_flag == 'False':
309
                    return
310
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
311
                item = nautilus.MenuItem('BzrNautilus::newtree',
91 by Jelmer Vernooij
Some update to TODO.
312
                                     'Make directory versioned',
0.5.7 by jbailey at ubuntu
Add hook for creating new bzr trees.
313
                                     'Create new Bazaar tree in %s' % vfs_file.get_name())
314
                item.connect('activate', self.newtree_cb, vfs_file)
315
                return item,
423.13.2 by Jelmer Vernooij
Fix handling of NoWorkingTree exception in a couple more places.
316
            except NoWorkingTree:
317
                continue
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
318
            # Refresh the list of filestatuses in the working tree
319
            if path not in wtfiles.keys():
320
                tree.lock_read()
321
                for rpath, file_class, kind, id, entry in tree.list_files():
322
                    wtfiles[rpath] = file_class
323
                tree.unlock()
324
                wtfiles[u''] = 'V'
325
326
            if wtfiles[path] == '?':
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
327
                item = nautilus.MenuItem('BzrNautilus::add',
328
                                     'Add',
329
                                     'Add as versioned file')
330
                item.connect('activate', self.add_cb, vfs_file)
331
                items.append(item)
332
333
                item = nautilus.MenuItem('BzrNautilus::ignore',
334
                                     'Ignore',
335
                                     'Ignore file for versioning')
336
                item.connect('activate', self.ignore_cb, vfs_file)
337
                items.append(item)
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
338
            elif wtfiles[path] == 'I':
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
339
                item = nautilus.MenuItem('BzrNautilus::unignore',
340
                                     'Unignore',
341
                                     'Unignore file for versioning')
342
                item.connect('activate', self.unignore_cb, vfs_file)
343
                items.append(item)
419 by Szilveszter Farkas
Applied nautilus-bzr patches by Toshio Kuratomi.
344
            elif wtfiles[path] == 'V':
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
345
                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.
346
                                 'History ...',
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
347
                                 'List changes')
348
                item.connect('activate', self.log_cb, vfs_file)
349
                items.append(item)
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
350
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
351
                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.
352
                                 'View Changes ...',
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
353
                                 'Show differences')
354
                item.connect('activate', self.diff_cb, vfs_file)
355
                items.append(item)
0.5.2 by jbailey at ubuntu
Bring this to a state where it actually works. Specifically:
356
357
                item = nautilus.MenuItem('BzrNautilus::remove',
358
                                     'Remove',
359
                                     'Remove this file from versioning')
360
                item.connect('activate', self.remove_cb, vfs_file)
361
                items.append(item)
0.6.2 by Jelmer Vernooij
Add 'Annotate' menu entry that uses the gannotate bzr plugin
362
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
363
                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.
364
                             'Annotate ...',
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
365
                             'Annotate File Data')
366
                item.connect('activate', self.annotate_cb, vfs_file)
367
                items.append(item)
368
369
                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.
370
                             'Commit ...',
81 by Jelmer Vernooij
Remove unnecessary "#!/usr/bin/python" shebang lines (fixes #59125).
371
                             'Commit Changes')
372
                item.connect('activate', self.commit_cb, vfs_file)
373
                items.append(item)
374
0.5.1 by Jelmer Vernooij
Start working on bzr integration plugin for nautilus
375
        return items
88 by Jelmer Vernooij
Show column with file status.
376
377
    def get_columns(self):
378
        return nautilus.Column("BzrNautilus::bzr_status",
379
                               "bzr_status",
380
                               "Bzr Status",
381
                               "Version control status"),
382
383
    def update_file_info(self, file):
454 by Martin Albisetti
Add the logic to enable/disable the plugin
384
88 by Jelmer Vernooij
Show column with file status.
385
        if file.get_uri_scheme() != 'file':
386
            return
387
        
388
        try:
389
            tree, path = WorkingTree.open_containing(file.get_uri())
390
        except NotBranchError:
391
            return
423.13.1 by Jelmer Vernooij
Fix handling of NoWorkingTree error.
392
        except NoWorkingTree:
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
393
            return   
394
395
        disabled_flag = self.check_branch_enabled(tree.branch)
396
        if disabled_flag == 'False':
423.13.1 by Jelmer Vernooij
Fix handling of NoWorkingTree error.
397
            return
88 by Jelmer Vernooij
Show column with file status.
398
399
        emblem = None
400
        status = None
401
402
        if tree.has_filename(path):
423.13.5 by Jelmer Vernooij
Change emblems to the new emblems submitted by Martin.
403
            emblem = 'bzr-controlled'
88 by Jelmer Vernooij
Show column with file status.
404
            status = 'unchanged'
405
            id = tree.path2id(path)
406
407
            delta = tree.changes_from(tree.branch.basis_tree())
408
            if delta.touches_file_id(id):
423.13.5 by Jelmer Vernooij
Change emblems to the new emblems submitted by Martin.
409
                emblem = 'bzr-modified'
88 by Jelmer Vernooij
Show column with file status.
410
                status = 'modified'
411
            for f, _, _ in delta.added:
412
                if f == path:
423.13.5 by Jelmer Vernooij
Change emblems to the new emblems submitted by Martin.
413
                    emblem = 'bzr-added'
88 by Jelmer Vernooij
Show column with file status.
414
                    status = 'added'
415
416
            for of, f, _, _, _, _ in delta.renamed:
417
                if f == path:
418
                    status = 'renamed from %s' % f
419
420
        elif tree.branch.basis_tree().has_filename(path):
423.13.5 by Jelmer Vernooij
Change emblems to the new emblems submitted by Martin.
421
            emblem = 'bzr-removed'
88 by Jelmer Vernooij
Show column with file status.
422
            status = 'removed'
423
        else:
424
            # FIXME: Check for ignored files
425
            status = 'unversioned'
426
        
427
        if emblem is not None:
428
            file.add_emblem(emblem)
429
        file.add_string_attribute('bzr_status', status)
454 by Martin Albisetti
Add the logic to enable/disable the plugin
430
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
431
    def check_branch_enabled(self, branch=None):
432
        # Supports global disable, but there is currently no UI to do this
433
        config = GlobalConfig()
434
        disabled_flag = config.get_user_option('nautilus_integration')
435
        if disabled_flag != 'False':
436
            if branch is not None:
437
                config = branch.get_config()
438
                disabled_flag = config.get_user_option('nautilus_integration')
439
        return disabled_flag
440
460 by Martin Albisetti
Removed duplicate code
441
    def toggle_integration(self, menu, action, vfs_file=None):
459 by Martin Albisetti
Change nautilus enable/disable to per branch basis
442
        try:
443
            tree, path = WorkingTree.open_containing(vfs_file.get_uri())
444
        except NotBranchError:
445
            return
446
        except NoWorkingTree:
447
            return
448
        branch = tree.branch
449
        if branch is None:
450
            config = GlobalConfig()
451
        else:
452
            config = branch.get_config()
460 by Martin Albisetti
Removed duplicate code
453
        config.set_user_option('nautilus_integration', action)
454 by Martin Albisetti
Add the logic to enable/disable the plugin
454