Re: [PATCH 4/5] allow deepening of a shallow repository
- From
Junio C Hamano <junkio@cox.net>
- Date
- Nov 14, 2006, 07:24 UTC
- Message-ID
- <7vy7qeze0q.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.63.0610302009390.26682@wbgn013.biozentrum.uni-wuerzburg.de>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 23 quoted lines
> Now, by saying "git fetch -depth <n> <repo>" you can deepen
> a shallow repository.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
> commit.c | 13 +++++++++++++
> commit.h | 3 ++-
> fetch-pack.c | 22 ++++++++++++++++------
> git-fetch.sh | 12 +++++++++++-
> shallow.c | 8 ++++++--
> upload-pack.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++-----------
> diff --git a/upload-pack.c b/upload-pack.c
> index ebe1e5a..162dd34 100644
> --- a/upload-pack.c
> +++ b/upload-pack.c
> @@ -134,6 +134,7 @@ static void create_pack_file(void)
> } else {
> for (i = 0; i < want_obj.nr; i++) {
> struct object *o = want_obj.objects[i].item;
> + o->flags &= ~UNINTERESTING;
> add_pending_object(&revs, o, NULL);
> }
> for (i = 0; i < have_obj.nr; i++) {I am puzzled why this is needed in this series. In other words, do we have a bug in the current upload-pack that does not have shallow already by not clearing UNINTERESTING bit? In yet other words, I haven't figured out which part of the shallow series makes it necessary to clear UNINTERESTING bit from wanted object.
Show 19 quoted lines
> @@ -547,23 +554,51 @@ static void receive_needs(void)
>...
> + for (i = 0; i < shallows.nr; i++) {
> + struct object *object = shallows.objects[i].item;
> + if (object->flags & NOT_SHALLOW) {
> + struct commit_list *parents;
> + packet_write(1, "unshallow %s",
> + sha1_to_hex(object->sha1));
> + object->flags &= ~CLIENT_SHALLOW;
> + /* make sure the real parents are parsed */
> + unregister_shallow(object->sha1);
> + parse_commit((struct commit *)object);
> + parents = ((struct commit *)object)->parents;
> + while (parents) {
> + add_object_array(&parents->item->object,
> + NULL, &want_obj);
> + parents = parents->next;
> + }
> + }I doubt unregister_shallow() is enough to ensure that the next parse_commit() re-parses to recover its parents. parse_commit() says "if (item->object.parsed) return 0" upfront. Don't you need to do:
object->parsed = 0;
before parse_commit()?