aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/s6-rc/repo.h4
-rw-r--r--src/libs6rc/s6rc_read_major.c2
-rw-r--r--src/repo/deps-exe/s6-rc-set-commit1
-rw-r--r--src/repo/deps-exe/s6-rc-set-install1
-rw-r--r--src/repo/s6-rc-set-commit.c13
-rw-r--r--src/repo/s6rc_repo_compile.c9
-rw-r--r--src/repo/s6rc_repo_setcompile.c4
-rw-r--r--src/repo/s6rc_repo_setuptodate.c16
-rw-r--r--src/repo/s6rc_repo_sync.c2
9 files changed, 39 insertions, 13 deletions
diff --git a/src/include/s6-rc/repo.h b/src/include/s6-rc/repo.h
index 1615507..0607977 100644
--- a/src/include/s6-rc/repo.h
+++ b/src/include/s6-rc/repo.h
@@ -48,9 +48,9 @@ extern int s6rc_repo_makesetbundles (char const *, char const *, unsigned int) ;
extern int s6rc_repo_makedefbundle (char const *, char const *, char const *) ;
#define S6RC_REPO_COMPILE_BUFLEN(repolen, setlen) ((repolen) + (setlen) + 45)
-extern int s6rc_repo_compile (char const *, char const *, char const *const *, uint8_t, char *, unsigned int, char const *) ;
+extern int s6rc_repo_compile (char const *, char const *, char const *const *, uint8_t, char *, unsigned int, char const *, char const *) ;
extern int s6rc_repo_refcompile (char const *, char *, unsigned int, char const *) ;
-extern int s6rc_repo_setcompile (char const *, char const *, char const *, char *, unsigned int, char const *) ;
+extern int s6rc_repo_setcompile (char const *, char const *, char const *, char *, unsigned int, char const *, char const *) ;
extern int s6rc_repo_list_sets (char const *, stralloc *, genalloc *) ;
extern int s6rc_repo_listrx (char const *, char const *, char const *, stralloc *, genalloc *) ;
diff --git a/src/libs6rc/s6rc_read_major.c b/src/libs6rc/s6rc_read_major.c
index 978f29c..2be5121 100644
--- a/src/libs6rc/s6rc_read_major.c
+++ b/src/libs6rc/s6rc_read_major.c
@@ -21,7 +21,7 @@ uint32_t s6rc_read_major (char const *compiled)
memcpy(fn, compiled, clen) ;
memcpy(fn + clen, "/major", 7) ;
r = openreadnclose(fn, tmp, UINT32_FMT) ;
- if (r == -1) return errno == ENOENT ? 6 : 0 ; /* up to 0.6.x.y doesn't have db/major */
+ if (r == -1) return errno == ENOENT ? 7 : 0 ; /* up to 0.7.0.0 doesn't have db/major */
if (!r) return 0 ;
if (tmp[r] != '\n') return (errno = EPROTO, 0) ;
tmp[r] = 0 ;
diff --git a/src/repo/deps-exe/s6-rc-set-commit b/src/repo/deps-exe/s6-rc-set-commit
index 9fe69bb..3214aaa 100644
--- a/src/repo/deps-exe/s6-rc-set-commit
+++ b/src/repo/deps-exe/s6-rc-set-commit
@@ -1,3 +1,4 @@
${LIBS6RCREPO}
+${LIBS6RC}
-lskarnet
${SPAWN_LIB}
diff --git a/src/repo/deps-exe/s6-rc-set-install b/src/repo/deps-exe/s6-rc-set-install
index 9fe69bb..3214aaa 100644
--- a/src/repo/deps-exe/s6-rc-set-install
+++ b/src/repo/deps-exe/s6-rc-set-install
@@ -1,3 +1,4 @@
${LIBS6RCREPO}
+${LIBS6RC}
-lskarnet
${SPAWN_LIB}
diff --git a/src/repo/s6-rc-set-commit.c b/src/repo/s6-rc-set-commit.c
index 95af67d..6bfe03d 100644
--- a/src/repo/s6-rc-set-commit.c
+++ b/src/repo/s6-rc-set-commit.c
@@ -20,7 +20,7 @@
#include <s6-rc/config.h>
#include <s6-rc/s6rc.h>
-#define USAGE "s6-rc-set-commit [ -v verbosity ] [ -r repo ] [ -D defaultbundle ] [ -h fdhuser ] [ -K ] [ -f ] set"
+#define USAGE "s6-rc-set-commit [ -v verbosity ] [ -r repodir ] [ -D default-bundle ] [ -h fdholder-user ] [ -L catchall-logger ] [ -K ] [ -f ] set"
#define dieusage() strerr_dieusage(100, USAGE)
enum golb_e
@@ -35,6 +35,7 @@ enum gola_e
GOLA_REPODIR,
GOLA_DEFBUNDLE,
GOLA_FDHUSER,
+ GOLA_CATCHALL,
GOLA_N
} ;
@@ -49,7 +50,8 @@ static gol_arg const rgola[] =
{ .so = 'v', .lo = "verbosity", .i = GOLA_VERBOSITY },
{ .so = 'r', .lo = "repodir", .i = GOLA_REPODIR },
{ .so = 'D', .lo = "default-bundle", .i = GOLA_DEFBUNDLE },
- { .so = 'h', .lo = "fdholder-user", .i = GOLA_FDHUSER }
+ { .so = 'h', .lo = "fdholder-user", .i = GOLA_FDHUSER },
+ { .so = 'L', .lo = "catchall-logger", .i = GOLA_CATCHALL },
} ;
int main (int argc, char const *const *argv)
@@ -69,6 +71,11 @@ int main (int argc, char const *const *argv)
argc -= golc ; argv += golc ;
if (wgola[GOLA_VERBOSITY] && !uint0_scan(wgola[GOLA_VERBOSITY], &verbosity))
strerr_dief1x(100, "verbosity needs to be an unsigned integer") ;
+ if (wgola[GOLA_CATCHALL])
+ {
+ if (wgola[GOLA_CATCHALL][0] != '/')
+ strerr_dief(100, "catchall-logger needs to be an absolute path") ;
+ }
if (!argc) dieusage() ;
s6rc_repo_sanitize_setname(argv[0]) ;
@@ -105,7 +112,7 @@ int main (int argc, char const *const *argv)
size_t oldclen = S6RC_REPO_COMPILE_BUFLEN(strlen(wgola[GOLA_REPODIR]), strlen(argv[0])) ;
char oldc[oldclen] ;
- r = s6rc_repo_setcompile(wgola[GOLA_REPODIR], argv[0], wgola[GOLA_DEFBUNDLE], oldc, verbosity, wgola[GOLA_FDHUSER]) ;
+ r = s6rc_repo_setcompile(wgola[GOLA_REPODIR], argv[0], wgola[GOLA_DEFBUNDLE], oldc, verbosity, wgola[GOLA_FDHUSER], wgola[GOLA_CATCHALL]) ;
if (r == -1) _exit(111) ;
if (!r) _exit(1) ;
if (r == 2)
diff --git a/src/repo/s6rc_repo_compile.c b/src/repo/s6rc_repo_compile.c
index 83fa744..bfb7639 100644
--- a/src/repo/s6rc_repo_compile.c
+++ b/src/repo/s6rc_repo_compile.c
@@ -16,7 +16,7 @@
#include <s6-rc/config.h>
#include <s6-rc/repo.h>
-int s6rc_repo_compile (char const *repo, char const *set, char const *const *rxs, uint8_t nrxs, char *oldc, unsigned int verbosity, char const *fdhuser)
+int s6rc_repo_compile (char const *repo, char const *set, char const *const *rxs, uint8_t nrxs, char *oldc, unsigned int verbosity, char const *fdhuser, char const *catchall)
{
size_t repolen = strlen(repo) ;
size_t setlen = strlen(set) ;
@@ -38,7 +38,7 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *rxs
pid_t pid ;
size_t m = 0 ;
int wstat ;
- char const *argv[9 + nrxs] ;
+ char const *argv[11 + nrxs] ;
char fmtv[UINT_FMT] ;
char src[nrxs * (repolen + 10 + (needprefix ? setlen + 1 : 0)) + totrxlen] ;
char *w = src ;
@@ -52,6 +52,11 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *rxs
argv[m++] = "-h" ;
argv[m++] = fdhuser ;
}
+ if (catchall)
+ {
+ argv[m++] = "-L" ;
+ argv[m++] = catchall ;
+ }
argv[m++] = "--" ;
argv[m++] = newc ;
for (uint8_t i = 0 ; i < nrxs ; i++)
diff --git a/src/repo/s6rc_repo_setcompile.c b/src/repo/s6rc_repo_setcompile.c
index 55f06ca..1bdbea8 100644
--- a/src/repo/s6rc_repo_setcompile.c
+++ b/src/repo/s6rc_repo_setcompile.c
@@ -7,13 +7,13 @@
#include <s6-rc/repo.h>
-int s6rc_repo_setcompile (char const *repo, char const *set, char const *defbundle, char *oldc, unsigned int verbosity, char const *fdhuser)
+int s6rc_repo_setcompile (char const *repo, char const *set, char const *defbundle, char *oldc, unsigned int verbosity, char const *fdhuser, char const *catchall)
{
static char const *const rxs[4] = { "bundle", s6rc_repo_rxnames[1], s6rc_repo_rxnames[2], s6rc_repo_rxnames[3] } ;
int r ;
if (!s6rc_repo_makesetbundles(repo, set, verbosity)) return -1 ;
if (!s6rc_repo_makedefbundle(repo, set, defbundle)) return -1 ;
- r = s6rc_repo_compile(repo, set, rxs, 4, oldc, verbosity, fdhuser) ;
+ r = s6rc_repo_compile(repo, set, rxs, 4, oldc, verbosity, fdhuser, catchall) ;
{
int e = errno ;
diff --git a/src/repo/s6rc_repo_setuptodate.c b/src/repo/s6rc_repo_setuptodate.c
index 83e208e..b6bd35d 100644
--- a/src/repo/s6rc_repo_setuptodate.c
+++ b/src/repo/s6rc_repo_setuptodate.c
@@ -4,11 +4,14 @@
#include <skalibs/nonposix.h>
#include <string.h>
+#include <stdint.h>
#include <errno.h>
#include <skalibs/stat.h>
#include <skalibs/strerr.h>
+#include <s6-rc/config.h>
+#include <s6-rc/s6rc-utils.h>
#include <s6-rc/repo.h>
int s6rc_repo_setuptodate (char const *repo, char const *set)
@@ -28,15 +31,24 @@ int s6rc_repo_setuptodate (char const *repo, char const *set)
memcpy(dstfn + repolen + 10, set, setlen + 1) ;
if (stat(srcfn, &stsource) == -1)
{
- strerr_warnfu2sys("stat ", srcfn) ;
+ strerr_warnfusys("stat ", srcfn) ;
return -1 ;
}
if (stat(dstfn, &stcompiled) == -1)
{
if (errno == ENOENT) return 0 ;
- strerr_warnfu2sys("stat ", dstfn) ;
+ strerr_warnfusys("stat ", dstfn) ;
return -1 ;
}
+ {
+ uint32_t version = s6rc_read_major(dstfn) ;
+ if (!version)
+ {
+ strerr_warnfusys("read major version from ", dstfn) ;
+ return -1 ;
+ }
+ if (version < s6rc_get_major(S6RC_VERSION)) return 0 ;
+ }
return
stsource.st_mtim.tv_sec < stcompiled.st_mtim.tv_sec ? 1 :
stsource.st_mtim.tv_sec > stcompiled.st_mtim.tv_sec ? 0 :
diff --git a/src/repo/s6rc_repo_sync.c b/src/repo/s6rc_repo_sync.c
index 64f4017..a2b5886 100644
--- a/src/repo/s6rc_repo_sync.c
+++ b/src/repo/s6rc_repo_sync.c
@@ -153,7 +153,7 @@ int s6rc_repo_sync (char const *repo, unsigned int verbosity, char const *fdhuse
{
char const *rxs[2] = { ato + repolen + 9, bun + repolen + 9 } ;
char oldc[repolen + 49] ;
- int r = s6rc_repo_compile(repo, ".ref", rxs, 2, oldc, verbosity, fdhuser) ;
+ int r = s6rc_repo_compile(repo, ".ref", rxs, 2, oldc, verbosity, fdhuser, 0) ;
if (r < 0) goto err ;
if (!r) { cleanup(ato, bun) ; return 0 ; }
if (r == 2) rm_rf(oldc) ;