diff options
| author | Joseph Hunkeler <jhunkeler@users.noreply.github.com> | 2025-06-30 15:44:35 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-30 15:44:35 -0400 | 
| commit | 983074bc6f355f2023b6a1475e9bb252881c5d28 (patch) | |
| tree | 839fb2ec6153496f643bdded0bce9ba728eb0add | |
| parent | 9c85b01ce13fae21f45719c18483cb65f2874a67 (diff) | |
| parent | 62728c208a31c4667927408f109838ddda5d58e1 (diff) | |
| download | stasis-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.h | 5 | ||||
| -rw-r--r-- | src/lib/core/utils.c | 28 | ||||
| -rw-r--r-- | src/lib/delivery/delivery_install.c | 2 | 
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"); | 
