aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/deliverable.h2
-rw-r--r--include/utils.h1
-rw-r--r--src/deliverable.c7
-rw-r--r--src/utils.c22
4 files changed, 30 insertions, 2 deletions
diff --git a/include/deliverable.h b/include/deliverable.h
index b528c46..85cda6b 100644
--- a/include/deliverable.h
+++ b/include/deliverable.h
@@ -129,6 +129,8 @@ struct Delivery {
char *repository; ///< Git repository of package
char *script; ///< Commands to execute
char *build_recipe; ///< Conda recipe to build (optional)
+ char *repository_info_ref; ///< Git commit hash
+ char *repository_info_tag; ///< Git tag (first parent)
struct Runtime runtime; ///< Environment variables specific to the test context
} tests[1000]; ///< An array of tests
diff --git a/include/utils.h b/include/utils.h
index f0400fb..d32a123 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -33,6 +33,7 @@ char *find_program(const char *name);
int touch(const char *filename);
int git_clone(struct Process *proc, char *url, char *destdir, char *gitref);
char *git_describe(const char *path);
+char *git_rev_parse(const char *path, char *args);
int path_store(char **destptr, size_t maxlen, const char *base, const char *path);
#define OMC_MSG_SUCCESS 0
diff --git a/src/deliverable.c b/src/deliverable.c
index 9b5d94d..e1179a4 100644
--- a/src/deliverable.c
+++ b/src/deliverable.c
@@ -1302,7 +1302,12 @@ void delivery_tests_run(struct Delivery *ctx) {
}
}
msg(OMC_MSG_L3, "Cloning repository %s\n", ctx->tests[i].repository);
- git_clone(&proc, ctx->tests[i].repository, destdir, ctx->tests[i].version);
+ if (!git_clone(&proc, ctx->tests[i].repository, destdir, ctx->tests[i].version)) {
+ ctx->tests[i].repository_info_tag = strdup(git_describe(destdir));
+ ctx->tests[i].repository_info_ref = strdup(git_rev_parse(destdir, "HEAD"));
+ } else {
+ COE_CHECK_ABORT(!globals.continue_on_error, "Unable to clone repository\n")
+ }
if (pushd(destdir)) {
COE_CHECK_ABORT(!globals.continue_on_error, "Unable to enter repository directory\n")
diff --git a/src/utils.c b/src/utils.c
index 12cf22c..d8cf929 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -377,7 +377,27 @@ char *git_describe(const char *path) {
pushd(path);
static char version[NAME_MAX];
FILE *pp;
- pp = popen("git describe --always --tags", "r");
+ pp = popen("git describe --first-parent --always --tags", "r");
+ memset(version, 0, sizeof(version));
+ fgets(version, sizeof(version) - 1, pp);
+ strip(version);
+ pclose(pp);
+ popd();
+ return version;
+}
+
+char *git_rev_parse(const char *path, char *args) {
+ pushd(path);
+ static char version[NAME_MAX];
+ char cmd[PATH_MAX];
+ FILE *pp;
+
+ if (isempty(args)) {
+ fprintf(stderr, "git_rev_parse args cannot be empty");
+ return NULL;
+ }
+ sprintf(cmd, "git rev-parse %s", args);
+ pp = popen(cmd, "r");
memset(version, 0, sizeof(version));
fgets(version, sizeof(version) - 1, pp);
strip(version);