/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: matkor
  • Date: 2007-08-23 10:17:40 UTC
  • mto: This revision was merged to the branch mainline in revision 265.
  • Revision ID: matkor@laptop-hp-20070823101740-s17kf9qa383wiuje
Code for "branch update" menuitem and toolbox. Typo fix

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
#
3
3
# Copyright (C) 2006 Jeff Bailey
4
4
# Copyright (C) 2006 Wouter van Heyst
5
 
# Copyright (C) 2006-2008 Jelmer Vernooij <jelmer@samba.org>
 
5
# Copyright (C) 2006 Jelmer Vernooij
6
6
#
7
7
# Published under the GNU GPL
8
8
 
9
 
import gtk
10
9
import nautilus
11
10
import bzrlib
12
 
from bzrlib.branch import Branch
13
11
from bzrlib.bzrdir import BzrDir
14
 
from bzrlib.errors import NotBranchError, NoWorkingTree, UnsupportedProtocol
 
12
from bzrlib.errors import NotBranchError
 
13
from bzrlib.workingtree import WorkingTree
15
14
from bzrlib.tree import file_status
16
 
from bzrlib.workingtree import WorkingTree
17
 
from bzrlib.config import GlobalConfig
18
15
 
19
16
from bzrlib.plugin import load_plugins
20
17
load_plugins()
21
18
 
22
 
from bzrlib.plugins.gtk import _i18n, cmd_gannotate, start_viz_window
23
 
 
24
 
print "Bazaar nautilus module initialized"
25
 
 
 
19
from bzrlib.plugins.gtk import cmd_visualise, cmd_gannotate
26
20
 
27
21
class BzrExtension(nautilus.MenuProvider, nautilus.ColumnProvider, nautilus.InfoProvider):
28
22
    def __init__(self):
84
78
        except NotBranchError:
85
79
            return
86
80
 
87
 
        from bzrlib.plugins.gtk.diff import DiffWindow
 
81
        from bzrlib.plugins.gtk.viz.diff import DiffWindow
88
82
        window = DiffWindow()
89
 
        window.set_diff(tree.branch._get_nick(local=True), tree, 
90
 
                        tree.branch.basis_tree())
 
83
        window.set_diff(tree.branch.nick, tree, tree.branch.basis_tree())
91
84
        window.show()
92
85
 
93
86
        return
103
96
        try:
104
97
            tree, path = WorkingTree.open_containing(file)
105
98
        except NotBranchError:
106
 
            BzrDir.create_standalone_workingtree(file)
 
99
            BzrDir.create_branch_and_repo(file)
107
100
 
108
101
    def remove_cb(self, menu, vfs_file):
109
102
        # We can only cope with local files
136
129
        from bzrlib.plugins.gtk.branch import BranchDialog
137
130
        
138
131
        dialog = BranchDialog(vfs_file.get_name())
139
 
        response = dialog.run()
140
 
        if response != gtk.RESPONSE_NONE:
141
 
            dialog.hide()
142
 
            dialog.destroy()
 
132
        dialog.display()
143
133
 
144
134
    def commit_cb(self, menu, vfs_file=None):
145
135
        # We can only cope with local files
147
137
            return
148
138
 
149
139
        file = vfs_file.get_uri()
150
 
        tree = None
151
 
        branch = None
152
140
        try:
153
141
            tree, path = WorkingTree.open_containing(file)
154
 
            branch = tree.branch
155
 
        except NotBranchError, e:
156
 
            path = e.path
157
 
            #return
158
 
        except NoWorkingTree, e:
159
 
            path = e.base
160
 
            try:
161
 
                (branch, path) = Branch.open_containing(path)
162
 
            except NotBranchError, e:
163
 
                path = e.path
 
142
        except NotBranchError:
 
143
            return
164
144
 
165
145
        from bzrlib.plugins.gtk.commit import CommitDialog
166
146
        dialog = CommitDialog(tree, path)
167
 
        response = dialog.run()
168
 
        if response != gtk.RESPONSE_NONE:
169
 
            dialog.hide()
170
 
            dialog.destroy()
 
147
        dialog.display()
 
148
        gtk.main()
171
149
 
172
150
    def log_cb(self, menu, vfs_file):
173
151
        # We can only cope with local files
178
156
 
179
157
        # We only want to continue here if we get a NotBranchError
180
158
        try:
181
 
            branch, path = Branch.open_containing(file)
 
159
            tree, path = WorkingTree.open_containing(file)
182
160
        except NotBranchError:
183
161
            return
184
162
 
185
 
        pp = start_viz_window(branch, [branch.last_revision()])
186
 
        pp.show()
187
 
        gtk.main()
 
163
        vis = cmd_visualise()
 
164
        vis.run(file)
 
165
 
 
166
        return
188
167
 
189
168
    def pull_cb(self, menu, vfs_file):
190
169
        # We can only cope with local files
219
198
 
