aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-09-08 23:24:56 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2025-09-08 23:24:56 +0000
commit82091de2b091fbfa548b0d273067de22d49ca9d3 (patch)
tree191991611efbde3d7662104013e27eb2723e8f9d
parentc7c4b79d5d50ee29236038518a2e0bf5a39ed060 (diff)
downloads6-rc-82091de2b091fbfa548b0d273067de22d49ca9d3.tar.gz
Reorganize for 4 subs; add makesvlist, start badsub
-rw-r--r--package/deps.mak11
-rw-r--r--src/include/s6-rc/repo.h12
-rw-r--r--src/libs6rc/deps-lib/s6rc2
-rw-r--r--src/libs6rc/s6rc_repo_badsub.c58
-rw-r--r--src/libs6rc/s6rc_repo_fillset.c13
-rw-r--r--src/libs6rc/s6rc_repo_makesvlist.c64
-rw-r--r--src/libs6rc/s6rc_repo_refcompile.c2
-rw-r--r--src/libs6rc/s6rc_repo_setcompile.c4
-rw-r--r--src/libs6rc/s6rc_repo_sublist.c2
-rw-r--r--src/libs6rc/s6rc_repo_sv_cmp.c11
-rw-r--r--src/libs6rc/s6rc_repo_sync.c2
-rw-r--r--src/repo/s6-rc-set-enable.c132
-rw-r--r--src/repo/s6-rc-set-new.c5
13 files changed, 297 insertions, 21 deletions
diff --git a/package/deps.mak b/package/deps.mak
index 3175904..52a1a09 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -20,6 +20,7 @@ src/libs6rc/s6rc_livedir_prefixsize.o src/libs6rc/s6rc_livedir_prefixsize.lo: sr
src/libs6rc/s6rc_lock.o src/libs6rc/s6rc_lock.lo: src/libs6rc/s6rc_lock.c src/include/s6-rc/s6rc-utils.h
src/libs6rc/s6rc_nlto0.o src/libs6rc/s6rc_nlto0.lo: src/libs6rc/s6rc_nlto0.c src/include/s6-rc/s6rc-utils.h
src/libs6rc/s6rc_read_uint.o src/libs6rc/s6rc_read_uint.lo: src/libs6rc/s6rc_read_uint.c src/include/s6-rc/s6rc-utils.h
+src/libs6rc/s6rc_repo_badsub.o src/libs6rc/s6rc_repo_badsub.lo: src/libs6rc/s6rc_repo_badsub.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_cleanup.o src/libs6rc/s6rc_repo_cleanup.lo: src/libs6rc/s6rc_repo_cleanup.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_compile.o src/libs6rc/s6rc_repo_compile.lo: src/libs6rc/s6rc_repo_compile.c src/include/s6-rc/config.h src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_fillset.o src/libs6rc/s6rc_repo_fillset.lo: src/libs6rc/s6rc_repo_fillset.c src/include/s6-rc/repo.h src/include/s6-rc/s6rc-utils.h
@@ -31,10 +32,12 @@ src/libs6rc/s6rc_repo_listsub.o src/libs6rc/s6rc_repo_listsub.lo: src/libs6rc/s6
src/libs6rc/s6rc_repo_lock.o src/libs6rc/s6rc_repo_lock.lo: src/libs6rc/s6rc_repo_lock.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_makedefbundle.o src/libs6rc/s6rc_repo_makedefbundle.lo: src/libs6rc/s6rc_repo_makedefbundle.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_makesetbundles.o src/libs6rc/s6rc_repo_makesetbundles.lo: src/libs6rc/s6rc_repo_makesetbundles.c src/include/s6-rc/repo.h src/include/s6-rc/s6rc-utils.h
+src/libs6rc/s6rc_repo_makesvlist.o src/libs6rc/s6rc_repo_makesvlist.lo: src/libs6rc/s6rc_repo_makesvlist.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_moveservices.o src/libs6rc/s6rc_repo_moveservices.lo: src/libs6rc/s6rc_repo_moveservices.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_refcompile.o src/libs6rc/s6rc_repo_refcompile.lo: src/libs6rc/s6rc_repo_refcompile.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_setcompile.o src/libs6rc/s6rc_repo_setcompile.lo: src/libs6rc/s6rc_repo_setcompile.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_sublist.o src/libs6rc/s6rc_repo_sublist.lo: src/libs6rc/s6rc_repo_sublist.c src/include/s6-rc/repo.h
+src/libs6rc/s6rc_repo_sv_cmp.o src/libs6rc/s6rc_repo_sv_cmp.lo: src/libs6rc/s6rc_repo_sv_cmp.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_sync.o src/libs6rc/s6rc_repo_sync.lo: src/libs6rc/s6rc_repo_sync.c src/include/s6-rc/repo.h src/include/s6-rc/s6rc-utils.h
src/libs6rc/s6rc_sanitize_dir.o src/libs6rc/s6rc_sanitize_dir.lo: src/libs6rc/s6rc_sanitize_dir.c src/include/s6-rc/s6rc-utils.h
src/libs6rc/s6rc_servicedir_block.o src/libs6rc/s6rc_servicedir_block.lo: src/libs6rc/s6rc_servicedir_block.c src/include/s6-rc/s6rc-servicedir.h
@@ -63,15 +66,15 @@ src/s6-rc/s6-rc-update.o src/s6-rc/s6-rc-update.lo: src/s6-rc/s6-rc-update.c src
src/s6-rc/s6-rc.o src/s6-rc/s6-rc.lo: src/s6-rc/s6-rc.c src/include/s6-rc/config.h src/include/s6-rc/s6rc.h
ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),)
-libs6rc.a.xyzzy: src/libs6rc/s6rc_db_check_depcycles.o src/libs6rc/s6rc_db_check_pipelines.o src/libs6rc/s6rc_db_check_revdeps.o src/libs6rc/s6rc_db_read.o src/libs6rc/s6rc_db_read_sizes.o src/libs6rc/s6rc_db_read_uint32.o src/libs6rc/s6rc_graph_closure.o src/libs6rc/s6rc_live_state_size.o src/libs6rc/s6rc_live_state_read.o src/libs6rc/s6rc_livedir_canon.o src/libs6rc/s6rc_livedir_create.o src/libs6rc/s6rc_livedir_prefix.o src/libs6rc/s6rc_livedir_prefixsize.o src/libs6rc/s6rc_lock.o src/libs6rc/s6rc_nlto0.o src/libs6rc/s6rc_read_uint.o src/libs6rc/s6rc_repo_cleanup.o src/libs6rc/s6rc_repo_compile.o src/libs6rc/s6rc_repo_fillset.o src/libs6rc/s6rc_repo_listalldeps.o src/libs6rc/s6rc_repo_listcontents.o src/libs6rc/s6rc_repo_listdeps.o src/libs6rc/s6rc_repo_listdeps_internal.o src/libs6rc/s6rc_repo_listsub.o src/libs6rc/s6rc_repo_lock.o src/libs6rc/s6rc_repo_makedefbundle.o src/libs6rc/s6rc_repo_makesetbundles.o src/libs6rc/s6rc_repo_moveservices.o src/libs6rc/s6rc_repo_refcompile.o src/libs6rc/s6rc_repo_setcompile.o src/libs6rc/s6rc_repo_sublist.o src/libs6rc/s6rc_repo_sync.o src/libs6rc/s6rc_sanitize_dir.o src/libs6rc/s6rc_servicedir_internal.o src/libs6rc/s6rc_servicedir_block.o src/libs6rc/s6rc_servicedir_unblock.o src/libs6rc/s6rc_servicedir_copy_offline.o src/libs6rc/s6rc_servicedir_copy_online.o src/libs6rc/s6rc_servicedir_manage.o src/libs6rc/s6rc_servicedir_unsupervise.o src/libs6rc/s6rc_strrefcmp.o src/libs6rc/s6rc_type_check.o
+libs6rc.a.xyzzy: src/libs6rc/s6rc_db_check_depcycles.o src/libs6rc/s6rc_db_check_pipelines.o src/libs6rc/s6rc_db_check_revdeps.o src/libs6rc/s6rc_db_read.o src/libs6rc/s6rc_db_read_sizes.o src/libs6rc/s6rc_db_read_uint32.o src/libs6rc/s6rc_graph_closure.o src/libs6rc/s6rc_live_state_size.o src/libs6rc/s6rc_live_state_read.o src/libs6rc/s6rc_livedir_canon.o src/libs6rc/s6rc_livedir_create.o src/libs6rc/s6rc_livedir_prefix.o src/libs6rc/s6rc_livedir_prefixsize.o src/libs6rc/s6rc_lock.o src/libs6rc/s6rc_nlto0.o src/libs6rc/s6rc_read_uint.o src/libs6rc/s6rc_repo_cleanup.o src/libs6rc/s6rc_repo_compile.o src/libs6rc/s6rc_repo_fillset.o src/libs6rc/s6rc_repo_listalldeps.o src/libs6rc/s6rc_repo_listcontents.o src/libs6rc/s6rc_repo_listdeps.o src/libs6rc/s6rc_repo_listdeps_internal.o src/libs6rc/s6rc_repo_listsub.o src/libs6rc/s6rc_repo_lock.o src/libs6rc/s6rc_repo_makedefbundle.o src/libs6rc/s6rc_repo_makesetbundles.o src/libs6rc/s6rc_repo_moveservices.o src/libs6rc/s6rc_repo_makesvlist.o src/libs6rc/s6rc_repo_refcompile.o src/libs6rc/s6rc_repo_setcompile.o src/libs6rc/s6rc_repo_sublist.o src/libs6rc/s6rc_repo_sv_cmp.o src/libs6rc/s6rc_repo_sync.o src/libs6rc/s6rc_sanitize_dir.o src/libs6rc/s6rc_servicedir_internal.o src/libs6rc/s6rc_servicedir_block.o src/libs6rc/s6rc_servicedir_unblock.o src/libs6rc/s6rc_servicedir_copy_offline.o src/libs6rc/s6rc_servicedir_copy_online.o src/libs6rc/s6rc_servicedir_manage.o src/libs6rc/s6rc_servicedir_unsupervise.o src/libs6rc/s6rc_strrefcmp.o src/libs6rc/s6rc_type_check.o
else
-libs6rc.a.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_sublist.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_strrefcmp.lo src/libs6rc/s6rc_type_check.lo
+libs6rc.a.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_makesvlist.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_sublist.lo src/libs6rc/s6rc_repo_sv_cmp.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_strrefcmp.lo src/libs6rc/s6rc_type_check.lo
endif
libs6rc.pc: EXTRA_LIBS := -ls6 -lskarnet ${SPAWN_LIB}
libs6rc.so.xyzzy: EXTRA_LIBS := -ls6 -lskarnet ${SPAWN_LIB}
-libs6rc.so.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_sublist.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_strrefcmp.lo src/libs6rc/s6rc_type_check.lo
+libs6rc.so.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_makesvlist.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_sublist.lo src/libs6rc/s6rc_repo_sv_cmp.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_strrefcmp.lo src/libs6rc/s6rc_type_check.lo
libs6rc.dylib.xyzzy: EXTRA_LIBS := -ls6 -lskarnet ${SPAWN_LIB}
-libs6rc.dylib.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_sublist.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_strrefcmp.lo src/libs6rc/s6rc_type_check.lo
+libs6rc.dylib.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_makesvlist.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_sublist.lo src/libs6rc/s6rc_repo_sv_cmp.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_strrefcmp.lo src/libs6rc/s6rc_type_check.lo
s6-rc-repo-init: EXTRA_LIBS :=
s6-rc-repo-init: src/repo/s6-rc-repo-init.o ${LIBS6RC} -lskarnet
s6-rc-set-copy: EXTRA_LIBS :=
diff --git a/src/include/s6-rc/repo.h b/src/include/s6-rc/repo.h
index 2ad550d..c37ad60 100644
--- a/src/include/s6-rc/repo.h
+++ b/src/include/s6-rc/repo.h
@@ -9,7 +9,17 @@
#include <skalibs/stralloc.h>
#include <skalibs/genalloc.h>
-extern char const s6rc_repo_sublist[3][7] ;
+typedef struct s6rc_repo_sv_s s6rc_repo_sv, *s6rc_repo_sv_ref ;
+struct s6rc_repo_sv_s
+{
+ uint32_t pos ;
+ uint8_t sub ;
+} ;
+
+extern int s6rc_repo_sv_cmp (void const *, void const *, void *) ;
+
+extern char const s6rc_repo_sublist[4][7] ;
+
extern int s6rc_repo_fillset (char const *, char const *, char const *const *, size_t) ;
extern int s6rc_repo_cleanup (char const *) ;
diff --git a/src/libs6rc/deps-lib/s6rc b/src/libs6rc/deps-lib/s6rc
index 4af4acb..e0bfe6e 100644
--- a/src/libs6rc/deps-lib/s6rc
+++ b/src/libs6rc/deps-lib/s6rc
@@ -26,9 +26,11 @@ s6rc_repo_lock.o
s6rc_repo_makedefbundle.o
s6rc_repo_makesetbundles.o
s6rc_repo_moveservices.o
+s6rc_repo_makesvlist.o
s6rc_repo_refcompile.o
s6rc_repo_setcompile.o
s6rc_repo_sublist.o
+s6rc_repo_sv_cmp.o
s6rc_repo_sync.o
s6rc_sanitize_dir.o
s6rc_servicedir_internal.o
diff --git a/src/libs6rc/s6rc_repo_badsub.c b/src/libs6rc/s6rc_repo_badsub.c
new file mode 100644
index 0000000..8e52913
--- /dev/null
+++ b/src/libs6rc/s6rc_repo_badsub.c
@@ -0,0 +1,58 @@
+/* ISC license. */
+
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include <skalibs/posixplz.h>
+#include <skalibs/direntry.h>
+#include <skalibs/strerr.h>
+#include <skalibs/stralloc.h>
+#include <skalibs/genalloc.h>
+
+#include <s6-rc/repo.h>
+
+#define dienomem() strerr_diefu1sys(111, "stralloc_catb")
+
+typedef int qsortcmp_func (void const *, void const *) ;
+typedef qsortcmp_func *qsortcmp_func_ref ;
+
+static int s6rc_repo_sv_bcmpr (void const *a, void const *b, void *aux)
+{
+ char const *key = a ;
+ s6rc_repo_sv const *elem = b ;
+ stralloc *sa = aux ;
+ return strcmp(key, sa->s + elem->pos) ;
+}
+
+static int strqcmp (void const *a, void const *b)
+{
+ char const *const *aa = a ;
+ char const *const *bb = b ;
+ return strcmp(*aa, *bb) ;
+}
+
+int s6rc_repo_listinconsistent (char const *repo, char const *set, char const **services, size_t n, uint8_t newsub, s6rc_repo_sv const *svlist, size_t nlist, stralloc *sa, genalloc *inconga)
+{
+ size_t sabase = sa->len ;
+ genalloc fulldeps = GENALLOC_ZERO ;
+ size_t fulln ;
+ size_t const *ind ;
+
+ if (s6rc_repo_listalldeps(repo, services, n, sa, &fulldeps, sub >= 2) <= 0) return 0 ;
+ qsort(services, n, sizeof(char const *), &strqcmp) ;
+ fulln = genalloc_len(size_t, &fulldeps) ;
+ ind = genalloc_s(size_t, &fulldeps) ;
+
+ for (size_t i = 0 ; i < fulln ; i++)
+ {
+ s6rc_repo_sv *p ;
+ char const *cur = sa->s + ind[i] ;
+ uint8_t oldsub ;
+ if (bsearch(&cur, services, n, sizeof(char const *), &strqcmp)) continue ;
+ p = bsearchr(cur, svlist, nlist, sizeof(s6rc_repo_sv), &s6rc_repo_sv_bcmpr, sa) ;
+ if (!p)
+ {
+ }
+ }
+}
diff --git a/src/libs6rc/s6rc_repo_fillset.c b/src/libs6rc/s6rc_repo_fillset.c
index 50c0156..5a82ddd 100644
--- a/src/libs6rc/s6rc_repo_fillset.c
+++ b/src/libs6rc/s6rc_repo_fillset.c
@@ -47,25 +47,22 @@ int s6rc_repo_fillset (char const *repo, char const *set, char const *const *exi
memcpy(src + 12, d->d_name, len+1) ;
if (n && bsearch(&d->d_name, existing, n, sizeof(char const *), &s6rc_strrefcmp)) continue ;
memcpy(src + 12 + len, "/flag-essential", 16) ;
- if (access(src, F_OK) == -1)
+ if (access(src, F_OK) == 0) subi = 3 ;
+ else
{
if (errno != ENOENT)
{
strerr_warnfu2sys("access ", src) ;
break ;
}
- }
- else subi = 2 ;
- memcpy(src + 18 + len, "recommended", 12) ;
- if (access(src, F_OK) == -1)
- {
- if (errno != ENOENT)
+ memcpy(src + 18 + len, "recommended", 12) ;
+ if (access(src, F_OK) == 0) subi = 2 ;
+ else if (errno != ENOENT)
{
strerr_warnfu2sys("access ", src) ;
break ;
}
}
- else subi = 2 ;
src[12 + len] = 0 ;
memcpy(dst, setfn, repolen + 10 + setlen) ;
memcpy(dst + repolen + 10 + setlen, s6rc_repo_sublist[subi], 6) ;
diff --git a/src/libs6rc/s6rc_repo_makesvlist.c b/src/libs6rc/s6rc_repo_makesvlist.c
new file mode 100644
index 0000000..4eeacf7
--- /dev/null
+++ b/src/libs6rc/s6rc_repo_makesvlist.c
@@ -0,0 +1,64 @@
+/* ISC license. */
+
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include <skalibs/posixplz.h>
+#include <skalibs/direntry.h>
+#include <skalibs/strerr.h>
+#include <skalibs/stralloc.h>
+#include <skalibs/genalloc.h>
+
+#include <s6-rc/repo.h>
+
+#define dienomem() strerr_diefu1sys(111, "stralloc_catb")
+
+static inline int s6rc_repo_addsub (char const *sub, uint8_t i, stralloc *sa, genalloc *ga)
+{
+ DIR *dir = opendir(sub) ;
+ if (!dir) { strerr_warnfu2sys("opendir ", sub) ; return 0 ; }
+ for (;;)
+ {
+ s6rc_repo_sv sv = { .pos = sa->len, .sub = i } ;
+ direntry *d ;
+ errno = 0 ;
+ d = readdir(dir) ;
+ if (!d) break ;
+ if (d->d_name[0] == '.') continue ;
+
+ if (!stralloc_cats(sa, d->d_name) || !stralloc_0(sa)) dienomem() ;
+ if (!genalloc_append(s6rc_repo_sv, ga, &sv)) dienomem() ;
+ }
+ dir_close(dir) ;
+ if (errno) { strerr_warnfu2sys("readdir ", sub) ; return 0 ; }
+ return 1 ;
+}
+
+int s6rc_repo_makesvlist (char const *repo, char const *set, stralloc *sa, genalloc *ga)
+{
+ size_t repolen = strlen(repo) ;
+ size_t setlen = strlen(set) ;
+ size_t sabase = sa->len ;
+ size_t gabase = genalloc_len(s6rc_repo_sv, ga) ;
+ int sawasnull = !sa->s ;
+ int gawasnull = !genalloc_s(s6rc_repo_sv, ga) ;
+ char subfn[repolen + setlen + 17] ;
+
+ memcpy(subfn, repo, repolen) ;
+ memcpy(subfn + repolen, "/sources/", 9) ;
+ memcpy(subfn + repolen + 9, set, setlen) ;
+ subfn[repolen + 9 + setlen] = '/' ;
+ for (uint8_t i = 0 ; i < 4 ; i++)
+ {
+ memcpy(subfn + repolen + setlen + 10, s6rc_repo_sublist[i], 7) ;
+ if (!s6rc_repo_addsub(subfn, i, sa, ga)) goto err ;
+ }
+ qsortr(genalloc_s(s6rc_repo_sv, ga), genalloc_len(s6rc_repo_sv, ga), sizeof(s6rc_repo_sv), &s6rc_repo_sv_cmp, sa) ;
+ return 1 ;
+
+ err:
+ if (sawasnull) stralloc_free(sa) ; else sa->len = sabase ;
+ if (gawasnull) genalloc_free(s6rc_repo_sv, ga) ; else genalloc_setlen(s6rc_repo_sv, ga, gabase) ;
+ return 0 ;
+}
diff --git a/src/libs6rc/s6rc_repo_refcompile.c b/src/libs6rc/s6rc_repo_refcompile.c
index 5cc4d18..baffe87 100644
--- a/src/libs6rc/s6rc_repo_refcompile.c
+++ b/src/libs6rc/s6rc_repo_refcompile.c
@@ -5,5 +5,5 @@
int s6rc_repo_refcompile (char const *repo, char *oldc, unsigned int verbosity, char const *fdhuser)
{
static char const *const subs[2] = { ".atomics", ".bundles" } ;
- return s6rc_repo_compile(repo, ".ref", subs, 3, oldc, verbosity, fdhuser) ;
+ return s6rc_repo_compile(repo, ".ref", subs, 2, oldc, verbosity, fdhuser) ;
}
diff --git a/src/libs6rc/s6rc_repo_setcompile.c b/src/libs6rc/s6rc_repo_setcompile.c
index 88af42b..82f7d02 100644
--- a/src/libs6rc/s6rc_repo_setcompile.c
+++ b/src/libs6rc/s6rc_repo_setcompile.c
@@ -4,8 +4,8 @@
int s6rc_repo_setcompile (char const *repo, char const *set, char const *defbundle, char *oldc, unsigned int verbosity, char const *fdhuser)
{
- static char const *const subs[3] = { "active", "onboot", "bundle" } ;
+ static char const *const subs[4] = { "active", "onboot", "always", "bundle" } ;
if (!s6rc_repo_makesetbundles(repo, set, verbosity)) return -1 ;
if (!s6rc_repo_makedefbundle(repo, set, defbundle)) return -1 ;
- return s6rc_repo_compile(repo, set, subs, 3, oldc, verbosity, fdhuser) ;
+ return s6rc_repo_compile(repo, set, subs, 4, oldc, verbosity, fdhuser) ;
}
diff --git a/src/libs6rc/s6rc_repo_sublist.c b/src/libs6rc/s6rc_repo_sublist.c
index ad6ce0e..f252b6e 100644
--- a/src/libs6rc/s6rc_repo_sublist.c
+++ b/src/libs6rc/s6rc_repo_sublist.c
@@ -2,4 +2,4 @@
#include <s6-rc/repo.h>
-char const s6rc_repo_sublist[3][7] = { "masked", "active", "onboot" } ;
+char const s6rc_repo_sublist[4][7] = { "masked", "active", "onboot", "always" } ;
diff --git a/src/libs6rc/s6rc_repo_sv_cmp.c b/src/libs6rc/s6rc_repo_sv_cmp.c
new file mode 100644
index 0000000..472e472
--- /dev/null
+++ b/src/libs6rc/s6rc_repo_sv_cmp.c
@@ -0,0 +1,11 @@
+/* ISC license. */
+
+#include <s6-rc/repo.h>
+
+int s6rc_repo_sv_cmp (void const *a, void const *b, void *aux)
+{
+ s6rc_repo_sv const *aa = a ;
+ s6rc_repo_sv const *bb = b ;
+ stralloc *sa = aux ;
+ return strcmp(sa->s + aa->pos, sa->s + bb->pos) ;
+}
diff --git a/src/libs6rc/s6rc_repo_sync.c b/src/libs6rc/s6rc_repo_sync.c
index e3d71fd..46b14be 100644
--- a/src/libs6rc/s6rc_repo_sync.c
+++ b/src/libs6rc/s6rc_repo_sync.c
@@ -91,7 +91,7 @@ static int unlink_stales_in_sub (char const *repo, char const *set, char const *
static inline int s6rc_repo_syncset (char const *repo, size_t repolen, char const *set, stralloc *sa, genalloc *ga, unsigned int verbosity)
{
- for (unsigned int i = 0 ; i < 3 ; i++)
+ for (unsigned int i = 0 ; i < 4 ; i++)
if (unlink_stales_in_sub(repo, set, s6rc_repo_sublist[i], i, sa, ga, verbosity)) goto err ;
{
diff --git a/src/repo/s6-rc-set-enable.c b/src/repo/s6-rc-set-enable.c
new file mode 100644
index 0000000..202ac9e
--- /dev/null
+++ b/src/repo/s6-rc-set-enable.c
@@ -0,0 +1,132 @@
+/* ISC license. */
+
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <skalibs/uint64.h>
+#include <skalibs/posixplz.h>
+#include <skalibs/prog.h>
+#include <skalibs/strerr.h>
+#include <skalibs/gol.h>
+#include <skalibs/tai.h>
+#include <skalibs/djbunix.h>
+#include <skalibs/unix-transactional.h>
+
+#include <s6-rc/config.h>
+#include <s6-rc/s6rc.h>
+
+#define USAGE "s6-rc-set-copy [ -v verbosity ] [ -r repo ] [ -f ] srcset dstset"
+#define dieusage() strerr_dieusage(100, USAGE)
+
+enum golb_e
+{
+ GOLB_FORCE,
+ GOLB_N
+} ;
+
+enum gola_e
+{
+ GOLA_VERBOSITY,
+ GOLA_REPODIR,
+ GOLA_N
+} ;
+
+static gol_bool const rgolb[1] =
+{
+ { .so = 'f', .lo = "force", .clear = 0, .set = 1 << GOLB_FORCE }
+} ;
+
+static gol_arg const rgola[2] =
+{
+ { .so = 'v', .lo = "verbosity", .i = GOLA_VERBOSITY },
+ { .so = 'r', .lo = "repodir", .i = GOLA_REPODIR }
+} ;
+
+
+static uint64_t wgolb = 0 ;
+
+static void cleanup (char const *fn)
+{
+ int e = errno ;
+ rm_rf(fn) ;
+ errno = e ;
+}
+
+static inline void docopy (char const *repo, char const *srcname, char const *dstname)
+{
+ size_t repolen = strlen(repo) ;
+ size_t srclen = strlen(srcname) ;
+ size_t dstlen = strlen(dstname) ;
+ size_t r ;
+ char src[repolen + srclen + 10] ;
+ char dst[repolen + dstlen + 10] ;
+ char realsrc[repolen + srclen + 18] ;
+ char realdst[repolen + dstlen + 18] ;
+ char olddst[repolen + dstlen + 18] ;
+ memcpy(src, repo, repolen) ;
+ memcpy(src + repolen, "/sources/", 9) ;
+ memcpy(src + repolen + 9, srcname, srclen + 1) ;
+ memcpy(dst, src, repolen + 9) ;
+ memcpy(dst + repolen + 9, dstname, dstlen + 1) ;
+ olddst[0] = 0 ;
+ if (access(dst, F_OK) == -1)
+ {
+ if (errno != ENOENT) strerr_diefu2sys(111, "access ", dst) ;
+ }
+ else if (wgolb & (1 << GOLB_FORCE))
+ {
+ memcpy(olddst, dst, repolen + 9) ;
+ r = readlink(dst, olddst + repolen + 9, dstlen + 9) ;
+ if (r == -1) strerr_diefu2sys(111, "readlink ", dst) ;
+ if (r != dstlen + 8) strerr_dief3x(102, "symlink ", dst, "doesn't point to a valid name") ;
+ }
+ else strerr_dief4x(100, "set ", dstname, " already exists in repository ", repo) ;
+
+ memcpy(realsrc, src, repolen + 9) ;
+ r = readlink(src, realsrc + repolen + 9, srclen + 9) ;
+ if (r == -1) strerr_diefu2sys(111, "readlink ", src) ;
+ if (r != srclen + 8) strerr_dief3x(102, "symlink ", src, "doesn't point to a valid name") ;
+ realsrc[repolen + srclen + 17] = 0 ;
+ memcpy(realdst, dst, repolen + 9) ;
+ dst[repolen + 9] = '.' ;
+ memcpy(realdst + repolen + 10, dstname, dstlen) ;
+ memcpy(realdst + repolen + 10 + dstlen, realsrc + repolen + 10 + srclen, 8) ;
+ if (!hiercopy(realsrc, realdst))
+ {
+ cleanup(realdst) ;
+ strerr_diefu4sys(111, "copy ", realsrc, " to ", realdst) ;
+ }
+ if (!atomic_symlink4(realdst + repolen + 9, dst, 0, 0))
+ {
+ cleanup(realdst) ;
+ strerr_diefu4sys(111, "symlink ", realdst + repolen + 9, " to ", dst) ;
+ }
+ if (olddst[0]) cleanup(olddst) ;
+}
+
+int main (int argc, char const *const *argv)
+{
+ char const *repo = S6RC_REPO_BASE ;
+ int fdlock ;
+ unsigned int verbosity = 1 ;
+ char const *wgola[2] = { 0 } ;
+ unsigned int golc ;
+
+ PROG = "s6-rc-set-copy" ;
+ golc = gol_main(argc, argv, rgolb, 1, rgola, 2, &wgolb, wgola) ;
+ 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_REPODIR]) repo = wgola[GOLA_REPODIR] ;
+ if (argc < 2) dieusage() ;
+ for (unsigned int i = 0 ; i < 2 ; i++)
+ if (strchr(argv[i], '/') || strchr(argv[i], '\n'))
+ strerr_dief1x(100, "set names cannot contain / or newlines") ;
+
+ fdlock = s6rc_repo_lock(repo, 1) ;
+ if (fdlock == -1) strerr_diefu2sys(111, "lock ", repo) ;
+ tain_now_g() ;
+ docopy(repo, argv[0], argv[1]) ;
+ return 0 ;
+}
diff --git a/src/repo/s6-rc-set-new.c b/src/repo/s6-rc-set-new.c
index de62676..3122d0e 100644
--- a/src/repo/s6-rc-set-new.c
+++ b/src/repo/s6-rc-set-new.c
@@ -33,7 +33,6 @@ static void cleanup (char const *fn)
static inline void newset (char const *repo, char const *setname)
{
- static char const sublist[3][7] = { "masked", "active", "onboot" } ;
size_t repolen = strlen(repo) ;
size_t setlen = strlen(setname) ;
char atomics[repolen + 18] ;
@@ -55,9 +54,9 @@ static inline void newset (char const *repo, char const *setname)
memcpy(tmp + repolen + 10 + setlen, ":XXXXXX", 8) ;
if (!mkdtemp(tmp)) strerr_diefu2sys(111, "mkdtemp ", tmp) ;
- for (size_t i = 0 ; i < 3 ; i++)
+ for (size_t i = 0 ; i < 4 ; i++)
{
- memcpy(sub + repolen + 18 + setlen, sublist[i], 7) ;
+ memcpy(sub + repolen + 18 + setlen, s6rc_repo_sublist[i], 7) ;
if (mkdir(sub, 02755) == -1)
{
cleanup(tmp) ;