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 ""), so use cgi.escape instead
18
from cgi import escape as markup_escape_text
20
from gobject import markup_escape_text
16
23
from mercurial import demandimport
17
24
except ImportError:
52
58
nofilecmds = 'about serve synch repoconfig userconfig merge unmerge'.split()
55
class HgExtension(nautilus.MenuProvider,
56
nautilus.ColumnProvider,
57
nautilus.InfoProvider,
58
nautilus.PropertyPageProvider):
60
class HgExtensionDefault:
60
62
def __init__(self):
61
63
self.scanStack = []
228
230
emblem, status = cache2state.get(cachestate, (None, '?'))
229
231
return emblem, status
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)
237
def fileinfo_on_idle(self):
238
'''Update emblem and hg status for files when there is time'''
239
if not self.scanStack:
242
vfs_file = self.scanStack.pop()
243
path = self.get_path_for_vfs_file(vfs_file, False)
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:
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()
364
338
self.table.show()
365
339
return nautilus.PropertyPage("MercurialPropertyPage::status",
366
340
self.property_label, self.table),
342
class HgExtensionIcons(HgExtensionDefault):
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)
350
def fileinfo_on_idle(self):
351
'''Update emblem and hg status for files when there is time'''
352
if not self.scanStack:
355
vfs_file = self.scanStack.pop()
356
path = self.get_path_for_vfs_file(vfs_file, False)
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:
372
if ui.ui().configbool("tortoisehg", "overlayicons", default = True):
373
class HgExtension(HgExtensionIcons, nautilus.MenuProvider, nautilus.ColumnProvider, nautilus.PropertyPageProvider, nautilus.InfoProvider):
376
class HgExtension(HgExtensionDefault, nautilus.MenuProvider, nautilus.ColumnProvider, nautilus.PropertyPageProvider):