When downloading the default branch due to lack of refspecs, we still
need to write out FETCH_HEAD with the tip we downloaded, unfortunately
with a format that doesn't match what we already have.
{
char oid[GIT_OID_HEXSZ + 1];
const char *type, *name;
+ int head = 0;
assert(file && fetchhead_ref);
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",
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);