fetch: support fetching from a shallow repository
This patch just put together pieces from the 8 steps patch. We stop at step 7 and reject refs that require new shallow commits. Note that, by rejecting refs that require new shallow commits, we leave dangling objects in the repo, which become "object islands" by the next "git fetch" of the same source. If the first fetch our "ours" set is zero and we do practically nothing at step 7, "ours" is full at the next fetch and we may need to walk through commits for reachability test. Room for improvement. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
beea4152d9
commit
4820a33baa
@ -405,6 +405,8 @@ static int iterate_ref_map(void *cb_data, unsigned char sha1[20])
|
||||
struct ref **rm = cb_data;
|
||||
struct ref *ref = *rm;
|
||||
|
||||
while (ref && ref->status == REF_STATUS_REJECT_SHALLOW)
|
||||
ref = ref->next;
|
||||
if (!ref)
|
||||
return -1; /* end of the list */
|
||||
*rm = ref->next;
|
||||
@ -451,6 +453,13 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
|
||||
struct ref *ref = NULL;
|
||||
const char *merge_status_marker = "";
|
||||
|
||||
if (rm->status == REF_STATUS_REJECT_SHALLOW) {
|
||||
if (want_status == FETCH_HEAD_MERGE)
|
||||
warning(_("reject %s because shallow roots are not allowed to be updated"),
|
||||
rm->peer_ref ? rm->peer_ref->name : rm->name);
|
||||
continue;
|
||||
}
|
||||
|
||||
commit = lookup_commit_reference_gently(rm->old_sha1, 1);
|
||||
if (!commit)
|
||||
rm->fetch_head_status = FETCH_HEAD_NOT_FOR_MERGE;
|
||||
|
Reference in New Issue
Block a user