commit 45be9a1
default
·
2022-11-25 09:53:16 +0000 UTC
parent 8a71e2e
New command-line command 'upgrade'.
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 {