/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to nautilus-bzr.py

  • Committer: Vincent Ladeuil
  • Date: 2008-05-05 18:16:46 UTC
  • mto: (487.1.1 gtk)
  • mto: This revision was merged to the branch mainline in revision 490.
  • Revision ID: v.ladeuil+lp@free.fr-20080505181646-n95l8ltw2u6jtr26
Fix bug #187283 fix replacing _() by _i18n().

* genpot.sh 
Remove duplication. Add the ability to specify the genrated pot
file on command-line for debugging purposes.

* po/olive-gtk.pot:
Regenerated.

* __init__.py, branch.py, branchview/treeview.py, checkout.py,
commit.py, conflicts.py, diff.py, errors.py, initialize.py,
merge.py, nautilus-bzr.py, olive/__init__.py, olive/add.py,
olive/bookmark.py, olive/guifiles.py, olive/info.py,
olive/menu.py, olive/mkdir.py, olive/move.py, olive/remove.py,
olive/rename.py, push.py, revbrowser.py, status.py, tags.py:
Replace all calls to _() by calls to _i18n(), the latter being
defined in __init__.py and imported in the other modules from
there. This fix the problem encountered countless times when
running bzr selftest and getting silly error messages about
boolean not being callables.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Trivial Bazaar plugin for Nautilus
 
2
#
 
3
# Copyright (C) 2006 Jeff Bailey
 
4
# Copyright (C) 2006 Wouter van Heyst
 
5
# Copyright (C) 2006-2008 Jelmer Vernooij <jelmer@samba.org>
 
6
#
 
7
# Published under the GNU GPL
 
8
 
 
9
import gtk
1
10
import nautilus
2
11
import bzrlib
 
12
from bzrlib.branch import Branch
3
13
from bzrlib.bzrdir import BzrDir
4
 
from bzrlib.errors import NotBranchError
 
14
from bzrlib.errors import NotBranchError, NoWorkingTree, UnsupportedProtocol
 
15
from bzrlib.tree import file_status
5
16
from bzrlib.workingtree import WorkingTree
6
 
from bzrlib.tree import file_status
 
17
from bzrlib.config import GlobalConfig
7
18
 
8
19
from bzrlib.plugin import load_plugins
9
20
load_plugins()
10
21
 
11
 
from bzrlib.plugins.gtk import cmd_visualise, cmd_gannotate
 
22
from bzrlib.plugins.gtk import _i18n, cmd_visualise, cmd_gannotate
12
23
 
13
24
class BzrExtension(nautilus.MenuProvider, nautilus.ColumnProvider, nautilus.InfoProvider):
14
25
    def __init__(self):
70
81
        except NotBranchError:
71
82
            return
72
83
 
73
 
        from bzrlib.plugins.gtk.viz.diffwin import DiffWindow
 
84
        from bzrlib.plugins.gtk.diff import DiffWindow
74
85
        window = DiffWindow()
75
86
        window.set_diff(tree.branch.nick, tree, tree.branch.basis_tree())
76
87
        window.show()
88
99
        try:
89
100
            tree, path = WorkingTree.open_containing(file)
90
101
        except NotBranchError:
91
 
            BzrDir.create_branch_and_repo(file)
 
102
            BzrDir.create_standalone_workingtree(file)
92
103
 
93
104
    def remove_cb(self, menu, vfs_file):
94
105
        # We can only cope with local files
118
129
        if vfs_file.get_uri_scheme() != 'file':
119
130
            return
120
131
 
121
 
        from bzrlib.plugins.gtk.olive.branch import BranchDialog
 
132
        from bzrlib.plugins.gtk.branch import BranchDialog
122
133
        
123
134
        dialog = BranchDialog(vfs_file.get_name())
124
 
        dialog.display()
 
135
        response = dialog.run()
 
136
        if response != gtk.RESPONSE_NONE:
 
137
            dialog.hide()
 
138
            dialog.destroy()
125
139
 
126
140
    def commit_cb(self, menu, vfs_file=None):
127
141
        # We can only cope with local files
129
143
            return
130
144
 
131
145
        file = vfs_file.get_uri()
 
146
        tree = None
 
147
        branch = None
132
148
        try:
133
149
            tree, path = WorkingTree.open_containing(file)
134
 
        except NotBranchError:
135
 
            return
 
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
136
160
 
137
 
        from bzrlib.plugins.gtk.olive.commit import CommitDialog
 
161
        from bzrlib.plugins.gtk.commit import CommitDialog
138
162
        dialog = CommitDialog(tree, path)
139
 
        dialog.display()
140
 
        gtk.main()
 
163
        response = dialog.run()
 
164
        if response != gtk.RESPONSE_NONE:
 
165
            dialog.hide()
 
166
            dialog.destroy()
141
167
 
142
168
    def log_cb(self, menu, vfs_file):
143
169
        # We can only cope with local files
170
196
        except NotBranchError:
171
197
            return
172
198
 
173
 
        from bzrlib.plugins.gtk.olive.pull import PullDialog
 
199
        from bzrlib.plugins.gtk.pull import PullDialog
174
200
        dialog = PullDialog(tree, path)
175
201
        dialog.display()
176
202
        gtk.main()
188
214
        except NotBranchError:
189
215
            return
190
216
 
191
 
        from bzrlib.plugins.gtk.olive.merge import MergeDialog
 
217
        from bzrlib.plugins.gtk.merge import MergeDialog
192
218
        dialog = MergeDialog(tree, path)
193
219
        dialog.display()
194
220
        gtk.main()
196
222
    def get_background_items(self, window, vfs_file):
