diff options
Diffstat (limited to 'src/submodule.c')
-rw-r--r-- | src/submodule.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/submodule.c b/src/submodule.c index 2388bd144..2fe7f1dcb 100644 --- a/src/submodule.c +++ b/src/submodule.c @@ -229,16 +229,7 @@ int git_submodule_add_setup( } /* resolve parameters */ - - if (url[0] == '.' && (url[1] == '/' || (url[1] == '.' && url[2] == '/'))) { - if (!(error = lookup_head_remote(&real_url, repo))) - error = git_path_apply_relative(&real_url, url); - } else if (strchr(url, ':') != NULL || url[0] == '/') { - error = git_buf_sets(&real_url, url); - } else { - giterr_set(GITERR_SUBMODULE, "Invalid format for submodule URL"); - error = -1; - } + error = git_submodule_resolve_url(&real_url, repo, url); if (error) goto cleanup; @@ -533,6 +524,25 @@ const char *git_submodule_url(git_submodule *submodule) return submodule->url; } +int git_submodule_resolve_url(git_buf *out, git_repository *repo, const char *url) +{ + assert(url); + + int error = 0; + + if (url[0] == '.' && (url[1] == '/' || (url[1] == '.' && url[2] == '/'))) { + if (!(error = lookup_head_remote(out, repo))) + error = git_path_apply_relative(out, url); + } else if (strchr(url, ':') != NULL || url[0] == '/') { + error = git_buf_sets(out, url); + } else { + giterr_set(GITERR_SUBMODULE, "Invalid format for submodule URL"); + error = -1; + } + + return error; +} + const char *git_submodule_branch(git_submodule *submodule) { assert(submodule); |