Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > Also add some more comments in this code because it takes too long to > understand what it does (to me, who should be familiar enough to > understand this code well!) > > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- The diff is harder to read than necessary (not your fault), but splitting this into a separate helper makes sense to me. Thanks. > upload-pack.c | 39 ++++++++++++++++++++++++++------------- > 1 file changed, 26 insertions(+), 13 deletions(-) > > diff --git a/upload-pack.c b/upload-pack.c > index ee5d20b..bfb7985 100644 > --- a/upload-pack.c > +++ b/upload-pack.c > @@ -552,20 +552,10 @@ static void send_shallow(struct commit_list *result) > } > } > > -static void deepen(int depth, const struct object_array *shallows) > +static void send_unshallow(const struct object_array *shallows) > { > - struct commit_list *result = NULL; > int i; > - if (depth == INFINITE_DEPTH && !is_repository_shallow()) > - for (i = 0; i < shallows->nr; i++) { > - struct object *object = shallows->objects[i].item; > - object->flags |= NOT_SHALLOW; > - } > - else > - result = get_shallow_commits(&want_obj, depth, > - SHALLOW, NOT_SHALLOW); > - send_shallow(result); > - free_commit_list(result); > + > for (i = 0; i < shallows->nr; i++) { > struct object *object = shallows->objects[i].item; > if (object->flags & NOT_SHALLOW) { > @@ -573,7 +563,13 @@ static void deepen(int depth, const struct object_array *shallows) > packet_write(1, "unshallow %s", > oid_to_hex(&object->oid)); > object->flags &= ~CLIENT_SHALLOW; > - /* make sure the real parents are parsed */ > + /* > + * We want to _register_ "object" as shallow, but we > + * also need to traverse object's parents to deepen a > + * shallow clone. Unregister it for now so we can > + * parse and add the parents to the want list, then > + * re-register it. > + */ > unregister_shallow(object->oid.hash); > object->parsed = 0; > parse_commit_or_die((struct commit *)object); > @@ -588,6 +584,23 @@ static void deepen(int depth, const struct object_array *shallows) > /* make sure commit traversal conforms to client */ > register_shallow(object->oid.hash); > } > +} > + > +static void deepen(int depth, const struct object_array *shallows) > +{ > + struct commit_list *result = NULL; > + int i; > + if (depth == INFINITE_DEPTH && !is_repository_shallow()) > + for (i = 0; i < shallows->nr; i++) { > + struct object *object = shallows->objects[i].item; > + object->flags |= NOT_SHALLOW; > + } > + else > + result = get_shallow_commits(&want_obj, depth, > + SHALLOW, NOT_SHALLOW); > + send_shallow(result); > + free_commit_list(result); > + send_unshallow(shallows); > packet_flush(1); > } -- 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