On Fri, Mar 11, 2016 at 07:47:34AM +0700, Duy Nguyen wrote: > Well, assume again that F and G are ref heads, and their respective > distance to C and D are the same (like the below graph), then "fetch > --deptch=<distance>" can mark C and D as shallow cut points because > --depth traverses from refs until the distance is met, it does not do > total exclusion ^C like rev-list. > > --- B ---- C ---- H ---- F > / / > --- D ---- E ---- G Right, so I think we would only apply the "use existing cutoffs as bounds" thing when we were not otherwise given a --depth. Because it can definitely cause us to override the depth (and there's no need to; the point is to avoid linking in all of history, and --depth already solves that). So we probably do want the client to ask "I'm not giving you a depth, but please use my existing shallows as cutoffs". I think a more interesting case here is when we have C as a cutoff, and somebody fetches "E" directly. They are part of the truncated history. So we should exclude them from a fetch of "G", but if the user asked for them directly, that probably needs to override the existing shallow cutoff. We probably want to compute the --boundary of "E ^C", but then omit from that any items that are directly in want_obj. IOW, it is OK to truncate at depth=1 due to an existing cutoff, but not at depth=0. :) That does mean we would then fetch all of the history leading up to E, but I think that's OK. If the user didn't specify --depth and they are fetching from behind the shallow-cutoff point, we don't have any real way of knowing how much they wanted (though I guess it would also be sensible to just apply depth=1 in such a case). -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html