aboutsummaryrefslogtreecommitdiffstats
path: root/src/repo/s6rc_repo_compile.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-10-15 05:17:26 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-10-15 05:17:26 +0000
commit91a0655557e707977f583b2142bda898ee599fd8 (patch)
treeb5dd235420095136c99893bfb91618fed79a9918 /src/repo/s6rc_repo_compile.c
parent1feee8fff883b4e767a79e9373a96591d46eb8a2 (diff)
downloads6-rc-91a0655557e707977f583b2142bda898ee599fd8.tar.gz
Second part of the format-upgrade support: ensure snapshots are there
We don't want to install compiled dbs without having a snapshot of their source set, so whenever we test that the compiled db is up to date, we also test that a snapshot is present. This is important because we will auto-cleanup unused snapshots after installation.
Diffstat (limited to 'src/repo/s6rc_repo_compile.c')
-rw-r--r--src/repo/s6rc_repo_compile.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/repo/s6rc_repo_compile.c b/src/repo/s6rc_repo_compile.c
index bfb7639..f89a65a 100644
--- a/src/repo/s6rc_repo_compile.c
+++ b/src/repo/s6rc_repo_compile.c
@@ -22,7 +22,7 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *rxs
size_t setlen = strlen(set) ;
size_t totrxlen = 0 ;
int needprefix = strcmp(set, ".ref") ;
- char snap[repolen + setlen + 37] ;
+ char snap[setlen + 44] ;
char newc[repolen + setlen + 45] ;
memcpy(newc, repo, repolen) ;
memcpy(newc + repolen, "/compiled/.", 11) ;
@@ -99,18 +99,19 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *rxs
if (needprefix)
{
int e ;
- memcpy(snap, ".snapshot:", 10) ;
- memcpy(snap + 10, newc + repolen + 11, setlen + 26) ;
- snap[repolen + setlen + 36] = 0 ;
+ memcpy(snap, ".snapshot", 9) ;
+ memcpy(snap + 9, newc + repolen + 10, setlen + 35) ;
e = s6rc_repo_setcopy(repo, set, snap, 1) ;
switch (e)
{
case -2 :
strerr_warnf("internal layout error while taking a snapshot of set ", set) ;
+ rm_rf(newc) ;
return (errno = EILSEQ, -1) ;
case 0 : break ;
default :
strerr_warnfusys("take a snapshot of set ", set) ;
+ rm_rf(newc) ;
return (errno = e, -1) ;
}
}
@@ -123,7 +124,7 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *rxs
{
int e = errno ;
rm_rf(newc) ;
- s6rc_repo_setdelete(repo, snap) ;
+ if (needprefix) s6rc_repo_setdelete(repo, snap) ;
errno = e ;
strerr_warnfu4sys("atomically symlink ", newc + repolen + 10, " to ", fn) ;
return -1 ;