aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rc/s6rc_repo_sync.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-08-04 01:33:49 +0000
committerLaurent Bercot <ska@appnovation.com>2025-08-04 01:33:49 +0000
commit78977a1a98d2154e42eab788d6420b3c52464413 (patch)
treee9f8399dfda6c59f2b94964ccc2b266074e821e6 /src/libs6rc/s6rc_repo_sync.c
parent55131f86090252400176f09e047f17b7110854c8 (diff)
downloads6-rc-78977a1a98d2154e42eab788d6420b3c52464413.tar.gz
first draft of s6rc_repo_set_compile
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libs6rc/s6rc_repo_sync.c')
-rw-r--r--src/libs6rc/s6rc_repo_sync.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/libs6rc/s6rc_repo_sync.c b/src/libs6rc/s6rc_repo_sync.c
index 1fb8d65..4341bee 100644
--- a/src/libs6rc/s6rc_repo_sync.c
+++ b/src/libs6rc/s6rc_repo_sync.c
@@ -24,13 +24,13 @@ static inline void cleanup (char const *fn)
errno = e ;
}
-int s6rc_repo_sync (char const *repo, char const *const *sources, size_t sourceslen, unsigned int verbosity)
+int s6rc_repo_sync (char const *repo, char const *const *sources, size_t sourceslen, unsigned int verbosity, char const *fdhuser)
{
stralloc sa = STRALLOC_ZERO ;
size_t repolen = strlen(repo) ;
- char newdir[repolen + 24] ;
+ char newdir[repolen + 29] ;
memcpy(newdir, repo, repolen) ;
- memcpy(newdir + repolen, "/.everything:cur:XXXXXX", 24) ;
+ memcpy(newdir + repolen, "/sources/..everything:XXXXXX", 29) ;
if (!mkdtemp(newdir))
{
strerr_warnfu2sys("mkdtemp ", newdir) ;
@@ -56,11 +56,11 @@ int s6rc_repo_sync (char const *repo, char const *const *sources, size_t sources
if (d->d_name[0] == '.') continue ;
len = strlen(d->d_name) ;
{
- char dst[repolen + 25 + len] ;
+ char dst[repolen + 30 + len] ;
char src[srclen + len + 2] ;
- memcpy(dst, newdir, repolen + 23) ;
- dst[repolen + 23] = '/' ;
- memcpy(dst + repolen + 24, d->d_name, len+1) ;
+ memcpy(dst, newdir, repolen + 28) ;
+ dst[repolen + 28] = '/' ;
+ memcpy(dst + repolen + 29, d->d_name, len+1) ;
memcpy(src, sources[i], srclen) ;
src[srclen] = '/' ;
memcpy(src + srclen + 1, d->d_name, len+1) ;
@@ -116,17 +116,28 @@ int s6rc_repo_sync (char const *repo, char const *const *sources, size_t sources
}
{
- char curdir[repolen + 13] ;
+ char curdir[repolen + 21] ;
memcpy(curdir, repo, repolen) ;
- memcpy(curdir + repolen, "/.everything", 13) ;
- if (!atomic_symlink(newdir + repolen + 1, curdir, "tmp")) goto err ;
+ memcpy(curdir + repolen, "/sources/.everything", 21) ;
+ if (!atomic_symlink4(newdir + repolen + 1, curdir, 0, 0)) goto err ;
}
stralloc_free(&sa) ;
- return s6rc_repo_cleanup(repo) ;
+ if (!s6rc_repo_cleanup(repo)) return 0 ;
+
+ {
+ size_t buflen = S6RC_REPO_SET_COMPILE_BUFLEN(repolen, sizeof(".everything") - 1) ;
+ char oldc[buflen] ;
+ int r = s6rc_repo_set_compile(repo, ".everything", 0, 0, oldc, verbosity, fdhuser) ;
+ if (r <= 0) goto err0 ;
+ if (r == 2) rm_rf(oldc) ;
+ }
+
+ return 1 ;
err:
stralloc_free(&sa) ;
+ err0:
cleanup(newdir) ;
return 0 ;
}