diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/remote.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/remote.c b/src/remote.c index 75f2dc700..618e8f083 100644 --- a/src/remote.c +++ b/src/remote.c @@ -31,6 +31,7 @@ #include "repository.h" #include "remote.h" #include "fetch.h" +#include "refs.h" static int refspec_parse(git_refspec *refspec, const char *str) { @@ -218,6 +219,32 @@ git_headarray *git_remote_tips(git_remote *remote) return &remote->refs; } +int git_remote_update_tips(struct git_remote *remote) +{ + int error = GIT_SUCCESS; + unsigned int i; + char refname[GIT_PATH_MAX]; + git_headarray *refs = &remote->refs; + git_remote_head *head; + git_reference *ref; + struct git_refspec *spec = &remote->fetch; + + memset(refname, 0x0, sizeof(refname)); + + for (i = 0; i < refs->len; ++i) { + head = refs->heads[i]; + error = git_refspec_transform(refname, sizeof(refname), spec, head->name); + if (error < GIT_SUCCESS) + return error; + + error = git_reference_create_oid(&ref, remote->repo, refname, &head->oid, 1); + if (error < GIT_SUCCESS) + return error; + } + + return GIT_SUCCESS; +} + void git_remote_free(git_remote *remote) { free(remote->fetch.src); |