220
199
        from bzrlib.plugins.gtk.merge import MergeDialog
221
200
        dialog = MergeDialog(tree, path)
222
 
        dialog.run()
223
 
        dialog.destroy()
 
201
        dialog.display()
 
202
        gtk.main()
224
203
 
225
204
    def get_background_items(self, window, vfs_file):
226
205
        items = []
227
206
        file = vfs_file.get_uri()
228
 
 
229
207
        try:
230
208
            tree, path = WorkingTree.open_containing(file)
231
 
            disabled_flag = self.check_branch_enabled(tree.branch)
232
 
        except UnsupportedProtocol:
233
 
            return
234
209
        except NotBranchError:
235
 
            disabled_flag = self.check_branch_enabled()
236
210
            item = nautilus.MenuItem('BzrNautilus::newtree',
237
211
                                 'Make directory versioned',
238
212
                                 'Create new Bazaar tree in this folder')
240
214
            items.append(item)
241
215
 
242
216
            item = nautilus.MenuItem('BzrNautilus::clone',
243
 
                                 'Checkout Bazaar branch ...',
 
217
                                 'Checkout Bazaar branch',
244
218
                                 'Checkout Existing Bazaar Branch')
245
219
            item.connect('activate', self.clone_cb, vfs_file)
246
220
            items.append(item)
247
221
 
248
222
            return items
249
 
        except NoWorkingTree:
250
 
            return
251
 
        
252
 
        if disabled_flag == 'False':
253
 
            item = nautilus.MenuItem('BzrNautilus::enable',
254
 
                                     'Enable Bazaar Plugin for this Branch',
255
 
                                     'Enable Bazaar plugin for nautilus')
256
 
            item.connect('activate', self.toggle_integration, 'True', vfs_file)
257
 
            return item,
258
 
        else:
259
 
            item = nautilus.MenuItem('BzrNautilus::disable',
260
 
                                      'Disable Bazaar Plugin this Branch',
261
 
                                      'Disable Bazaar plugin for nautilus')
262
 
            item.connect('activate', self.toggle_integration, 'False', vfs_file)
263
 
            items.append(item)
264
223
 
265
224
        item = nautilus.MenuItem('BzrNautilus::log',
266
 
                             'History ...',
 
225
                             'Log',
267
226
                             'Show Bazaar history')
268
227
        item.connect('activate', self.log_cb, vfs_file)
269
228
        items.append(item)
270
229
 
271
230
        item = nautilus.MenuItem('BzrNautilus::pull',
272
 
                             'Pull ...',
 
231
                             'Pull',
273
232
                             'Pull from another branch')
274
233
        item.connect('activate', self.pull_cb, vfs_file)
275
234
        items.append(item)
276
235
 
277
236
        item = nautilus.MenuItem('BzrNautilus::merge',
278
 
                             'Merge ...',
 
237
                             'Merge',
279
238
                             'Merge from another branch')
280
239
        item.connect('activate', self.merge_cb, vfs_file)
281
240
        items.append(item)
282
241
 
283
242
        item = nautilus.MenuItem('BzrNautilus::commit',
284
 
                             'Commit ...',
 
243
                             'Commit',
285
244
                             'Commit Changes')
286
245
        item.connect('activate', self.commit_cb, vfs_file)
287
246
        items.append(item)
288
247
 
289
248
        return items
290
249
 
 
250
 
291
251
    def get_file_items(self, window, files):
292
252
        items = []
293
 
        
294
 
        wtfiles = {}
 
253
 
295
254
        for vfs_file in files:
296
255
            # We can only cope with local files
297
256
            if vfs_file.get_uri_scheme() != 'file':
298
 
                continue
 
257
                return
299
258
 
300
259
            file = vfs_file.get_uri()
301
260
            try:
302
261
                tree, path = WorkingTree.open_containing(file)
303
 
                disabled_flag = self.check_branch_enabled(tree.branch)
304
262
            except NotBranchError:
305
 
                disabled_flag = self.check_branch_enabled()
306
263
                if not vfs_file.is_directory():
307
 
                    continue
308
 
 
309
 
                if disabled_flag == 'False':
310
264
                    return
311
 
 
312
265
                item = nautilus.MenuItem('BzrNautilus::newtree',
313
266
                                     'Make directory versioned',
314
267
                                     'Create new Bazaar tree in %s' % vfs_file.get_name())
315
268
                item.connect('activate', self.newtree_cb, vfs_file)
316
269
                return item,
317
 
            except NoWorkingTree:
318
 
                continue
319
 
            # Refresh the list of filestatuses in the working tree
320
 
            if path not in wtfiles.keys():
321
 
                tree.lock_read()
322
 
                for rpath, file_class, kind, id, entry in tree.list_files():
323
 
                    wtfiles[rpath] = file_class
324
 
                tree.unlock()
325
 
                wtfiles[u''] = 'V'
326
 
 
327
 
            if wtfiles[path] == '?':
 
