summaryrefslogtreecommitdiff
path: root/src/remote.c
diff options
context:
space:
mode:
authorCarlos Martín Nieto <carlos@cmartin.tk>2011-10-04 00:30:01 +0200
committerCarlos Martín Nieto <carlos@cmartin.tk>2011-10-08 02:28:02 +0200
commit517bda196e711b8fdf39735e74112503bbd8fcee (patch)
treeb4ed3c1df9460ebbcfdc2f1485a0f31b6d5a3678 /src/remote.c
parent4a3b18a62f99c836900c76d480ae33933098461c (diff)
downloadlibgit2-517bda196e711b8fdf39735e74112503bbd8fcee.tar.gz
fetch: store FETCH_HEAD
We should always save the remote's HEAD as FETCH_HEAD locally. Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
Diffstat (limited to 'src/remote.c')
-rw-r--r--src/remote.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/remote.c b/src/remote.c
index f581b973f..a557a4930 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -219,7 +219,7 @@ int git_remote_download(char **filename, git_remote *remote)
int git_remote_update_tips(struct git_remote *remote)
{
int error = GIT_SUCCESS;
- unsigned int i;
+ unsigned int i = 0;
char refname[GIT_PATH_MAX];
git_headarray *refs = &remote->refs;
git_remote_head *head;
@@ -228,8 +228,21 @@ int git_remote_update_tips(struct git_remote *remote)
memset(refname, 0x0, sizeof(refname));
- for (i = 0; i < refs->len; ++i) {
+ if (refs->len == 0)
+ return GIT_SUCCESS;
+
+ /* HEAD is only allowed to be the first in the list */
+ head = refs->heads[0];
+ if (!strcmp(head->name, GIT_HEAD_FILE)) {
+ error = git_reference_create_oid(&ref, remote->repo, GIT_FETCH_HEAD_FILE, &head->oid, 1);
+ i = 1;
+ if (error < GIT_SUCCESS)
+ return git__rethrow(error, "Failed to update FETCH_HEAD");
+ }
+
+ for (; i < refs->len; ++i) {
head = refs->heads[i];
+
error = git_refspec_transform(refname, sizeof(refname), spec, head->name);
if (error < GIT_SUCCESS)
return error;