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

Re: [PATCH v2 2/2] pack-objects: don't loosen objects available in alternate or kept packs

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 22, 2009, 04:43 UTC
Message-ID
<7vbpru9nh9.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<ee63ef30903211526n47c40052mc40dc018f25c99fd@mail.gmail.com>
Brandon Casey <drafnel@gmail.com> writes:
Show 14 quoted lines
> If pack-objects is called with the --unpack-unreachable option then it will
> unpack (i.e. loosen) all unreferenced objects from local not-kept packs,
> including those that also exist in packs residing in an alternate object
> database or a local kept pack.  The primary(sole?) user of this option is
> git-repack.  In this case, repack will follow the call to pack-objects with
> a call to prune-packed which will delete these newly loosened objects,
> making the act of loosening a waste of time.  The unnecessary loosening can
> be avoided by checking whether an object exists in a non-local pack or a
> local kept pack before loosening it.
>
> This fixes the 'local packed unreachable obs that exist in alternate ODB
> are not loosened' test in t7700.
>
> Signed-off-by: Brandon Casey <drafnel@gmail.com>
Thanks.

Both patches are whitespace damaged, but I can cope. But I am not sure about one thing...

Show 19 quoted lines
>  builtin-pack-objects.c |   26 +++++++++++++++++++++++++-
>  t/t7700-repack.sh      |    2 +-
>  2 files changed, 26 insertions(+), 2 deletions(-)
>
> diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
> index 6222f19..3f477c5 100644
> --- a/builtin-pack-objects.c
> +++ b/builtin-pack-objects.c
> @@ -1944,6 +1944,29 @@ static void
> add_objects_in_unpacked_packs(struct rev_info *revs)
>  	free(in_pack.array);
>  }
>
> +static int has_sha1_pack_kept_or_nonlocal(const unsigned char *sha1)
> +{
> +	static struct packed_git *last_found = (void *)1;
> +	struct packed_git *p;
> +
> +	p = (last_found == (void *)1) ? packed_git : last_found;
Why (void *)1, not like:
	static struct packed_git *last_found;
	struct packed_git *p = last_found ? last_found : packed_git;
Am I missing something?
Show 15 quoted lines
> +	while (p) {
> +		if ((!p->pack_local || p->pack_keep) &&
> +			find_pack_entry_one(sha1, p)) {
> +			last_found = p;
> +			return 1;
> +		}
> +		if (p == last_found)
> +			p = packed_git;
> +		else
> +			p = p->next;
> +		if (p == last_found)
> +			p = p->next;
> +	}
> +	return 0;
> +}
Previous: Brandon CaseyNext: Brandon Casey
Message 2 of 7 in “pack-objects: don't loosen objects available in alternate or kept packs”
  1. 2/2 pack-objects: don't loosen objects available in alternate or kept packsBrandon Casey, Mar 21, 2009
  2. Junio C HamanoMar 22, 2009
  3. Brandon CaseyMar 22, 2009
  4. Nicolas PitreMar 22, 2009
  5. Junio C HamanoMar 22, 2009
  6. Nicolas PitreMar 22, 2009
  7. Brandon CaseyMar 24, 2009

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.