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

Re: index-pack outside of repository?

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 16, 2016, 21:55 UTC
Message-ID
<xmqqh963r12h.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20161216214322.xibllaw2iibhc5nv@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 5 quoted lines
> Ah, I only checked that it did not do anything terrible like write into
> ".git". But it looks like it still looks at the git_dir value as part of
> the collision check.
>
> Here's a patch, on top of the rest of the series.
Thanks for a quick turnaround, as always.
Show 25 quoted lines
> -- >8 --
> Subject: [PATCH] index-pack: skip collision check when not in repository
>
> You can run "git index-pack path/to/foo.pack" outside of a
> repository to generate an index file, or just to verify the
> contents. There's no point in doing a collision check, since
> we obviously do not have any objects to collide with.
>
> The current code will blindly look in .git/objects based on
> the result of setup_git_env(). That effectively gives us the
> right answer (since we won't find any objects), but it's a
> waste of time, and it conflicts with our desire to
> eventually get rid of the "fallback to .git" behavior of
> setup_git_env().
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> I didn't do a test, as this doesn't really have any user-visible
> behavior change.
>
> I guess technically if you had a non-repo with
> ".git/objects/12/3456..." in it we would erroneously read it, but that's
> kind of bizarre. The interesting test is that when merged with
> jk/no-looking-at-dotgit-outside-repo-final, the test in t5300 doesn't
> die.
Yes.
Show 28 quoted lines
>
>  builtin/index-pack.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/builtin/index-pack.c b/builtin/index-pack.c
> index d450a6ada2..f4b87c6c9f 100644
> --- a/builtin/index-pack.c
> +++ b/builtin/index-pack.c
> @@ -787,13 +787,15 @@ static void sha1_object(const void *data, struct object_entry *obj_entry,
>  			const unsigned char *sha1)
>  {
>  	void *new_data = NULL;
> -	int collision_test_needed;
> +	int collision_test_needed = 0;
>  
>  	assert(data || obj_entry);
>  
> -	read_lock();
> -	collision_test_needed = has_sha1_file_with_flags(sha1, HAS_SHA1_QUICK);
> -	read_unlock();
> +	if (startup_info->have_repository) {
> +		read_lock();
> +		collision_test_needed = has_sha1_file_with_flags(sha1, HAS_SHA1_QUICK);
> +		read_unlock();
> +	}
>  
>  	if (collision_test_needed && !data) {
>  		read_lock();
Previous: Jeff KingNext: Junio C Hamano
Message 12 of 14 in “index-pack outside of repository?”
  1. Jeff KingDec 15, 2016
  2. Junio C HamanoDec 16, 2016
  3. Jeff KingDec 16, 2016
  4. Jeff KingDec 16, 2016
  5. 1/3 t5000: extract nongit function to test-lib-functions.shJeff King, Dec 16, 2016
  6. 2/3 index-pack: complain when --stdin is used outside of a repoJeff King, Dec 16, 2016
  7. 3/3 t: use nongit() function where applicableJeff King, Dec 16, 2016
  8. Junio C HamanoDec 16, 2016
  9. Junio C HamanoDec 16, 2016
  10. Junio C HamanoDec 16, 2016
  11. Jeff KingDec 16, 2016
  12. Junio C HamanoDec 16, 2016
  13. Junio C HamanoDec 16, 2016
  14. Jeff KingDec 16, 2016

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.