git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Lessley Dennington <lessleydennington@gmail.com>
To: Elijah Newren <newren@gmail.com>,
	Lessley Dennington via GitGitGadget <gitgitgadget@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>,
	Derrick Stolee <stolee@gmail.com>,
	Junio C Hamano <gitster@pobox.com>, Taylor Blau <me@ttaylorr.com>
Subject: Re: [PATCH v4 1/4] sparse index: enable only for git repos
Date: Tue, 23 Nov 2021 06:52:49 -0800	[thread overview]
Message-ID: <cd9f20aa-0fff-6749-eaec-0527cf4cf4cc@gmail.com> (raw)
In-Reply-To: <CABPp-BEM+FpdQ4yJxDcqvdz3LNmFV+5CBMAQdAnEfc0ytbZ-dA@mail.gmail.com>



On 11/22/21 11:41 PM, Elijah Newren wrote:
> On Mon, Nov 22, 2021 at 2:42 PM Lessley Dennington via GitGitGadget
> <gitgitgadget@gmail.com> wrote:
>>
>> From: Lessley Dennington <lessleydennington@gmail.com>
>>
>> Check whether git dir exists before adding any repo settings. If it
>> does not exist, BUG with the message that one cannot add settings for an
>> uninitialized repository. If it does exist, proceed with adding repo
>> settings.
>>
>> Additionally, ensure the above BUG is not triggered when users pass the -h
>> flag by adding a check for the repository to the checkout and pack-objects
>> builtins.
> 
> Why only checkout and pack-objects?  Why don't the -h flags to all of
> the following need it as well?:
> 
> $ git grep -l prepare_repo_settings | grep builtin/
> builtin/add.c
> builtin/blame.c
> builtin/checkout.c
> builtin/commit.c
> builtin/diff.c
> builtin/fetch.c
> builtin/gc.c
> builtin/merge.c
> builtin/pack-objects.c
> builtin/rebase.c
> builtin/reset.c
> builtin/revert.c
> builtin/sparse-checkout.c
> builtin/update-index.c
> 
> If none of these need it, was it because they put
> prepare_repo_settings() calls after some other basic checks had been
> done so more do not have to be added?  If so, is there a similar place
> in checkout and pack-objects where their calls to
> prepare_repo_settings() can be moved?  (Looking ahead, it appears you
> moved some code in patch 2 to do something like this.  Are the similar
> moves that could be done here?)
> 
Thank you for the quick feedback. Yes, I believe there are similar moves 
that can be done here. I was attempting to be explicit about the case I'm 
guarding against, but you're right - it shouldn't be done one way for some 
builtins and another way for others.
>> Finally, ensure the above BUG is not triggered for commit-graph by
>> returning early if the git directory does not exist.
> 
> If commit-graph needs a special case to avoid triggering the BUG,
> wouldn't several of these need it too?:
> 
> $ git grep -l prepare_repo_settings | grep -v builtin/
> commit-graph.c
> fetch-negotiator.c
> merge-recursive.c
> midx.c
> read-cache.c
> repo-settings.c
> repository.c
> repository.h
> sparse-index.c
> t/helper/test-read-cache.c
> t/helper/test-read-graph.c
> unpack-trees.c
> 
> or are their calls to prepare_repo_settings() only done after gitdir
> setup?  If the latter, perhaps the commit-graph function calls could
> be moved after gitdir setup too to avoid the need to do extra checks
> in it?
> 
Agreed, I can move this as well.
>> Signed-off-by: Lessley Dennington <lessleydennington@gmail.com>
>> ---
>>   builtin/checkout.c     | 6 ++++--
>>   builtin/pack-objects.c | 9 ++++++---
>>   commit-graph.c         | 5 ++++-
>>   repo-settings.c        | 3 +++
>>   4 files changed, 17 insertions(+), 6 deletions(-)
>>
>> diff --git a/builtin/checkout.c b/builtin/checkout.c
>> index 8c69dcdf72a..31632b07888 100644
>> --- a/builtin/checkout.c
>> +++ b/builtin/checkout.c
>> @@ -1588,8 +1588,10 @@ static int checkout_main(int argc, const char **argv, const char *prefix,
>>
>>          git_config(git_checkout_config, opts);
>>
>> -       prepare_repo_settings(the_repository);
>> -       the_repository->settings.command_requires_full_index = 0;
>> +       if (startup_info->have_repository) {
>> +               prepare_repo_settings(the_repository);
>> +               the_repository->settings.command_requires_full_index = 0;
>> +       }
>>
>>          opts->track = BRANCH_TRACK_UNSPECIFIED;
>>
>> diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
>> index 1a3dd445f83..45dc2258dc7 100644
>> --- a/builtin/pack-objects.c
>> +++ b/builtin/pack-objects.c
>> @@ -3976,9 +3976,12 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
>>          read_replace_refs = 0;
>>
>>          sparse = git_env_bool("GIT_TEST_PACK_SPARSE", -1);
>> -       prepare_repo_settings(the_repository);
>> -       if (sparse < 0)
>> -               sparse = the_repository->settings.pack_use_sparse;
>> +
>> +       if (startup_info->have_repository) {
>> +               prepare_repo_settings(the_repository);
>> +               if (sparse < 0)
>> +                       sparse = the_repository->settings.pack_use_sparse;
>> +       }
>>
>>          reset_pack_idx_option(&pack_idx_opts);
>>          git_config(git_pack_config, NULL);
>> diff --git a/commit-graph.c b/commit-graph.c
>> index 2706683acfe..265c010122e 100644
>> --- a/commit-graph.c
>> +++ b/commit-graph.c
>> @@ -632,10 +632,13 @@ static int prepare_commit_graph(struct repository *r)
>>          struct object_directory *odb;
>>
>>          /*
>> +        * Early return if there is no git dir or if the commit graph is
>> +        * disabled.
>> +        *
>>           * This must come before the "already attempted?" check below, because
>>           * we want to disable even an already-loaded graph file.
>>           */
>> -       if (r->commit_graph_disabled)
>> +       if (!r->gitdir || r->commit_graph_disabled)
>>                  return 0;
>>
>>          if (r->objects->commit_graph_attempted)
>> diff --git a/repo-settings.c b/repo-settings.c
>> index b93e91a212e..00ca5571a1a 100644
>> --- a/repo-settings.c
>> +++ b/repo-settings.c
>> @@ -17,6 +17,9 @@ void prepare_repo_settings(struct repository *r)
>>          char *strval;
>>          int manyfiles;
>>
>> +       if (!r->gitdir)
>> +               BUG("Cannot add settings for uninitialized repository");
>> +
>>          if (r->settings.initialized++)
>>                  return;
> 
> I'm not what the BUG() is trying to help us catch, but I'm worried
> that there are many additional places that now need workarounds to
> avoid triggering bugs.
> 
I see your point. We're trying to make sure we catch issues like the 
nongit scenario I overlooked in diff in earlier versions of this series. 
But if we feel this change is too disruptive and will likely cause issues 
beyond those I've fixed to ensure our tests pass, I can remove.

  reply	other threads:[~2021-11-23 14:52 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-14 17:25 [PATCH 0/2] Sparse Index: diff and blame builtins Lessley Dennington via GitGitGadget
2021-10-14 17:25 ` [PATCH 1/2] diff: enable and test the sparse index Lessley Dennington via GitGitGadget
2021-10-15 16:46   ` Derrick Stolee
2021-10-14 17:25 ` [PATCH 2/2] blame: " Lessley Dennington via GitGitGadget
2021-11-23  7:57   ` Elijah Newren
2021-11-23 14:57     ` Lessley Dennington
2021-10-15 21:20 ` [PATCH v2 0/2] Sparse Index: diff and blame builtins Lessley Dennington via GitGitGadget
2021-10-15 21:20   ` [PATCH v2 1/2] diff: enable and test the sparse index Lessley Dennington via GitGitGadget
2021-10-25 20:47     ` Taylor Blau
2021-10-26 16:10       ` Lessley Dennington
2021-10-26 16:15         ` Taylor Blau
2021-10-15 21:20   ` [PATCH v2 2/2] blame: " Lessley Dennington via GitGitGadget
2021-10-25 20:53     ` Taylor Blau
2021-10-26 16:17       ` Lessley Dennington
2021-11-21  1:32         ` Elijah Newren
2021-11-01 21:27   ` [PATCH v3 0/2] Sparse Index: diff and blame builtins Lessley Dennington via GitGitGadget
2021-11-01 21:27     ` [PATCH v3 1/2] diff: enable and test the sparse index Lessley Dennington via GitGitGadget
2021-11-03 17:05       ` Junio C Hamano
2021-11-04 23:55         ` Lessley Dennington
2021-11-01 21:27     ` [PATCH v3 2/2] blame: " Lessley Dennington via GitGitGadget
2021-11-03 16:47       ` Junio C Hamano
2021-11-05  0:04         ` Lessley Dennington
2021-11-21  1:46         ` Elijah Newren
2021-11-22 22:42     ` [PATCH v4 0/4] Sparse Index: diff and blame builtins Lessley Dennington via GitGitGadget
2021-11-22 22:42       ` [PATCH v4 1/4] sparse index: enable only for git repos Lessley Dennington via GitGitGadget
2021-11-23  7:41         ` Elijah Newren
2021-11-23 14:52           ` Lessley Dennington [this message]
2021-11-23 23:39         ` Junio C Hamano
2021-11-24 14:41           ` Lessley Dennington
2021-11-24 18:23             ` Junio C Hamano
2021-11-29 23:38               ` Lessley Dennington
2021-11-30  6:32                 ` Junio C Hamano
2021-11-30 23:25                   ` Lessley Dennington
2021-11-22 22:42       ` [PATCH v4 2/4] test-read-cache: set up repo after git directory Lessley Dennington via GitGitGadget
2021-11-23 23:42         ` Junio C Hamano
2021-11-24 15:10           ` Lessley Dennington
2021-11-24 18:36             ` Junio C Hamano
2021-11-29 23:01               ` Lessley Dennington
2021-11-22 22:42       ` [PATCH v4 3/4] diff: enable and test the sparse index Lessley Dennington via GitGitGadget
2021-11-23  7:47         ` Elijah Newren
2021-11-23 14:53           ` Lessley Dennington
2021-11-23 23:48         ` Junio C Hamano
2021-11-22 22:42       ` [PATCH v4 4/4] blame: " Lessley Dennington via GitGitGadget
2021-11-23 23:53         ` Junio C Hamano
2021-11-24 14:52           ` Lessley Dennington
2021-12-03 21:15       ` [PATCH v5 0/7] Sparse Index: diff and blame builtins Lessley Dennington via GitGitGadget
2021-12-03 21:15         ` [PATCH v5 1/7] git: esnure correct git directory setup with -h Lessley Dennington via GitGitGadget
2021-12-04 18:41           ` Elijah Newren
2021-12-04 19:58           ` Junio C Hamano
2021-12-03 21:16         ` [PATCH v5 2/7] commit-graph: return if there is no git directory Lessley Dennington via GitGitGadget
2021-12-03 21:16         ` [PATCH v5 3/7] test-read-cache: set up repo after " Lessley Dennington via GitGitGadget
2021-12-03 21:16         ` [PATCH v5 4/7] repo-settings: prepare_repo_settings only in git repos Lessley Dennington via GitGitGadget
2021-12-07  4:43           ` Ævar Arnfjörð Bjarmason
2021-12-08 15:46             ` Lessley Dennington
2021-12-03 21:16         ` [PATCH v5 5/7] diff: replace --staged with --cached in t1092 tests Lessley Dennington via GitGitGadget
2021-12-03 21:16         ` [PATCH v5 6/7] diff: enable and test the sparse index Lessley Dennington via GitGitGadget
2021-12-03 21:16         ` [PATCH v5 7/7] blame: " Lessley Dennington via GitGitGadget
2021-12-04 19:43         ` [PATCH v5 0/7] Sparse Index: diff and blame builtins Elijah Newren
2021-12-06 15:55         ` [PATCH v6 " Lessley Dennington via GitGitGadget
2021-12-06 15:55           ` [PATCH v6 1/7] git: ensure correct git directory setup with -h Lessley Dennington via GitGitGadget
2021-12-06 15:55           ` [PATCH v6 2/7] commit-graph: return if there is no git directory Lessley Dennington via GitGitGadget
2021-12-06 15:55           ` [PATCH v6 3/7] test-read-cache: set up repo after " Lessley Dennington via GitGitGadget
2021-12-06 15:55           ` [PATCH v6 4/7] repo-settings: prepare_repo_settings only in git repos Lessley Dennington via GitGitGadget
2021-12-06 15:55           ` [PATCH v6 5/7] diff: replace --staged with --cached in t1092 tests Lessley Dennington via GitGitGadget
2021-12-06 15:56           ` [PATCH v6 6/7] diff: enable and test the sparse index Lessley Dennington via GitGitGadget
2021-12-06 15:56           ` [PATCH v6 7/7] blame: " Lessley Dennington via GitGitGadget

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cd9f20aa-0fff-6749-eaec-0527cf4cf4cc@gmail.com \
    --to=lessleydennington@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=gitster@pobox.com \
    --cc=me@ttaylorr.com \
    --cc=newren@gmail.com \
    --cc=stolee@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).