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 | |
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
-rw-r--r-- | src/lib/core/utils.c | 39 | ||||
-rw-r--r-- | src/lib/delivery/delivery_build.c | 6 | ||||
-rw-r--r-- | tests/test_recipe.c | 2 |
3 files changed, 37 insertions, 10 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); diff --git a/tests/test_recipe.c b/tests/test_recipe.c index 7c55cd5..531b3b4 100644 --- a/tests/test_recipe.c +++ b/tests/test_recipe.c @@ -94,8 +94,6 @@ int main(int argc, char *argv[]) { STASIS_TEST_FUNC *tests[] = { test_recipe_clone, }; - mkdir("workspace", 0755); - pushd("workspace"); STASIS_TEST_RUN(tests); popd(); STASIS_TEST_END_MAIN(); |