diff options
| author | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-10-04 00:30:01 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-10-08 02:28:02 +0200 |
| commit | 517bda196e711b8fdf39735e74112503bbd8fcee (patch) | |
| tree | b4ed3c1df9460ebbcfdc2f1485a0f31b6d5a3678 /src/remote.c | |
| parent | 4a3b18a62f99c836900c76d480ae33933098461c (diff) | |
| download | libgit2-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.c | 17 |
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; |
