Commit 441f57c2 by Carlos Martín Nieto Committed by Vicent Marti

Add git_remote_update_tips

This function updates the references in the local reference storage to
match the ones in the remote.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
parent c1af5a39
......@@ -141,6 +141,16 @@ GIT_EXTERN(int) git_remote_download(char **filename, git_remote *remote);
*/
GIT_EXTERN(void) git_remote_free(struct git_remote *remote);
/**
* Update the tips to the new state
*
* Make sure that you only call this once you've successfully indexed
* or expanded the packfile.
*
* @param remote the remote to update
*/
GIT_EXTERN(int) git_remote_update_tips(struct git_remote *remote);
/** @} */
GIT_END_DECL
#endif
......@@ -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);
......
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