diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/s6-rc/repo.h | 4 | ||||
| -rw-r--r-- | src/libs6rc/s6rc_read_major.c | 2 | ||||
| -rw-r--r-- | src/repo/deps-exe/s6-rc-set-commit | 1 | ||||
| -rw-r--r-- | src/repo/deps-exe/s6-rc-set-install | 1 | ||||
| -rw-r--r-- | src/repo/s6-rc-set-commit.c | 13 | ||||
| -rw-r--r-- | src/repo/s6rc_repo_compile.c | 9 | ||||
| -rw-r--r-- | src/repo/s6rc_repo_setcompile.c | 4 | ||||
| -rw-r--r-- | src/repo/s6rc_repo_setuptodate.c | 16 | ||||
| -rw-r--r-- | src/repo/s6rc_repo_sync.c | 2 |
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) ; |
