diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-03-14 15:57:35 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-03-14 15:57:35 -0400 |
commit | 0989e9a39059a11d9b123bd6fe2b9a7090d6f033 (patch) | |
tree | d2e5c62825b5f325e84386e5fdf7e3d614d8dc72 | |
parent | 4e1492f0fa3a48e5fa88d8623e47e50bb8527c87 (diff) | |
download | stasis-0989e9a39059a11d9b123bd6fe2b9a7090d6f033.tar.gz |
Splits OMC directory creation into two stages
* Stage 1: Initialize base directories (omc/root, omc/build, etc)
* Stage 2: Initialize output directories (omc/output, etc)
* Output directory now provides a unique parent directory name to avoid clobbering previously delivered data
-rw-r--r-- | src/deliverable.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/deliverable.c b/src/deliverable.c index f926724..1f13ea0 100644 --- a/src/deliverable.c +++ b/src/deliverable.c @@ -179,7 +179,17 @@ void delivery_free(struct Delivery *ctx) { } } -void delivery_init_dirs(struct Delivery *ctx) { +void delivery_init_dirs_stage2(struct Delivery *ctx) { + path_store(&ctx->storage.output_dir, PATH_MAX, ctx->storage.output_dir, ctx->info.build_name); + path_store(&ctx->storage.delivery_dir, PATH_MAX, ctx->storage.output_dir, "delivery"); + path_store(&ctx->storage.results_dir, PATH_MAX, ctx->storage.output_dir, "results"); + path_store(&ctx->storage.package_dir, PATH_MAX, ctx->storage.output_dir, "packages"); + path_store(&ctx->storage.conda_artifact_dir, PATH_MAX, ctx->storage.package_dir, "conda"); + path_store(&ctx->storage.wheel_artifact_dir, PATH_MAX, ctx->storage.package_dir, "wheels"); + path_store(&ctx->storage.docker_artifact_dir, PATH_MAX, ctx->storage.package_dir, "docker"); +} + +void delivery_init_dirs_stage1(struct Delivery *ctx) { char *rootdir = getenv("OMC_ROOT"); if (rootdir) { if (isempty(rootdir)) { @@ -201,11 +211,6 @@ void delivery_init_dirs(struct Delivery *ctx) { path_store(&ctx->storage.build_docker_dir, PATH_MAX, ctx->storage.build_dir, "docker"); path_store(&ctx->storage.output_dir, PATH_MAX, ctx->storage.root, "output"); - path_store(&ctx->storage.delivery_dir, PATH_MAX, ctx->storage.output_dir, "delivery"); - path_store(&ctx->storage.package_dir, PATH_MAX, ctx->storage.output_dir, "packages"); - path_store(&ctx->storage.conda_artifact_dir, PATH_MAX, ctx->storage.package_dir, "conda"); - path_store(&ctx->storage.wheel_artifact_dir, PATH_MAX, ctx->storage.package_dir, "wheels"); - path_store(&ctx->storage.docker_artifact_dir, PATH_MAX, ctx->storage.package_dir, "docker"); if (!ctx->storage.mission_dir) { path_store(&ctx->storage.mission_dir, PATH_MAX, globals.sysconfdir, "mission"); @@ -368,7 +373,7 @@ int delivery_init(struct Delivery *ctx, struct INIFILE *ini, struct INIFILE *cfg delivery_init_platform(ctx); // Create OMC directory structure - delivery_init_dirs(ctx); + delivery_init_dirs_stage1(ctx); // add tools to PATH char pathvar_tmp[OMC_BUFSIZ]; @@ -486,6 +491,9 @@ int delivery_init(struct Delivery *ctx, struct INIFILE *ini, struct INIFILE *cfg delivery_format_str(ctx, &ctx->info.build_name, ctx->rules.build_name_fmt); delivery_format_str(ctx, &ctx->info.build_number, ctx->rules.build_number_fmt); + // Best I can do to make output directories unique. Annoying. + delivery_init_dirs_stage2(ctx); + ctx->conda.conda_packages_defer = strlist_init(); ctx->conda.pip_packages_defer = strlist_init(); |