270
 
 
271
            file_class = tree.file_class(path)
 
272
 
 
273
            if file_class == '?':
328
274
                item = nautilus.MenuItem('BzrNautilus::add',
329
275
                                     'Add',
330
276
                                     'Add as versioned file')
336
282
                                     'Ignore file for versioning')
337
283
                item.connect('activate', self.ignore_cb, vfs_file)
338
284
                items.append(item)
339
 
            elif wtfiles[path] == 'I':
 
285
            elif file_class == 'I':
340
286
                item = nautilus.MenuItem('BzrNautilus::unignore',
341
287
                                     'Unignore',
342
288
                                     'Unignore file for versioning')
343
289
                item.connect('activate', self.unignore_cb, vfs_file)
344
290
                items.append(item)
345
 
            elif wtfiles[path] == 'V':
 
291
            elif file_class == 'V':
346
292
                item = nautilus.MenuItem('BzrNautilus::log',
347
 
                                 'History ...',
 
293
                                 'Log',
348
294
                                 'List changes')
349
295
                item.connect('activate', self.log_cb, vfs_file)
350
296
                items.append(item)
351
297
 
352
298
                item = nautilus.MenuItem('BzrNautilus::diff',
353
 
                                 'View Changes ...',
 
299
                                 'Diff',
354
300
                                 'Show differences')
355
301
                item.connect('activate', self.diff_cb, vfs_file)
356
302
                items.append(item)
362
308
                items.append(item)
363
309
 
364
310
                item = nautilus.MenuItem('BzrNautilus::annotate',
365
 
                             'Annotate ...',
 
311
                             'Annotate',
366
312
                             'Annotate File Data')
367
313
                item.connect('activate', self.annotate_cb, vfs_file)
368
314
                items.append(item)
369
315
 
370
316
                item = nautilus.MenuItem('BzrNautilus::commit',
371
 
                             'Commit ...',
 
317
                             'Commit',
372
318
                             'Commit Changes')
373
319
                item.connect('activate', self.commit_cb, vfs_file)
374
320
                items.append(item)
382
328
                               "Version control status"),
383
329
 
384
330
    def update_file_info(self, file):
385
 
 
386
331
        if file.get_uri_scheme() != 'file':
387
332
            return
388
333
        
390
335
            tree, path = WorkingTree.open_containing(file.get_uri())
391
336
        except NotBranchError:
392
337
            return
393
 
        except NoWorkingTree:
394
 
            return   
395
 
 
396
 
        disabled_flag = self.check_branch_enabled(tree.branch)
397
 
        if disabled_flag == 'False':
398
 
            return
399
338
 
400
339
        emblem = None
401
340
        status = None
402
341
 
403
342
        if tree.has_filename(path):
404
 
            emblem = 'bzr-controlled'
 
343
            emblem = 'cvs-controlled'
405
344
            status = 'unchanged'
406
345
            id = tree.path2id(path)
407
346
 
408
347
            delta = tree.changes_from(tree.branch.basis_tree())
409
348
            if delta.touches_file_id(id):
410
 
                emblem = 'bzr-modified'
 
349
                emblem = 'cvs-modified'
411
350
                status = 'modified'
412
351
            for f, _, _ in delta.added:
413
352
                if f == path:
414
 
                    emblem = 'bzr-added'
 
353
                    emblem = 'cvs-added'
415
354
                    status = 'added'
416
355
 
417
356
            for of, f, _, _, _, _ in delta.renamed:
419
358
                    status = 'renamed from %s' % f
420
359
 
421
360
        elif tree.branch.basis_tree().has_filename(path):
422
 
            emblem = 'bzr-removed'
 
361
            emblem = 'cvs-removed'
423
362
            status = 'removed'
424
363
        else:
425
364
            # FIXME: Check for ignored files
428
367
        if emblem is not None:
429
368
            file.add_emblem(emblem)
430
369
        file.add_string_attribute('bzr_status', status)
431
 
 
432
 
    def check_branch_enabled(self, branch=None):
433
 
        # Supports global disable, but there is currently no UI to do this
434
 
        config = GlobalConfig()
435
 
        disabled_flag = config.get_user_option('nautilus_integration')
436
 
        if disabled_flag != 'False':
437
 
            if branch is not None:
438
 
                config = branch.get_config()
439
 
                disabled_flag = config.get_user_option('nautilus_integration')
440
 
        return disabled_flag
441
 
 
442
 
    def toggle_integration(self, menu, action, vfs_file=None):
443
 
        try:
444
 
            tree, path = WorkingTree.open_containing(vfs_file.get_uri())
445
 
        except NotBranchError:
446
 
            return
447
 
        except NoWorkingTree:
448
 
            return
449
 
        branch = tree.branch
450
 
        if branch is None:
451
 
            config = GlobalConfig()
452
 
        else:
453
 
            config = branch.get_config()
454
 
        config.set_user_option('nautilus_integration', action)
455