commit 45be9a1

default  ·  2022-11-25 09:53:16 +0000 UTC
parent 8a71e2e
New command-line command 'upgrade'.
3 files changed,  +25, -4
M data.c
M main.c
M snac.h
M data.c
+9, -2
 1@@ -19,7 +19,7 @@ double db_layout = 2.3;
 2 
 3 int db_upgrade(d_char **error);
 4 
 5-int srv_open(char *basedir)
 6+int srv_open(char *basedir, int auto_upgrade)
 7 /* opens a server */
 8 {
 9     int ret = 0;
10@@ -69,7 +69,14 @@ int srv_open(char *basedir)
11                     error = xs_fmt("DEBUG level set to %d from environment", dbglevel);
12                 }
13 
14-                ret = db_upgrade(&error);
15+                if (auto_upgrade)
16+                    ret = db_upgrade(&error);
17+                else {
18+                    if (xs_number_get(xs_dict_get(srv_config, "layout")) < db_layout) {
19+                        ret   = 0;
20+                        error = xs_fmt("ERROR: db layout changed - execute 'snac upgrade' first");
21+                    }
22+                }
23             }
24 
25         }
M main.c
+15, -1
 1@@ -16,6 +16,7 @@ int usage(void)
 2     printf("Commands:\n");
 3     printf("\n");
 4     printf("init [{basedir}]                 Initializes the database\n");
 5+    printf("upgrade {basedir}                Upgrade to a new version\n");
 6     printf("adduser {basedir} [{uid}]        Adds a new user\n");
 7     printf("httpd {basedir}                  Starts the HTTPD daemon\n");
 8     printf("purge {basedir}                  Purges old data\n");
 9@@ -76,6 +77,19 @@ int main(int argc, char *argv[])
10         return initdb(basedir);
11     }
12 
13+    if (strcmp(cmd, "upgrade") == 0) {
14+        int ret;
15+
16+        /* database upgrade */
17+        if ((basedir = GET_ARGV()) == NULL)
18+            return usage();
19+
20+        if ((ret = srv_open(basedir, 1)) == 1)
21+            srv_log(xs_dup("OK"));
22+
23+        return ret;
24+    }
25+
26     if (strcmp(cmd, "markdown") == 0) {
27         /* undocumented, for testing only */
28         xs *c = xs_readall(stdin);
29@@ -88,7 +102,7 @@ int main(int argc, char *argv[])
30     if ((basedir = GET_ARGV()) == NULL)
31         return usage();
32 
33-    if (!srv_open(basedir)) {
34+    if (!srv_open(basedir, 0)) {
35         srv_log(xs_fmt("error opening database at %s", basedir));
36         return 1;
37     }
M snac.h
+1, -1
1@@ -24,7 +24,7 @@ double ftime(void);
2 void srv_debug(int level, d_char *str);
3 #define srv_log(str) srv_debug(0, str)
4 
5-int srv_open(char *basedir);
6+int srv_open(char *basedir, int auto_upgrade);
7 void srv_free(void);
8 
9 typedef struct _snac {