##// END OF EJS Templates
inotify: skip deactivation message
Matt Mackall -
r7083:9dcce703 default
parent child Browse files
Show More
@@ -1,109 +1,108 b''
1 1 # __init__.py - inotify-based status acceleration for Linux
2 2 #
3 3 # Copyright 2006, 2007, 2008 Bryan O'Sullivan <bos@serpentine.com>
4 4 # Copyright 2007, 2008 Brendan Cully <brendan@kublai.com>
5 5 #
6 6 # This software may be used and distributed according to the terms
7 7 # of the GNU General Public License, incorporated herein by reference.
8 8
9 9 '''inotify-based status acceleration for Linux systems
10 10 '''
11 11
12 12 # todo: socket permissions
13 13
14 14 from mercurial.i18n import gettext as _
15 15 from mercurial import cmdutil, util
16 16 import client, errno, os, server, socket
17 17 from weakref import proxy
18 18
19 19 def serve(ui, repo, **opts):
20 20 '''start an inotify server for this repository'''
21 21 timeout = opts.get('timeout')
22 22 if timeout:
23 23 timeout = float(timeout) * 1e3
24 24
25 25 class service:
26 26 def init(self):
27 27 try:
28 28 self.master = server.Master(ui, repo, timeout)
29 29 except server.AlreadyStartedException, inst:
30 30 raise util.Abort(str(inst))
31 31
32 32 def run(self):
33 33 try:
34 34 self.master.run()
35 35 finally:
36 36 self.master.shutdown()
37 37
38 38 service = service()
39 39 cmdutil.service(opts, initfn=service.init, runfn=service.run)
40 40
41 41 def reposetup(ui, repo):
42 42 if not repo.local():
43 43 return
44 44
45 45 # XXX: weakref until hg stops relying on __del__
46 46 repo = proxy(repo)
47 47
48 48 class inotifydirstate(repo.dirstate.__class__):
49 49 # Set to True if we're the inotify server, so we don't attempt
50 50 # to recurse.
51 51 inotifyserver = False
52 52
53 53 def status(self, match, ignored, clean, unknown=True):
54 54 files = match.files()
55 55 try:
56 56 if not ignored and not self.inotifyserver:
57 57 result = client.query(ui, repo, files, match, False,
58 58 clean, unknown)
59 59 if result is not None:
60 60 return result
61 61 except (OSError, socket.error), err:
62 62 if err[0] == errno.ECONNREFUSED:
63 63 ui.warn(_('(found dead inotify server socket; '
64 64 'removing it)\n'))
65 65 os.unlink(repo.join('inotify.sock'))
66 66 if err[0] in (errno.ECONNREFUSED, errno.ENOENT) and \
67 67 ui.configbool('inotify', 'autostart'):
68 68 query = None
69 69 ui.debug(_('(starting inotify server)\n'))
70 70 try:
71 71 server.start(ui, repo)
72 72 query = client.query
73 73 except server.AlreadyStartedException, inst:
74 74 # another process may have started its own
75 75 # inotify server while this one was starting.
76 76 ui.debug(str(inst))
77 77 query = client.query
78 78 except Exception, inst:
79 79 ui.warn(_('could not start inotify server: '
80 80 '%s\n') % inst)
81 81 if query:
82 82 try:
83 83 return query(ui, repo, files or [], match,
84 84 ignored, clean, unknown)
85 85 except socket.error, err:
86 86 ui.warn(_('could not talk to new inotify '
87 87 'server: %s\n') % err[-1])
88 88 else:
89 89 ui.warn(_('failed to contact inotify server: %s\n')
90 90 % err[-1])
91 91 ui.print_exc()
92 92 # replace by old status function
93 ui.warn(_('deactivating inotify\n'))
94 93 self.status = super(inotifydirstate, self).status
95 94
96 95 return super(inotifydirstate, self).status(
97 96 match, ignored, clean, unknown)
98 97
99 98 repo.dirstate.__class__ = inotifydirstate
100 99
101 100 cmdtable = {
102 101 '^inserve':
103 102 (serve,
104 103 [('d', 'daemon', None, _('run server in background')),
105 104 ('', 'daemon-pipefds', '', _('used internally by daemon mode')),
106 105 ('t', 'idle-timeout', '', _('minutes to sit idle before exiting')),
107 106 ('', 'pid-file', '', _('name of file to write process ID to'))],
108 107 _('hg inserve [OPT]...')),
109 108 }
@@ -1,7 +1,6 b''
1 1 % fail
2 2 failed to contact inotify server: No such file or directory
3 deactivating inotify
4 3 abort: could not start server: File exists
5 4 % inserve
6 5 % status
7 6 ? hg.pid
General Comments 0
You need to be logged in to leave comments. Login now