diff options
| author | Joseph Hunkeler <jhunkeler@users.noreply.github.com> | 2024-10-22 11:04:17 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-22 11:04:17 -0400 | 
| commit | 7729d546d2dbda85ca1d86a913e97b51487355ba (patch) | |
| tree | e9a0e7f9f2069ecd9e718dd66d3e11fa7a80722d /src | |
| parent | 8edc87d51900ccf7d1d67ad3647a4b8fa2d9b7ae (diff) | |
| parent | 30f48145d1a1c747c40f94e2a7314d4bdf61cf55 (diff) | |
| download | stasis-7729d546d2dbda85ca1d86a913e97b51487355ba.tar.gz | |
Merge pull request #63 from jhunkeler/update-tests
Update tests / Bug fixes
Diffstat (limited to 'src')
| -rw-r--r-- | src/cli/stasis/stasis_main.c | 17 | ||||
| -rw-r--r-- | src/lib/core/conda.c | 15 | ||||
| -rw-r--r-- | src/lib/core/delivery.c | 14 | ||||
| -rw-r--r-- | src/lib/core/delivery_init.c | 2 | ||||
| -rw-r--r-- | src/lib/core/multiprocessing.c | 12 | 
5 files changed, 41 insertions, 19 deletions
| diff --git a/src/cli/stasis/stasis_main.c b/src/cli/stasis/stasis_main.c index 5325892..c2443d7 100644 --- a/src/cli/stasis/stasis_main.c +++ b/src/cli/stasis/stasis_main.c @@ -332,14 +332,15 @@ int main(int argc, char *argv[]) {          exit(1);      } -    delivery_gather_tool_versions(&ctx); -    if (!ctx.conda.tool_version) { -        msg(STASIS_MSG_ERROR | STASIS_MSG_L2, "Could not determine conda version\n"); -        exit(1); -    } -    if (!ctx.conda.tool_build_version) { -        msg(STASIS_MSG_ERROR | STASIS_MSG_L2, "Could not determine conda-build version\n"); -        exit(1); +    if (delivery_gather_tool_versions(&ctx)) { +        if (!ctx.conda.tool_version) { +            msg(STASIS_MSG_ERROR | STASIS_MSG_L2, "Could not determine conda version\n"); +            exit(1); +        } +        if (!ctx.conda.tool_build_version) { +            msg(STASIS_MSG_ERROR | STASIS_MSG_L2, "Could not determine conda-build version\n"); +            exit(1); +        }      }      if (pip_exec("install build")) { diff --git a/src/lib/core/conda.c b/src/lib/core/conda.c index 35caf02..25069f8 100644 --- a/src/lib/core/conda.c +++ b/src/lib/core/conda.c @@ -109,7 +109,7 @@ int pip_index_provides(const char *index_url, const char *spec) {      strcpy(proc.f_stdout, logfile);      // Do an installation in dry-run mode to see if the package exists in the given index. -    snprintf(cmd, sizeof(cmd) - 1, "python -m pip install --dry-run --no-deps --index-url=%s %s", index_url, spec_local); +    snprintf(cmd, sizeof(cmd) - 1, "python -m pip install --dry-run --no-cache --no-deps --index-url=%s '%s'", index_url, spec_local);      status = shell(&proc, cmd);      // Print errors only when shell() itself throws one @@ -443,6 +443,15 @@ char *conda_get_active_environment() {  int conda_provides(const char *spec) {      struct Process proc;      memset(&proc, 0, sizeof(proc)); + +    // Short circuit: +    // Running "mamba search" without an argument will print every package in +    // all channels, then return "found". Prevent this. +    // No data implies "not found". +    if (isempty((char *) spec)) { +        return 0; +    } +      strcpy(proc.f_stdout, "/dev/null");      strcpy(proc.f_stderr, "/dev/null"); @@ -450,12 +459,12 @@ int conda_provides(const char *spec) {      // conda_exec() expects the program output to be visible to the user.      // For this operation we only need the exit value.      char cmd[PATH_MAX] = {0}; -    snprintf(cmd, sizeof(cmd) - 1, "mamba search --use-index-cache %s", spec); +    snprintf(cmd, sizeof(cmd) - 1, "mamba search %s", spec);      if (shell(&proc, cmd) < 0) {          fprintf(stderr, "shell: %s", strerror(errno));          return -1;      } -    return proc.returncode == 0; +    return proc.returncode == 0; // 0=not_found, 1=found  }  int conda_index(const char *path) { diff --git a/src/lib/core/delivery.c b/src/lib/core/delivery.c index e32ed4c..5645dcc 100644 --- a/src/lib/core/delivery.c +++ b/src/lib/core/delivery.c @@ -302,16 +302,22 @@ void delivery_defer_packages(struct Delivery *ctx, int type) {      }  } -void delivery_gather_tool_versions(struct Delivery *ctx) { -    int status = 0; +int delivery_gather_tool_versions(struct Delivery *ctx) { +    int status_tool_version = 0; +    int status_tool_build_version = 0;      // Extract version from tool output -    ctx->conda.tool_version = shell_output("conda --version", &status); +    ctx->conda.tool_version = shell_output("conda --version", &status_tool_version);      if (ctx->conda.tool_version)          strip(ctx->conda.tool_version); -    ctx->conda.tool_build_version = shell_output("conda build --version", &status); +    ctx->conda.tool_build_version = shell_output("conda build --version", &status_tool_build_version);      if (ctx->conda.tool_build_version)          strip(ctx->conda.tool_version); + +    if (status_tool_version || status_tool_build_version) { +        return 1; +    } +    return 0;  } diff --git a/src/lib/core/delivery_init.c b/src/lib/core/delivery_init.c index e914f99..2333628 100644 --- a/src/lib/core/delivery_init.c +++ b/src/lib/core/delivery_init.c @@ -257,7 +257,7 @@ int delivery_init(struct Delivery *ctx, int render_mode) {      char cache_local[PATH_MAX];      sprintf(cache_local, "%s/%s", ctx->storage.tmpdir, "cache"); -    setenv("XDG_CACHE_HOME", ctx->storage.tmpdir, 1); +    setenv("XDG_CACHE_HOME", cache_local, 1);      // add tools to PATH      char pathvar_tmp[STASIS_BUFSIZ]; diff --git a/src/lib/core/multiprocessing.c b/src/lib/core/multiprocessing.c index 484c566..252bab9 100644 --- a/src/lib/core/multiprocessing.c +++ b/src/lib/core/multiprocessing.c @@ -98,7 +98,7 @@ struct MultiProcessingTask *mp_pool_task(struct MultiProcessingPool *pool, const      }      // Set default status to "error" -    slot->status = -1; +    slot->status = MP_POOL_TASK_STATUS_INITIAL;      // Set task identifier string      memset(slot->ident, 0, sizeof(slot->ident)); @@ -169,7 +169,13 @@ void mp_pool_show_summary(struct MultiProcessingPool *pool) {      for (size_t i = 0; i < pool->num_used; i++) {          struct MultiProcessingTask *task = &pool->task[i];          char status_str[10] = {0}; -        if (!task->status && !task->signaled_by) { + +        if (task->status == MP_POOL_TASK_STATUS_INITIAL && task->pid == MP_POOL_PID_UNUSED) { +            // You will only see this label if the task pool is killed by +            // MP_POOL_FAIL_FAST and tasks are still queued for execution +            strcpy(status_str, "HOLD"); +        } else if (!task->status && !task->signaled_by) { +              strcpy(status_str, "DONE");          } else if (task->signaled_by) {              strcpy(status_str, "TERM"); @@ -254,7 +260,7 @@ int mp_pool_join(struct MultiProcessingPool *pool, size_t jobs, size_t flags) {          for (size_t i = lower_i; i < upper_i; i++) {              struct MultiProcessingTask *slot = &pool->task[i]; -            if (slot->status == -1) { +            if (slot->status == MP_POOL_TASK_STATUS_INITIAL) {                  if (mp_task_fork(pool, slot)) {                      fprintf(stderr, "%s: mp_task_fork failed\n", slot->ident);                      kill(0, SIGTERM); | 
