mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-25 06:25:04 +00:00
Moved db_upgrade() to its source file.
This commit is contained in:
parent
77f3488279
commit
3e09c229e1
3 changed files with 80 additions and 68 deletions
3
Makefile
3
Makefile
|
@ -4,7 +4,8 @@ CFLAGS=-g -Wall
|
||||||
|
|
||||||
all: snac
|
all: snac
|
||||||
|
|
||||||
snac: snac.o main.o data.o http.o httpd.o webfinger.o activitypub.o html.o utils.o format.o
|
snac: snac.o main.o data.o http.o httpd.o webfinger.o \
|
||||||
|
activitypub.o html.o utils.o format.o upgrade.o
|
||||||
$(CC) $(CFLAGS) -L/usr/local/lib *.o -lcurl -lcrypto -pthread -o $@
|
$(CC) $(CFLAGS) -L/usr/local/lib *.o -lcurl -lcrypto -pthread -o $@
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
|
|
67
data.c
67
data.c
|
@ -1312,70 +1312,3 @@ void purge_all(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int db_upgrade(d_char **error)
|
|
||||||
{
|
|
||||||
int ret = 1;
|
|
||||||
int changed = 0;
|
|
||||||
double f = 0.0;
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
char *layout = xs_dict_get(srv_config, "layout");
|
|
||||||
double nf;
|
|
||||||
|
|
||||||
f = nf = xs_number_get(layout);
|
|
||||||
|
|
||||||
if (!(f < db_layout))
|
|
||||||
break;
|
|
||||||
|
|
||||||
srv_log(xs_fmt("db_upgrade %1.1lf < %1.1lf", f, db_layout));
|
|
||||||
|
|
||||||
if (f < 2.0) {
|
|
||||||
*error = xs_fmt("ERROR: unsupported old disk layout %1.1lf\n", f);
|
|
||||||
ret = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (f < 2.1) {
|
|
||||||
xs *dir = xs_fmt("%s/object", srv_basedir);
|
|
||||||
mkdir(dir, 0755);
|
|
||||||
|
|
||||||
nf = 2.1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (f < nf) {
|
|
||||||
f = nf;
|
|
||||||
xs *nv = xs_number_new(f);
|
|
||||||
srv_config = xs_dict_set(srv_config, "layout", nv);
|
|
||||||
|
|
||||||
srv_log(xs_fmt("db_upgrade converted to version %1.1lf", f));
|
|
||||||
changed++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (f > db_layout) {
|
|
||||||
*error = xs_fmt("ERROR: unknown future version %lf\n", f);
|
|
||||||
ret = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changed) {
|
|
||||||
/* upgrade the configuration file */
|
|
||||||
xs *fn = xs_fmt("%s/server.json", srv_basedir);
|
|
||||||
FILE *f;
|
|
||||||
|
|
||||||
if ((f = fopen(fn, "w")) != NULL) {
|
|
||||||
xs *j = xs_json_dumps_pp(srv_config, 4);
|
|
||||||
fwrite(j, strlen(j), 1, f);
|
|
||||||
fclose(f);
|
|
||||||
|
|
||||||
srv_log(xs_fmt("upgraded db %s after %d changes", fn, changed));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ret = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
78
upgrade.c
Normal file
78
upgrade.c
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
/* snac - A simple, minimalistic ActivityPub instance */
|
||||||
|
/* copyright (c) 2022 grunfink - MIT license */
|
||||||
|
|
||||||
|
#include "xs.h"
|
||||||
|
#include "xs_io.h"
|
||||||
|
#include "xs_json.h"
|
||||||
|
#include "xs_glob.h"
|
||||||
|
|
||||||
|
#include "snac.h"
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
|
||||||
|
int db_upgrade(d_char **error)
|
||||||
|
{
|
||||||
|
int ret = 1;
|
||||||
|
int changed = 0;
|
||||||
|
double f = 0.0;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
char *layout = xs_dict_get(srv_config, "layout");
|
||||||
|
double nf;
|
||||||
|
|
||||||
|
f = nf = xs_number_get(layout);
|
||||||
|
|
||||||
|
if (!(f < db_layout))
|
||||||
|
break;
|
||||||
|
|
||||||
|
srv_log(xs_fmt("db_upgrade %1.1lf < %1.1lf", f, db_layout));
|
||||||
|
|
||||||
|
if (f < 2.0) {
|
||||||
|
*error = xs_fmt("ERROR: unsupported old disk layout %1.1lf\n", f);
|
||||||
|
ret = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (f < 2.1) {
|
||||||
|
xs *dir = xs_fmt("%s/object", srv_basedir);
|
||||||
|
mkdir(dir, 0755);
|
||||||
|
|
||||||
|
nf = 2.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (f < nf) {
|
||||||
|
f = nf;
|
||||||
|
xs *nv = xs_number_new(f);
|
||||||
|
srv_config = xs_dict_set(srv_config, "layout", nv);
|
||||||
|
|
||||||
|
srv_log(xs_fmt("db_upgrade converted to version %1.1lf", f));
|
||||||
|
changed++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (f > db_layout) {
|
||||||
|
*error = xs_fmt("ERROR: unknown future version %lf\n", f);
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed) {
|
||||||
|
/* upgrade the configuration file */
|
||||||
|
xs *fn = xs_fmt("%s/server.json", srv_basedir);
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
if ((f = fopen(fn, "w")) != NULL) {
|
||||||
|
xs *j = xs_json_dumps_pp(srv_config, 4);
|
||||||
|
fwrite(j, strlen(j), 1, f);
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
srv_log(xs_fmt("upgraded db %s after %d changes", fn, changed));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
Loading…
Reference in a new issue