diff options
| author | dacctal <donotcontactmevia@email.invalid> | 2026-07-02 07:29:38 +0000 |
|---|---|---|
| committer | dacctal <donotcontactmevia@email.invalid> | 2026-07-02 07:29:38 +0000 |
| commit | 96463c0d8952bae8d62adec02ce9e6b79d558938 (patch) | |
| tree | d16f5bd78ea5b39b31ab88f1be071d80a1fd751e /src/pkg_create.c | |
| parent | 2c99a3d8d74f58e4cc7974c4092c82cd6095ff48 (diff) | |
pkg_create checkpoint!
Diffstat (limited to 'src/pkg_create.c')
| -rw-r--r-- | src/pkg_create.c | 59 |
1 files changed, 50 insertions, 9 deletions
diff --git a/src/pkg_create.c b/src/pkg_create.c index ebf0745..29482a9 100644 --- a/src/pkg_create.c +++ b/src/pkg_create.c @@ -44,13 +44,42 @@ static str get_pkgsrc(package_t pkg) { str_fmt(&pkg.name), str_fmt(&pkg.version)); } +static void assign_pkg_version(package_t *pkg, str *new_arg_str) { + if (str_find_char(new_arg_str, '@')) { + str tmp_arg = str_from_after_delim(new_arg_str, '@'); + if (str_find_char(new_arg_str, ',')) { + str tmp_trg = str_from_after_delim(&tmp_arg, ','); + pkg->version = str_from_after_delim(new_arg_str, '@'); + pkg->version.len -= tmp_trg.len; + str_free(&tmp_trg); + } else { + pkg->version = str_from_after_delim(new_arg_str, '@'); + } + if (str_find_char(&pkg->version, ',')) pkg->version.len--; + str_free(&tmp_arg); + pkg->name.len -= pkg->version.len + 1; + } else pkg->version = mstr("HEAD"); +} + +static void assign_pkg_target(package_t *pkg, str *new_arg_str) { + if (str_find_char(new_arg_str, ',')) { + str tmp_arg = str_from_after_delim(new_arg_str, ','); + if (str_find_char(new_arg_str, '@')) { + str tmp_ver = str_from_after_delim(&tmp_arg, '@'); + pkg->target = str_from_after_delim(new_arg_str, ','); + pkg->target.len -= tmp_ver.len; + str_free(&tmp_ver); + } else { + pkg->target = str_from_after_delim(new_arg_str, ','); + } + if (str_find_char(&pkg->target, '@')) pkg->target.len--; + str_free(&tmp_arg); + pkg->name.len -= pkg->target.len + 1; + } else pkg->target = mstr("default"); +} + package_t pkg_create(str_slc arg) { - str ver_buf = mstr("HEAD"); - package_t pkg = { - .version = ver_buf, - .is_local = false, - }; - str_free(&ver_buf); + package_t pkg = { .is_local = false, }; char cwd[MAX_PATH_LEN]; getcwd(cwd, MAX_PATH_LEN); @@ -62,9 +91,6 @@ package_t pkg_create(str_slc arg) { bool is_installed_locally = is_directory(dest_dir.data); - pkg.version = str_from_after_delim(&new_arg_str, '@'); - pkg.target = str_from_after_delim(&new_arg_str, ','); - bool is_in_repos = false; // for (size_t i = 0; i < cached_repos_count; i++) { // if (strcmp(new_arg, cached_repos[i].source_key) == 0) { @@ -73,6 +99,18 @@ package_t pkg_create(str_slc arg) { // } // } + assign_pkg_version(&pkg, &new_arg_str); + assign_pkg_target(&pkg, &new_arg_str); + if (str_find_char(&new_arg_str, '@')) { + str tmp = str_from_after_delim(&new_arg_str, '@'); + new_arg_str.len -= tmp.len + 1; + str_free(&tmp); + } + if (str_find_char(&new_arg_str, ',')) { + str tmp = str_from_after_delim(&new_arg_str, ','); + new_arg_str.len -= tmp.len + 1; + str_free(&tmp); + } if (strncmp(arg.data, "http", 4) == 0 || strncmp(arg.data, "ssh", 3) == 0) { pkg.url = new_arg_str; pkg.name = str_from_after_delim(&new_arg_str, '/'); @@ -96,6 +134,9 @@ package_t pkg_create(str_slc arg) { log_error("'%.*s' is not a valid package", str_fmt(&arg)); exit(EXIT_FAILURE); } + if (str_find_char(&new_arg_str, ',') + && str_find_char(&new_arg_str, '@') + ) pkg.name.len--; pkg.src = get_pkgsrc(pkg); str_free(&cwd_str); str_free(&dest_dir); |
