|
|
@@ -4,25 +4,34 @@ import sys
|
|
|
import thread
|
|
|
|
|
|
def init(server):
|
|
|
- thread.start_new_thread(_reload, (server,))
|
|
|
+ thread.start_new_thread(_reloader, (server,))
|
|
|
|
|
|
-def _reload(server):
|
|
|
+def _reloader(server):
|
|
|
import inotifyx
|
|
|
|
|
|
fd = inotifyx.init()
|
|
|
rootdir = path.dirname(path.abspath(__file__))
|
|
|
for dirpath, _, _ in os.walk(rootdir):
|
|
|
inotifyx.add_watch(fd, dirpath, inotifyx.IN_CLOSE_WRITE)
|
|
|
+ config_path = path.normpath(path.join(rootdir, '..', 'config.py'))
|
|
|
+ config_wd = inotifyx.add_watch(fd, config_path, inotifyx.IN_CLOSE_WRITE)
|
|
|
|
|
|
while True:
|
|
|
events = inotifyx.get_events(fd)
|
|
|
for event in events:
|
|
|
if event.name == '4913': # https://code.google.com/p/vim/source/browse/src/fileio.c?spec=svn94df797ed6b03d5387b5ed7526f8c65024112822&r=29eb4c2a33ac701bfcd4d2e2bed7864eba876e0e#3767
|
|
|
continue
|
|
|
+ elif event.name is None and event.wd == config_wd:
|
|
|
+ print 'config.py changed, reloading...'
|
|
|
+ do_reload(fd, server)
|
|
|
+ return
|
|
|
elif event.name.endswith('.py'):
|
|
|
print event.name, 'changed, reloading...'
|
|
|
- os.close(fd)
|
|
|
- server.stop()
|
|
|
- os.closerange(sys.stderr.fileno()+1, os.sysconf('SC_OPEN_MAX')) # close keep-alive client sockets
|
|
|
- os.execv(sys.argv[0], sys.argv)
|
|
|
+ do_reload(fd, server)
|
|
|
return
|
|
|
+
|
|
|
+def do_reload(fd, server):
|
|
|
+ os.close(fd)
|
|
|
+ server.stop()
|
|
|
+ os.closerange(sys.stderr.fileno()+1, os.sysconf('SC_OPEN_MAX')) # close keep-alive client sockets
|
|
|
+ os.execv(sys.argv[0], sys.argv)
|