Re-introduce version compatibility check
authorJack Miller <jack@codezen.org>
Mon, 10 Nov 2014 17:01:48 +0000 (11:01 -0600)
committerJack Miller <jack@codezen.org>
Mon, 10 Nov 2014 17:01:48 +0000 (11:01 -0600)
canto_curses/config.py
canto_curses/main.py

index f16c46c..f5480f2 100644 (file)
@@ -75,7 +75,7 @@ class CantoCursesConfig(SubThread):
     # No __init__ because we want this to be global, but init must be called
     # with a connection to the daemon, so we call .init() manually.
 
-    def init(self, backend):
+    def init(self, backend, compatible_version):
         SubThread.init(self, backend)
 
         self.initd = False
@@ -467,6 +467,9 @@ class CantoCursesConfig(SubThread):
 
         self.start_pthread()
 
+        self.version = None
+        self.write("VERSION", [])
+
         self.write("WATCHNEWTAGS", [])
         self.write("WATCHDELTAGS", [])
         self.write("LISTTAGS", "")
@@ -477,9 +480,17 @@ class CantoCursesConfig(SubThread):
         # takes virtually no time and makes it so that we don't have to 
         # check if we're init'd before using *_opt functions.
 
+        while (not self.version):
+            pass
+
+        if self.version != compatible_version:
+            return False
+
         while(not self.initd):
             pass
 
+        return True
+
     def validate_uint(self, val, d):
         if type(val) == int and val >= 0:
             return (True, val)
@@ -741,6 +752,9 @@ class CantoCursesConfig(SubThread):
         self.vars["strtags"] = tags
         self.config["tagorder"] = tags
 
+    def prot_version(self, version):
+        self.version = version
+
     # configs accepts any changes, calls the opt_change hooks and if write is
     # set, sends those changes to the daemon. It's called both when receving
     # CONFIGS from the daemon and when we change opts internally (thus the
index 602c8bd..f438992 100644 (file)
@@ -6,6 +6,8 @@
 #   it under the terms of the GNU General Public License version 2 as 
 #   published by the Free Software Foundation.
 
+CANTO_PROTOCOL_COMPATIBLE = 0.9
+
 from canto_next.client import CantoClient
 from canto_next.plugins import try_plugins
 from canto_next.rwlock import alllocks
@@ -192,7 +194,13 @@ class CantoCurses(CantoClient):
         signal.signal(signal.SIGUSR1, self.sigusr1)
 
         # Get config from daemon
-        config.init(self)
+        if not config.init(self, CANTO_PROTOCOL_COMPATIBLE):
+            print("Invalid daemon version")
+            print("Wanted: %s" % CANTO_PROTOCOL_COMPATIBLE)
+            print("Got: %s" % config.version)
+            sys.exit(-1)
+        else:
+            log.info("Version check passed: %s" % CANTO_PROTOCOL_COMPATIBLE)
 
         # Make TagCores for each tag
         tag_updater.init(self)