diff options
Diffstat (limited to 'src/recipe.c')
| -rw-r--r-- | src/recipe.c | 63 | 
1 files changed, 63 insertions, 0 deletions
| diff --git a/src/recipe.c b/src/recipe.c new file mode 100644 index 0000000..6f6eeab --- /dev/null +++ b/src/recipe.c @@ -0,0 +1,63 @@ +#include "recipe.h" + +int recipe_clone(char *recipe_dir, char *url, char *gitref, char **result) { +    struct Process proc; +    char destdir[PATH_MAX]; +    char *reponame = NULL; + +    memset(&proc, 0, sizeof(proc)); +    memset(destdir, 0, sizeof(destdir)); +    reponame = path_basename(url); + +    sprintf(destdir, "%s/%s", recipe_dir, reponame); +    if (!*result) { +        *result = calloc(PATH_MAX, sizeof(*result)); +        if (!*result) { +            return -1; +        } +    } +    strncpy(*result, destdir, PATH_MAX - 1); + +    if (!access(destdir, F_OK)) { +        if (!strcmp(destdir, "/")) { +            fprintf(stderr, "OHMYCAL is misconfigured. Please check your output path(s) immediately.\n"); +            fprintf(stderr, "recipe_dir = '%s'\nreponame = '%s'\ndestdir = '%s'\n", +                    recipe_dir, reponame, destdir); +        } +        if (rmtree(destdir)) { +            free(*result); +            *result = NULL; +            return -1; +        } +    } +    return git_clone(&proc, url, destdir, gitref); +} + + +int recipe_get_type(char *repopath) { +    int result; +    char path[PATH_MAX]; +    // conda-forge is a collection of repositories +    // "conda-forge.yml" is guaranteed to exist +    const char *marker[] = { +            "conda-forge.yml", +            "stsci", +            "meta.yaml", +            NULL +    }; +    const int type[] = { +            RECIPE_TYPE_CONDA_FORGE, +            RECIPE_TYPE_ASTROCONDA, +            RECIPE_TYPE_GENERIC +    }; + +    for (size_t i = 0; marker[i] != NULL; i++) { +        sprintf(path, "%s/%s", repopath, marker[i]); +        result = access(path, F_OK); +        if (!result) { +            return type[i]; +        } +    } + +    return RECIPE_TYPE_UNKNOWN; +}
\ No newline at end of file | 
