Commit fc78488b by Vicent Marti

Merge pull request #2175 from Yogu/submodule-resolve-url

Add git_submodule_resolve_url()
parents 4a8692f6 52fba18f
...@@ -272,6 +272,16 @@ GIT_EXTERN(const char *) git_submodule_path(git_submodule *submodule); ...@@ -272,6 +272,16 @@ GIT_EXTERN(const char *) git_submodule_path(git_submodule *submodule);
GIT_EXTERN(const char *) git_submodule_url(git_submodule *submodule); GIT_EXTERN(const char *) git_submodule_url(git_submodule *submodule);
/** /**
* Resolve a submodule url relative to the given repository.
*
* @param out buffer to store the absolute submodule url in
* @param repository Pointer to repository object
* @param url Relative url
* @return 0 or an error code
*/
GIT_EXTERN(int) git_submodule_resolve_url(git_buf *out, git_repository *repo, const char *url);
/**
* Get the branch for the submodule. * Get the branch for the submodule.
* *
* @param submodule Pointer to submodule object * @param submodule Pointer to submodule object
......
...@@ -229,16 +229,7 @@ int git_submodule_add_setup( ...@@ -229,16 +229,7 @@ int git_submodule_add_setup(
} }
/* resolve parameters */ /* resolve parameters */
error = git_submodule_resolve_url(&real_url, repo, url);
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;
}
if (error) if (error)
goto cleanup; goto cleanup;
...@@ -533,6 +524,25 @@ const char *git_submodule_url(git_submodule *submodule) ...@@ -533,6 +524,25 @@ const char *git_submodule_url(git_submodule *submodule)
return submodule->url; 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) const char *git_submodule_branch(git_submodule *submodule)
{ {
assert(submodule); assert(submodule);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment