aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@users.noreply.github.com>2024-12-17 18:55:22 -0500
committerGitHub <noreply@github.com>2024-12-17 18:55:22 -0500
commit8186ad89bbd7cfab65700045eaa9b26f8f877bfb (patch)
tree8b847980830527df2a03613556aaf7faab258865
parent6c0355d9802b83938de388b444021f34cf9b9506 (diff)
parentd664bef4e570647f85d6000170dba7e63807facc (diff)
downloadstasis-8186ad89bbd7cfab65700045eaa9b26f8f877bfb.tar.gz
Merge pull request #77 from jhunkeler/fix-git-clone-return
Fix git_clone return
-rw-r--r--src/lib/core/utils.c39
-rw-r--r--src/lib/delivery/delivery_build.c6
-rw-r--r--tests/test_recipe.c2
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();