Re: [PATCH 4/5] allow deepening of a shallow repository

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Johannes Schindelin <Johannes.Schindelin@xxxxxx> writes:

> Now, by saying "git fetch -depth <n> <repo>" you can deepen
> a shallow repository.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx>
> ---
>  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.

> @@ -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()?

-
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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]