mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-05 15:33:51 +00:00
Add git_submodule_resolve_url()
This commit is contained in:
parent
6de018bbf1
commit
52fba18f4e
@ -271,6 +271,16 @@ GIT_EXTERN(const char *) git_submodule_path(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.
|
||||
*
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user