197
223
        items = []
198
224
        file = vfs_file.get_uri()
 
225
 
199
226
        try:
200
227
            tree, path = WorkingTree.open_containing(file)
 
228
            disabled_flag = self.check_branch_enabled(tree.branch)
 
229
        except UnsupportedProtocol:
 
230
            return
201
231
        except NotBranchError:
 
232
            disabled_flag = self.check_branch_enabled()
202
233
            item = nautilus.MenuItem('BzrNautilus::newtree',
203
234
                                 'Make directory versioned',
204
235
                                 'Create new Bazaar tree in this folder')
212
243
            items.append(item)
213
244
 
214
245
            return items
 
246
        except NoWorkingTree:
 
247
            return
 
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')
 
253
            item.connect('activate', self.toggle_integration, 'True', vfs_file)
 
254
            return item,
 
255
        else:
 
256
            item = nautilus.MenuItem('BzrNautilus::disable',
 
257
                                      'Disable Bazaar Plugin for the Branch',
 
258
                                      'Disable Bazaar plugin for nautilus')
 
259
            item.connect('activate', self.toggle_integration, 'False', vfs_file)
 
260
            items.append(item)
215
261
 
216
262
        item = nautilus.MenuItem('BzrNautilus::log',
217
263
                             'Log',
239
285
 
240
286
        return items
241
287
 
242
 
 
243
288
    def get_file_items(self, window, files):
244
289
        items = []
245
 
 
 
290
        
 
291
        wtfiles = {}
246
292
        for vfs_file in files:
247
293
            # We can only cope with local files
248
294
            if vfs_file.get_uri_scheme() != 'file':
249
 
                return
 
295
                continue
250
296
 
251
297
            file = vfs_file.get_uri()
252
298
            try:
253
299
                tree, path = WorkingTree.open_containing(file)
 
300
                disabled_flag = self.check_branch_enabled(tree.branch)
254
301
            except NotBranchError:
 
302
                disabled_flag = self.check_branch_enabled()
255
303
                if not vfs_file.is_directory():
 
304
                    continue
 
305
 
 
306
                if disabled_flag == 'False':
256
307
                    return
 
308
 
257
309
                item = nautilus.MenuItem('BzrNautilus::newtree',
258
310
                                     'Make directory versioned',
259
311
                                     'Create new Bazaar tree in %s' % vfs_file.get_name())
260
312
                item.connect('activate', self.newtree_cb, vfs_file)
261
313
                return item,
262
 
 
263
 
            file_class = tree.file_class(path)
264
 
 
265
 
            if file_class == '?':
 
314
            except NoWorkingTree:
 
315
                continue
 
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] == '?':
266
325
                item = nautilus.MenuItem('BzrNautilus::add',
267
326
                                     'Add',
268
327
                                     'Add as versioned file')
274
333
                                     'Ignore file for versioning')
275
334
                item.connect('activate', self.ignore_cb, vfs_file)
276
335
                items.append(item)
277
 
            elif file_class == 'I':
 
336
            elif wtfiles[path] == 'I':
278
337
                item = nautilus.MenuItem('BzrNautilus::unignore',
279
338
                                     'Unignore',
280
339
                                     'Unignore file for versioning')
281
340
                item.connect('activate', self.unignore_cb, vfs_file)
282
341
                items.append(item)
283
 
            elif file_class == 'V':
 
342
            elif wtfiles[path] == 'V':
284
343
                item = nautilus.MenuItem('BzrNautilus::log',
285
344
                                 'Log',
286
345
                                 'List changes')
320
379
                               "Version control status"),
321
380
 
322
381
    def update_file_info(self, file):
 
382
 
323
383
        if file.get_uri_scheme() != 'file':
324
384
            return
325
385
        
327
387
            tree, path = WorkingTree.open_containing(file.get_uri())
328
388
        except NotBranchError:
329
389
            return
 
390
        except NoWorkingTree:
 
391
            return   
 
392
 
 
393
        disabled_flag = self.check_branch_enabled(tree.branch)
 
394
        if disabled_flag == 'False':
 
395
            return
330
396
 
331
397
        emblem = None
332
398
        status = None
333
399
 
334
400
        if tree.has_filename(path):
335
 
            emblem = 'cvs-controlled'
 
401
            emblem = 'bzr-controlled'
336
402
            status = 'unchanged'
337
403
            id = tree.path2id(path)
338
404
 
339
405
            delta = tree.changes_from(tree.branch.basis_tree())
340
406
            if delta.touches_file_id(id):
341
 
                emblem = 'cvs-modified'
 
407
                emblem = 'bzr-modified'
342
408
                status = 'modified'
343
409
            for f, _, _ in delta.added:
344
410
                if f == path:
345
 
                    emblem = 'cvs-added'
 
411
                    emblem = 'bzr-added'
346
412
                    status = 'added'
347
413
 
348
414
            for of, f, _, _, _, _ in delta.renamed:
350
416
                    status = 'renamed from %s' % f
351
417
 
352
418
        elif tree.branch.basis_tree().has_filename(path):
353
 
            emblem = 'cvs-removed'
 
419
            emblem = 'bzr-removed'
354
420
            status = 'removed'
355
421
        else:
356
422
            # FIXME: Check for ignored files
359
425
        if emblem is not None:
360
426
            file.add_emblem(emblem)
361
427
        file.add_string_attribute('bzr_status', status)
 
428
 
 
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
 
 
439
    def toggle_integration(self, menu, action, vfs_file=None):
 
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()
 
451
        config.set_user_option('nautilus_integration', action)
 
452