##// END OF EJS Templates
hgweb: removed unnecessary del before function return...
hgweb: removed unnecessary del before function return Deleting tmpl just before the return statement should have no effect since tmpl goes out of scope anyway. But it confuses pyflakes who thinks tmpl is undefined when it is used in the except blocks below.

File last commit:

r6753:ed5ffb2c default
r6914:95f35b55 default
Show More
__init__.py
103 lines | 3.7 KiB | text/x-python | PythonLexer
Bryan O'Sullivan
Add inotify extension
r6239 # __init__.py - inotify-based status acceleration for Linux
#
# Copyright 2006, 2007, 2008 Bryan O'Sullivan <bos@serpentine.com>
# Copyright 2007, 2008 Brendan Cully <brendan@kublai.com>
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
'''inotify-based status acceleration for Linux systems
'''
# todo: socket permissions
from mercurial.i18n import gettext as _
from mercurial import cmdutil, util
import client, errno, os, server, socket
from weakref import proxy
def serve(ui, repo, **opts):
'''start an inotify server for this repository'''
timeout = opts.get('timeout')
if timeout:
timeout = float(timeout) * 1e3
class service:
def init(self):
self.master = server.Master(ui, repo, timeout)
def run(self):
try:
self.master.run()
finally:
self.master.shutdown()
service = service()
cmdutil.service(opts, initfn=service.init, runfn=service.run)
def reposetup(ui, repo):
if not repo.local():
return
# XXX: weakref until hg stops relying on __del__
repo = proxy(repo)
class inotifydirstate(repo.dirstate.__class__):
# Set to True if we're the inotify server, so we don't attempt
# to recurse.
inotifyserver = False
Matt Mackall
repo.status: eliminate list_
r6753 def status(self, match, ignored, clean, unknown=True):
Matt Mackall
match: remove files arg from repo.status and friends
r6603 files = match.files()
Bryan O'Sullivan
Add inotify extension
r6239 try:
Matt Mackall
repo.status: eliminate list_
r6753 if not ignored and not self.inotifyserver:
Bryan O'Sullivan
Add inotify extension
r6239 result = client.query(ui, repo, files, match, False,
Matt Mackall
repo.status: eliminate list_
r6753 clean, unknown)
Bryan O'Sullivan
Add inotify extension
r6239 if result is not None:
return result
except socket.error, err:
if err[0] == errno.ECONNREFUSED:
ui.warn(_('(found dead inotify server socket; '
'removing it)\n'))
os.unlink(repo.join('inotify.sock'))
elif err[0] != errno.ENOENT:
raise
if ui.configbool('inotify', 'autostart'):
query = None
ui.debug(_('(starting inotify server)\n'))
try:
server.start(ui, repo)
query = client.query
except server.AlreadyStartedException, inst:
# another process may have started its own
# inotify server while this one was starting.
ui.debug(str(inst))
query = client.query
except Exception, inst:
ui.warn(_('could not start inotify server: '
'%s\n') % inst)
ui.print_exc()
if query:
try:
return query(ui, repo, files or [], match,
Matt Mackall
repo.status: eliminate list_
r6753 ignored, clean, unknown)
Bryan O'Sullivan
Add inotify extension
r6239 except socket.error, err:
ui.warn(_('could not talk to new inotify '
'server: %s\n') % err[1])
ui.print_exc()
return super(inotifydirstate, self).status(
Matt Mackall
repo.status: eliminate list_
r6753 match, ignored, clean, unknown)
Bryan O'Sullivan
Add inotify extension
r6239
repo.dirstate.__class__ = inotifydirstate
cmdtable = {
'^inserve':
(serve,
[('d', 'daemon', None, _('run server in background')),
('', 'daemon-pipefds', '', _('used internally by daemon mode')),
('t', 'idle-timeout', '', _('minutes to sit idle before exiting')),
('', 'pid-file', '', _('name of file to write process ID to'))],
_('hg inserve [OPT]...')),
}