~ubuntu-branches/debian/sid/tortoisehg/sid

« back to all changes in this revision

Viewing changes to contrib/nautilus-thg.py

  • Committer: Bazaar Package Importer
  • Author(s): Ludovico Cavedon
  • Date: 2011-02-15 14:45:53 UTC
  • mfrom: (1.2.1 upstream) (13.1.4 experimental)
  • Revision ID: james.westby@ubuntu.com-20110215144553-ly46mhc1v0wb9v83
Tags: 1.1.9.1-1
* Upload to unstable.
* New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
import os
13
13
import sys
14
14
 
 
15
if gtk.gtk_version < (2, 14, 0):
 
16
    # at least on 2.12.12, gtk widgets can be confused by control
 
17
    # char markups (like "&#x1;"), so use cgi.escape instead
 
18
    from cgi import escape as markup_escape_text
 
19
else:
 
20
    from gobject import markup_escape_text
 
21
 
15
22
try:
16
23
    from mercurial import demandimport
17
24
except ImportError:
41
48
_thg_path()
42
49
 
43
50
from tortoisehg.util import paths, debugthg, cachethg
44
 
from tortoisehg.hgtk import gtklib
45
51
 
46
52
if debugthg.debug('N'):
47
53
    debugf = debugthg.debugf
51
57
 
52
58
nofilecmds = 'about serve synch repoconfig userconfig merge unmerge'.split()
53
59
 
54
 
 
55
 
class HgExtension(nautilus.MenuProvider,
56
 
                  nautilus.ColumnProvider,
57
 
                  nautilus.InfoProvider,
58
 
                  nautilus.PropertyPageProvider):
 
60
class HgExtensionDefault:
59
61
 
60
62
    def __init__(self):
61
63
        self.scanStack = []
228
230
        emblem, status = cache2state.get(cachestate, (None, '?'))
229
231
        return emblem, status
230
232
 
231
 
    def update_file_info(self, file):
232
 
        '''Queue file for emblem and hg status update'''
233
 
        self.scanStack.append(file)
234
 
        if len(self.scanStack) == 1:
235
 
            gobject.idle_add(self.fileinfo_on_idle)
236
 
 
237
 
    def fileinfo_on_idle(self):
238
 
        '''Update emblem and hg status for files when there is time'''
239
 
        if not self.scanStack:
240
 
            return False
241
 
        try:
242
 
            vfs_file = self.scanStack.pop()
243
 
            path = self.get_path_for_vfs_file(vfs_file, False)
244
 
            if not path:
245
 
                return True
246
 
            oldvfs = self.get_vfs(path)
247
 
            if oldvfs and oldvfs != vfs_file:
248
 
                #file has changed on disc (not invalidated)
249
 
                self.get_path_for_vfs_file(vfs_file) #save new vfs
250
 
                self.invalidate([os.path.dirname(path)])
251
 
            emblem, status = self._get_file_status(path)
252
 
            if emblem is not None:
253
 
                vfs_file.add_emblem(emblem)
254
 
            vfs_file.add_string_attribute('hg_status', status)
255
 
        except StandardError, e:
256
 
            debugf(e)
257
 
        return True
258
 
 
259
233
    def notified(self, mon_uri=None, event_uri=None, event=None):
260
234
        debugf('notified from hgtk, %s', event, level='n')
261
235
        f = open(self.notify, 'a+')
340
314
        parents = '\n'.join([short(p.node()) for p in ctx.parents()])
341
315
        description = ctx.description()
342
316
        user = ctx.user()
343
 
        user = gtklib.markup_escape_text(user)
 
317
        user = markup_escape_text(user)
344
318
        tags = ', '.join(ctx.tags())
345
319
        branch = ctx.branch()
346
320
 
364
338
        self.table.show()
365
339
        return nautilus.PropertyPage("MercurialPropertyPage::status",
366
340
                                     self.property_label, self.table),
 
341
 
 
342
class HgExtensionIcons(HgExtensionDefault):
 
343
 
 
344
    def update_file_info(self, file):
 
345
        '''Queue file for emblem and hg status update'''
 
346
        self.scanStack.append(file)
 
347
        if len(self.scanStack) == 1:
 
348
            gobject.idle_add(self.fileinfo_on_idle)
 
349
 
 
350
    def fileinfo_on_idle(self):
 
351
        '''Update emblem and hg status for files when there is time'''
 
352
        if not self.scanStack:
 
353
            return False
 
354
        try:
 
355
            vfs_file = self.scanStack.pop()
 
356
            path = self.get_path_for_vfs_file(vfs_file, False)
 
357
            if not path:
 
358
                return True
 
359
            oldvfs = self.get_vfs(path)
 
360
            if oldvfs and oldvfs != vfs_file:
 
361
                #file has changed on disc (not invalidated)
 
362
                self.get_path_for_vfs_file(vfs_file) #save new vfs
 
363
                self.invalidate([os.path.dirname(path)])
 
364
            emblem, status = self._get_file_status(path)
 
365
            if emblem is not None:
 
366
                vfs_file.add_emblem(emblem)
 
367
            vfs_file.add_string_attribute('hg_status', status)
 
368
        except StandardError, e:
 
369
            debugf(e)
 
370
        return True
 
371
 
 
372
if ui.ui().configbool("tortoisehg", "overlayicons", default = True):
 
373
        class HgExtension(HgExtensionIcons, nautilus.MenuProvider, nautilus.ColumnProvider, nautilus.PropertyPageProvider, nautilus.InfoProvider):
 
374
                pass
 
375
else:
 
376
        class HgExtension(HgExtensionDefault, nautilus.MenuProvider, nautilus.ColumnProvider, nautilus.PropertyPageProvider):
 
377
                pass