From ebf148d99e2dab6135794149553c193abe4e675d Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Sun, 18 Oct 2026 00:30:27 +0000 Subject: Part four: we delete all the snapshots after set-install Except the snapshot corresponding to the new live db, of course. Also, in order to accommodate snapshots without risking name conflicts, the real name of set foobar isn't .foobar:XXXXXX anymore, but .real.foobar:XXXXXX Now the automatic upgrade in case of major bump is complete. Next comes testing and debugging. --- src/repo/s6-rc-set-install.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'src/repo/s6-rc-set-install.c') diff --git a/src/repo/s6-rc-set-install.c b/src/repo/s6-rc-set-install.c index 3940aba..8a07446 100644 --- a/src/repo/s6-rc-set-install.c +++ b/src/repo/s6-rc-set-install.c @@ -4,11 +4,11 @@ #include #include +#include #include #include #include #include -#include #include #include @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -51,6 +52,29 @@ enum gola_e #define DSTFNLEN(bootdir, set) (strlen(bootdir) + strlen(set) + 36) +static void remove_snapshots_except (char const *repo, char const *snap) +{ + DIR *dir ; + size_t repolen = strlen(repo) ; + char src[repolen + 9] ; + memcpy(src, repo, repolen) ; + memcpy(src + repolen, "/sources", 9) ; + dir = opendir(src) ; + if (!dir) strerr_diefusys(111, "opendir ", src) ; + for (;;) + { + direntry *d ; + errno = 0 ; + d = readdir(dir) ; + if (!d) break ; + if (strncmp(d->d_name, ".snapshot.", 10)) continue ; + if (!strcmp(d->d_name, snap)) continue ; + s6rc_repo_setdelete(repo, d->d_name) ; + } + if (errno) strerr_diefusys(111, "readdir ", src) ; + dir_close(dir) ; +} + static int install_needs_upgrade (char const *livedir) { size_t llen = strlen(livedir) ; @@ -373,6 +397,8 @@ int main (int argc, char const *const *argv) } else rm_rf(olddbsa.s) ; } + + remove_snapshots_except(wgola[GOLA_REPODIR], dstfn + bootdirsa.len + 1) ; } _exit(0) ; } -- cgit v1.3.1