diff options
| author | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-04-02 18:41:25 -0400 | 
|---|---|---|
| committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-04-02 18:55:49 -0400 | 
| commit | 4ca5b5d3b5dccb008b4d61643109ce7a6c661203 (patch) | |
| tree | 1e768046ce0951add02fe771aea3e91502ee36b5 /src | |
| parent | f46098c9d4444d38ae0a423b8de6e6c68adb2e54 (diff) | |
| download | stasis-4ca5b5d3b5dccb008b4d61643109ce7a6c661203.tar.gz | |
Refactor delivery_rewrite_spec()
Diffstat (limited to 'src')
| -rw-r--r-- | src/deliverable.c | 67 | 
1 files changed, 30 insertions, 37 deletions
| diff --git a/src/deliverable.c b/src/deliverable.c index 1da66b0..3d8179c 100644 --- a/src/deliverable.c +++ b/src/deliverable.c @@ -1294,7 +1294,6 @@ char *delivery_get_release_header(struct Delivery *ctx) {  }  void delivery_rewrite_spec(struct Delivery *ctx, char *filename) { -    char *package_name = NULL;      char output[PATH_MAX];      char *header = NULL;      char *tempfile = NULL; @@ -1352,47 +1351,41 @@ void delivery_rewrite_spec(struct Delivery *ctx, char *filename) {      } else {          msg(OMC_MSG_WARN, "conda_staging_url is not configured. References to \"local\" channel will not be replaced\n", filename);      } +    // Rewrite tested packages to point to tested code, at their defined verison +    for (size_t i = 0; i < strlist_count(ctx->conda.wheels_packages); i++) { +        struct Wheel *wheelfile = NULL; +        char *package_name_tmp = NULL; -    // Rewrite tested packages to point to tested code, at a defined verison -    for (size_t i = 0; i < strlist_count(ctx->conda.pip_packages_defer); i++) { -        package_name = strlist_item(ctx->conda.pip_packages_defer, i); -        char target[PATH_MAX]; -        char replacement[PATH_MAX]; -        //struct Wheel *wheelfile; +        package_name_tmp = strlist_item(ctx->conda.wheels_packages, i); +        if (!package_name_tmp) { +            SYSERROR("wheel_package claims to have %zu records, " +                     "but the package at index %zu was NULL\n", strlist_count(ctx->conda.wheels_packages), i); +            continue; +        } + +        char **parts = split(package_name_tmp, "-", 0); +        if (parts && parts[0]) { +            wheelfile = get_wheel_file(ctx->storage.wheel_artifact_dir, parts[0], (char *[]) {parts[1], parts[2], parts[3], NULL}); +            guard_free(parts); +        } +        if (!wheelfile) { +            SYSERROR("Wheel package '%s/%s' no longer exists!\n", ctx->storage.wheel_artifact_dir, package_name_tmp); +            continue; +        } + +        char target[OMC_NAME_MAX]; +        char replacement[OMC_NAME_MAX];          memset(target, 0, sizeof(target));          memset(replacement, 0, sizeof(replacement)); -        sprintf(target, "    - %s", package_name); -        // TODO: I still want to use wheels for this but tagging semantics are getting in the way. -        // When someone pushes a lightweight tag setuptools_scm will not resolve the expected -        // refs unless the following is present in pyproject.toml, setup.cfg, or setup.py: -        // -        // git_describe_command = "git describe --tags" # at the bare minimum -        // - -        //char abi[NAME_MAX]; -        //strcpy(abi, ctx->meta.python); -        //strchrdel(abi, "."); - -        //char source_dir[PATH_MAX]; -        //sprintf(source_dir, "%s/%s", ctx->storage.build_sources_dir, package_name); -        //wheelfile = get_wheel_file(ctx->storage.wheel_artifact_dir, package_name, (char *[]) {git_describe(source_dir), abi, ctx->system.arch, NULL}); -        //if (wheelfile) { -        //    sprintf(replacement, "    - %s/%s", ctx->storage.wheel_staging_url, wheelfile->file_name); -        //    file_replace_text(filename, target, replacement); -        //} -        // end of TODO - -        char *requirement = requirement_from_test(ctx, package_name); -        if (requirement) { -            sprintf(replacement, "    - %s", requirement); -            file_replace_text(filename, target, replacement); -        } else { -            fprintf(stderr, "an error occurred while rewriting a release artifact: %s\n", filename); -            fprintf(stderr, "mapping a replacement value for package defined by '[test:%s]' failed: %s\n", package_name, package_name); -            fprintf(stderr, "target string in artifact was:\n%s\n", target); -            exit(1); + +        sprintf(target, "- %s==", wheelfile->distribution); +        sprintf(replacement, "- %s/%s", ctx->storage.wheel_staging_url, wheelfile->file_name); +        if (file_replace_text(filename, target, replacement, REPLACE_TRUNCATE_AFTER_MATCH)) { +            SYSERROR("file_replace_text failed for file %s: target: %s, replacement: %s", +                     filename, target, replacement);          } +      }  } | 
