diff options
| author | 2022-11-25 10:53:16 +0100 | |
|---|---|---|
| committer | 2022-11-25 10:53:16 +0100 | |
| commit | 45be9a1cb1971786c72f82f8d236edbdfd662b84 (patch) | |
| tree | de1d978eadb79ec87f27fa3538784e5cf5d4384b | |
| parent | Only log the object_admire() if it's new. (diff) | |
| download | snac2-45be9a1cb1971786c72f82f8d236edbdfd662b84.tar.gz snac2-45be9a1cb1971786c72f82f8d236edbdfd662b84.tar.xz snac2-45be9a1cb1971786c72f82f8d236edbdfd662b84.zip | |
New command-line command 'upgrade'.
| -rw-r--r-- | data.c | 11 | ||||
| -rw-r--r-- | main.c | 16 | ||||
| -rw-r--r-- | snac.h | 2 |
3 files changed, 25 insertions, 4 deletions
| @@ -19,7 +19,7 @@ double db_layout = 2.3; | |||
| 19 | 19 | ||
| 20 | int db_upgrade(d_char **error); | 20 | int db_upgrade(d_char **error); |
| 21 | 21 | ||
| 22 | int srv_open(char *basedir) | 22 | int srv_open(char *basedir, int auto_upgrade) |
| 23 | /* opens a server */ | 23 | /* opens a server */ |
| 24 | { | 24 | { |
| 25 | int ret = 0; | 25 | int ret = 0; |
| @@ -69,7 +69,14 @@ int srv_open(char *basedir) | |||
| 69 | error = xs_fmt("DEBUG level set to %d from environment", dbglevel); | 69 | error = xs_fmt("DEBUG level set to %d from environment", dbglevel); |
| 70 | } | 70 | } |
| 71 | 71 | ||
| 72 | ret = db_upgrade(&error); | 72 | if (auto_upgrade) |
| 73 | ret = db_upgrade(&error); | ||
| 74 | else { | ||
| 75 | if (xs_number_get(xs_dict_get(srv_config, "layout")) < db_layout) { | ||
| 76 | ret = 0; | ||
| 77 | error = xs_fmt("ERROR: db layout changed - execute 'snac upgrade' first"); | ||
| 78 | } | ||
| 79 | } | ||
| 73 | } | 80 | } |
| 74 | 81 | ||
| 75 | } | 82 | } |
| @@ -16,6 +16,7 @@ int usage(void) | |||
| 16 | printf("Commands:\n"); | 16 | printf("Commands:\n"); |
| 17 | printf("\n"); | 17 | printf("\n"); |
| 18 | printf("init [{basedir}] Initializes the database\n"); | 18 | printf("init [{basedir}] Initializes the database\n"); |
| 19 | printf("upgrade {basedir} Upgrade to a new version\n"); | ||
| 19 | printf("adduser {basedir} [{uid}] Adds a new user\n"); | 20 | printf("adduser {basedir} [{uid}] Adds a new user\n"); |
| 20 | printf("httpd {basedir} Starts the HTTPD daemon\n"); | 21 | printf("httpd {basedir} Starts the HTTPD daemon\n"); |
| 21 | printf("purge {basedir} Purges old data\n"); | 22 | printf("purge {basedir} Purges old data\n"); |
| @@ -76,6 +77,19 @@ int main(int argc, char *argv[]) | |||
| 76 | return initdb(basedir); | 77 | return initdb(basedir); |
| 77 | } | 78 | } |
| 78 | 79 | ||
| 80 | if (strcmp(cmd, "upgrade") == 0) { | ||
| 81 | int ret; | ||
| 82 | |||
| 83 | /* database upgrade */ | ||
| 84 | if ((basedir = GET_ARGV()) == NULL) | ||
| 85 | return usage(); | ||
| 86 | |||
| 87 | if ((ret = srv_open(basedir, 1)) == 1) | ||
| 88 | srv_log(xs_dup("OK")); | ||
| 89 | |||
| 90 | return ret; | ||
| 91 | } | ||
| 92 | |||
| 79 | if (strcmp(cmd, "markdown") == 0) { | 93 | if (strcmp(cmd, "markdown") == 0) { |
| 80 | /* undocumented, for testing only */ | 94 | /* undocumented, for testing only */ |
| 81 | xs *c = xs_readall(stdin); | 95 | xs *c = xs_readall(stdin); |
| @@ -88,7 +102,7 @@ int main(int argc, char *argv[]) | |||
| 88 | if ((basedir = GET_ARGV()) == NULL) | 102 | if ((basedir = GET_ARGV()) == NULL) |
| 89 | return usage(); | 103 | return usage(); |
| 90 | 104 | ||
| 91 | if (!srv_open(basedir)) { | 105 | if (!srv_open(basedir, 0)) { |
| 92 | srv_log(xs_fmt("error opening database at %s", basedir)); | 106 | srv_log(xs_fmt("error opening database at %s", basedir)); |
| 93 | return 1; | 107 | return 1; |
| 94 | } | 108 | } |
| @@ -24,7 +24,7 @@ double ftime(void); | |||
| 24 | void srv_debug(int level, d_char *str); | 24 | void srv_debug(int level, d_char *str); |
| 25 | #define srv_log(str) srv_debug(0, str) | 25 | #define srv_log(str) srv_debug(0, str) |
| 26 | 26 | ||
| 27 | int srv_open(char *basedir); | 27 | int srv_open(char *basedir, int auto_upgrade); |
| 28 | void srv_free(void); | 28 | void srv_free(void); |
| 29 | 29 | ||
| 30 | typedef struct _snac { | 30 | typedef struct _snac { |