app/django/utils/autoreload.py
changeset 323 ff1a9aa48cfd
parent 54 03e267d67478
--- a/app/django/utils/autoreload.py	Tue Oct 14 12:36:55 2008 +0000
+++ b/app/django/utils/autoreload.py	Tue Oct 14 16:00:59 2008 +0000
@@ -45,24 +45,32 @@
 
 RUN_RELOADER = True
 
+_mtimes = {}
+_win = (sys.platform == "win32")
+
+def code_changed():
+    global _mtimes, _win
+    for filename in filter(lambda v: v, map(lambda m: getattr(m, "__file__", None), sys.modules.values())):
+        if filename.endswith(".pyc") or filename.endswith(".pyo"):
+            filename = filename[:-1]
+        if not os.path.exists(filename):
+            continue # File might be in an egg, so it can't be reloaded.
+        stat = os.stat(filename)
+        mtime = stat.st_mtime
+        if _win:
+            mtime -= stat.st_ctime
+        if filename not in _mtimes:
+            _mtimes[filename] = mtime
+            continue
+        if mtime != _mtimes[filename]:
+            _mtimes = {}
+            return True
+    return False
+
 def reloader_thread():
-    mtimes = {}
-    win = (sys.platform == "win32")
     while RUN_RELOADER:
-        for filename in filter(lambda v: v, map(lambda m: getattr(m, "__file__", None), sys.modules.values())):
-            if filename.endswith(".pyc") or filename.endswith("*.pyo"):
-                filename = filename[:-1]
-            if not os.path.exists(filename):
-                continue # File might be in an egg, so it can't be reloaded.
-            stat = os.stat(filename)
-            mtime = stat.st_mtime
-            if win:
-                mtime -= stat.st_ctime
-            if filename not in mtimes:
-                mtimes[filename] = mtime
-                continue
-            if mtime != mtimes[filename]:
-                sys.exit(3) # force reload
+        if code_changed():
+            sys.exit(3) # force reload
         time.sleep(1)
 
 def restart_with_reloader():
@@ -76,12 +84,8 @@
         if exit_code != 3:
             return exit_code
 
-def main(main_func, args=None, kwargs=None):
+def python_reloader(main_func, args, kwargs):
     if os.environ.get("RUN_MAIN") == "true":
-        if args is None:
-            args = ()
-        if kwargs is None:
-            kwargs = {}
         thread.start_new_thread(main_func, args, kwargs)
         try:
             reloader_thread()
@@ -92,3 +96,24 @@
             sys.exit(restart_with_reloader())
         except KeyboardInterrupt:
             pass
+
+def jython_reloader(main_func, args, kwargs):
+    from _systemrestart import SystemRestart
+    thread.start_new_thread(main_func, args)
+    while True:
+        if code_changed():
+            raise SystemRestart
+        time.sleep(1)
+
+
+def main(main_func, args=None, kwargs=None):
+    if args is None:
+        args = ()
+    if kwargs is None:
+        kwargs = {}
+    if sys.platform.startswith('java'):
+        reloader = jython_reloader
+    else:
+        reloader = python_reloader
+    reloader(main_func, args, kwargs)
+