From 2ab4c05b391945e876ac6b266642e3799fc3d536 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Mon, 30 Jun 2025 11:53:31 -0400 Subject: Add helper functions * in_ascii_range: determine if the input character is within the defined range * is_git_sha: determine if the string is most likely a git commit string --- src/lib/core/include/utils.h | 5 +++++ src/lib/core/utils.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/lib/core/include/utils.h b/src/lib/core/include/utils.h index 583a8b8..1512285 100644 --- a/src/lib/core/include/utils.h +++ b/src/lib/core/include/utils.h @@ -456,4 +456,9 @@ void debug_hexdump(char *data, int len); * @return -1 on error */ int grow(size_t size_new, size_t *size_orig, char **data); + +int in_ascii_range(char c, char lower, char upper); + +#define GIT_HASH_LEN 40 +int is_git_sha(char const *hash); #endif //STASIS_UTILS_H diff --git a/src/lib/core/utils.c b/src/lib/core/utils.c index f02a7ea..3d9659d 100644 --- a/src/lib/core/utils.c +++ b/src/lib/core/utils.c @@ -966,3 +966,31 @@ int grow(const size_t size_new, size_t *size_orig, char **data) { return 0; } +int in_ascii_range(const char c, char lower, char upper) { + if (!(c >= lower && c <= upper)) { + return 0; + } + return 1; +} + +int is_git_sha(char const *hash) { + size_t result = 0; + size_t len = strlen(hash); + + if (len > GIT_HASH_LEN) { + // too long to be a git commit hash + return 0; + } + for (size_t i = 0; i < len; i++) { + if (in_ascii_range(hash[i], 'a', 'f') + || in_ascii_range(hash[i], 'A', 'F') + || in_ascii_range(hash[i], '0', '9')) { + result++; + } + } + if (result < len) { + return 0; + } + return 1; +} + -- cgit From 62728c208a31c4667927408f109838ddda5d58e1 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Mon, 30 Jun 2025 12:18:49 -0400 Subject: Allow git commit hashes in "version" field --- src/lib/delivery/delivery_install.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/delivery/delivery_install.c b/src/lib/delivery/delivery_install.c index 7badecb..9e28093 100644 --- a/src/lib/delivery/delivery_install.c +++ b/src/lib/delivery/delivery_install.c @@ -243,7 +243,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha if (INSTALL_PKG_PIP_DEFERRED & type) { struct Test *info = requirement_from_test(ctx, name); if (info) { - if (!strcmp(info->version, "HEAD")) { + if (!strcmp(info->version, "HEAD") || is_git_sha(info->version)) { struct StrList *tag_data = strlist_init(); if (!tag_data) { SYSERROR("%s", "Unable to allocate memory for tag data\n"); -- cgit