summaryrefslogtreecommitdiff
path: root/src/submodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/submodule.c')
-rw-r--r--src/submodule.c30
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);