diff options
-rw-r--r-- | src/fetchhead.c | 6 | ||||
-rw-r--r-- | src/remote.c | 21 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/fetchhead.c b/src/fetchhead.c index 4dcebb857..77aafc8f3 100644 --- a/src/fetchhead.c +++ b/src/fetchhead.c @@ -74,6 +74,7 @@ static int fetchhead_ref_write( { char oid[GIT_OID_HEXSZ + 1]; const char *type, *name; + int head = 0; assert(file && fetchhead_ref); @@ -87,11 +88,16 @@ static int fetchhead_ref_write( GIT_REFS_TAGS_DIR) == 0) { type = "tag "; name = fetchhead_ref->ref_name + strlen(GIT_REFS_TAGS_DIR); + } else if (!git__strcmp(fetchhead_ref->ref_name, GIT_HEAD_FILE)) { + head = 1; } else { type = ""; name = fetchhead_ref->ref_name; } + if (head) + return git_filebuf_printf(file, "%s\t\t%s\n", oid, fetchhead_ref->remote_url); + return git_filebuf_printf(file, "%s\t%s\t%s'%s' of %s\n", oid, (fetchhead_ref->is_merge) ? "" : "not-for-merge", diff --git a/src/remote.c b/src/remote.c index 3528b1c46..2b611aabc 100644 --- a/src/remote.c +++ b/src/remote.c @@ -1032,6 +1032,27 @@ int git_remote_update_tips(git_remote *remote) goto out; } + /* If we have no refspecs, update HEAD -> FETCH_HEAD manually */ + if (remote->refspecs.length == 0 && refs.length > 0 && git_remote_update_fetchhead(remote)) { + git_vector vec; + git_refspec headspec; + + if (git_refspec__parse(&headspec, "HEAD", true) < 0) + goto out; + + if (git_vector_init(&vec, 1, NULL) < 0) { + goto out; + } + + if (git_vector_insert(&vec, git_vector_get(&refs, 0)) < 0) { + git_vector_free(&vec); + goto out; + } + + error = git_remote_write_fetchhead(remote, &headspec, &vec); + git_vector_free(&vec); + } + out: git_refspec__free(&tagspec); git_vector_free(&refs); |