git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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()?
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 2 of 7 in “allow deepening of a shallow repository”
  1. 4/5 allow deepening of a shallow repositoryJohannes Schindelin, Oct 30, 2006
  2. Junio C HamanoNov 14, 2006
  3. Johannes SchindelinNov 14, 2006
  4. Junio C HamanoNov 17, 2006
  5. Johannes SchindelinNov 17, 2006
  6. Junio C HamanoNov 17, 2006
  7. Johannes SchindelinNov 18, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.