diff options
| author | Joseph Hunkeler <jhunkeler@users.noreply.github.com> | 2024-12-17 18:55:22 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-17 18:55:22 -0500 | 
| commit | 8186ad89bbd7cfab65700045eaa9b26f8f877bfb (patch) | |
| tree | 8b847980830527df2a03613556aaf7faab258865 /src | |
| parent | 6c0355d9802b83938de388b444021f34cf9b9506 (diff) | |
| parent | d664bef4e570647f85d6000170dba7e63807facc (diff) | |
| download | stasis-8186ad89bbd7cfab65700045eaa9b26f8f877bfb.tar.gz | |
Merge pull request #77 from jhunkeler/fix-git-clone-return
Fix git_clone return
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/core/utils.c | 39 | ||||
| -rw-r--r-- | src/lib/delivery/delivery_build.c | 6 | 
2 files changed, 37 insertions, 8 deletions
| diff --git a/src/lib/core/utils.c b/src/lib/core/utils.c index aa4173c..621831c 100644 --- a/src/lib/core/utils.c +++ b/src/lib/core/utils.c @@ -307,39 +307,64 @@ int touch(const char *filename) {  }  int git_clone(struct Process *proc, char *url, char *destdir, char *gitref) { -    int result = -1; +    int result = 0;      char *chdir_to = NULL;      char *program = find_program("git");      if (!program) { -        return result; +        result = -1; +        goto die_quick;      } -    static char command[PATH_MAX]; +    static char command[PATH_MAX] = {0};      sprintf(command, "%s clone -c advice.detachedHead=false --recursive %s", program, url); +      if (destdir && access(destdir, F_OK) < 0) { +        // Destination directory does not exist          sprintf(command + strlen(command), " %s", destdir); +        // Clone the repo          result = shell(proc, command); +        if (result) { +            goto die_quick; +        }      }      if (destdir) {          chdir_to = destdir;      } else { +        // Assume the name of the directory to be the basename of the URL +        // like it is when executed in a shell session          chdir_to = path_basename(url);      } -    pushd(chdir_to); -    { +    if (!pushd(chdir_to)) {          memset(command, 0, sizeof(command));          sprintf(command, "%s fetch --all", program); -        result += shell(proc, command); +        result = shell(proc, command); +        if (result) { +            goto die_pop; +        }          if (gitref != NULL) {              memset(command, 0, sizeof(command));              sprintf(command, "%s checkout %s", program, gitref); -            result += shell(proc, command); + +            result = shell(proc, command); +            if (result) { +                goto die_pop; +            }          }          popd(); +    } else { +        result = -1; +        goto die_quick;      } +    return 0; + +    die_pop: +    // close out last pushd() call +    popd(); + +    die_quick:      return result;  } diff --git a/src/lib/delivery/delivery_build.c b/src/lib/delivery/delivery_build.c index fa19f95..03f2d4c 100644 --- a/src/lib/delivery/delivery_build.c +++ b/src/lib/delivery/delivery_build.c @@ -154,7 +154,11 @@ struct StrList *delivery_build_wheels(struct Delivery *ctx) {                  memset(wheeldir, 0, sizeof(wheeldir));                  sprintf(srcdir, "%s/%s", ctx->storage.build_sources_dir, ctx->tests[i].name); -                git_clone(&proc, ctx->tests[i].repository, srcdir, ctx->tests[i].version); +                if (git_clone(&proc, ctx->tests[i].repository, srcdir, ctx->tests[i].version)) { +                    SYSERROR("Unable to checkout tag '%s' for package '%s' from repository '%s'\n", +                    ctx->tests[i].version, ctx->tests[i].name, ctx->tests[i].repository); +                    return NULL; +                }                  if (ctx->tests[i].repository_remove_tags && strlist_count(ctx->tests[i].repository_remove_tags)) {                      filter_repo_tags(srcdir, ctx->tests[i].repository_remove_tags); | 
