aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@users.noreply.github.com>2025-06-30 15:44:35 -0400
committerGitHub <noreply@github.com>2025-06-30 15:44:35 -0400
commit983074bc6f355f2023b6a1475e9bb252881c5d28 (patch)
tree839fb2ec6153496f643bdded0bce9ba728eb0add
parent9c85b01ce13fae21f45719c18483cb65f2874a67 (diff)
parent62728c208a31c4667927408f109838ddda5d58e1 (diff)
downloadstasis-983074bc6f355f2023b6a1475e9bb252881c5d28.tar.gz
Merge pull request #113 from jhunkeler/allow-hashes-as-version
Allow hashes as version
-rw-r--r--src/lib/core/include/utils.h5
-rw-r--r--src/lib/core/utils.c28
-rw-r--r--src/lib/delivery/delivery_install.c2
3 files changed, 34 insertions, 1 deletions
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;
+}
+
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");