From: Junio C Hamano Date: Thu, 08 Aug 2013 17:10:59 GMT Subject: Re: [RFC PATCH] During a shallow fetch, prevent sending over unneeded objects Message-ID: <7v1u64az18.fsf@alter.siamese.dyndns.org> In-Reply-To: Duy Nguyen writes: > I fail to see the point here. There are two different things: what we > want to send, and what we can make deltas against. Shallow boundary > affects the former. What the recipient has affects latter. What is the > twist about? do_rev_list() --> mark_edges_uninteresting() --> show_edge() callchain that eventually does this: static void show_edge(struct commit *commit) { fprintf(pack_pipe, "-%s\n", sha1_to_hex(commit->object.sha1)); } was what I had in mind. For a non-shallow transfer, feeding "-" is done for commits that we do not send (we do not do so for all of them) and those that we know the recipient does have. Two different things used to be the same, but with your suggestion they are not. Which is a good thing but we need to be careful to make sure existing codepaths do not conflate them and untangle ones that do if there are any, that's all. > As for considering objects before shallow boundary uninteresting, I > have a plan for it: kill upload-pack.c:do_rev_list(). The function is > created to make a cut at shallow boundary,... Hmph, that function is not primarily about shallow boundary but does all packing in general. The edge hinting in there is for thin transfer where the sender sends deltas against base objects that are known to be present in the receiving repository, without sending the base objects.