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

Re: [PATCH 3/3] show-index: remove global state variables

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Jan 21, 2026, 10:39 UTC
Message-ID
<7b5dd0c4-0ca0-458e-89db-621a70dac9ae@gmail.com>
In-Reply-To
<20260120140901.517928-4-shreyanshpaliwalcmsmn@gmail.com>
On 20/01/2026 14:05, Shreyansh Paliwal wrote:
Show 7 quoted lines
> As Git is in the process of removing global state,
> this function still relies on the global variables,
> the_repository and the_hash_algo.
> 
> Remove the associated macro and the UNUSED attribute from
> the repo parameter, and replace all uses of the_repository and
> the_hash_algo with repo and repo->hash_algo, respectively.

I don't think that is a good idea because repo will be NULL outside of a repository. For a lot of commands that does not matter because they require a repository to run but judging from the first patch in this series this command is supposed to be able to run outside a repository.

I'm increasingly of the opinion that adding a repository argument to the builtin commands was a mistake as they all just use a single repository so using "the_repository" seems perfectly reasonable. It leads to problems like the segfault in this patch and takes attention away from the much more useful task of moving our library code away from using "the_repository". If you're interested in contributing to that effort then there are a number of instances of "the_repository" in wt-status.c that can be trivially replaced by the repository instance in "struct wt_status" or the repository passed to the function. I'm not sure how easy it is to remove them all - you might need to change the code to pass a repository instance down the call chain in a few cases but there are certainly quite a few that can be easily and usefully cleaned up.

Thanks
Phillip
Show 78 quoted lines
> This modernizes git show-index and makes it more compatible.
> 
> Signed-off-by: Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail.com>
> ---
>   builtin/show-index.c | 19 +++++++++----------
>   1 file changed, 9 insertions(+), 10 deletions(-)
> 
> diff --git a/builtin/show-index.c b/builtin/show-index.c
> index a9c2f18b73..96adae14c0 100644
> --- a/builtin/show-index.c
> +++ b/builtin/show-index.c
> @@ -1,4 +1,3 @@
> -#define USE_THE_REPOSITORY_VARIABLE
>   #define DISABLE_SIGN_COMPARE_WARNINGS
>   
>   #include "builtin.h"
> @@ -16,7 +15,7 @@ static const char *const show_index_usage[] = {
>   int cmd_show_index(int argc,
>   		   const char **argv,
>   		   const char *prefix,
> -		   struct repository *repo UNUSED)
> +		   struct repository *repo)
>   {
>   	int i;
>   	unsigned nr;
> @@ -37,7 +36,7 @@ int cmd_show_index(int argc,
>   		hash_algo = hash_algo_by_name(hash_name);
>   		if (hash_algo == GIT_HASH_UNKNOWN)
>   			die(_("Unknown hash algorithm"));
> -		repo_set_hash_algo(the_repository, hash_algo);
> +		repo_set_hash_algo(repo, hash_algo);
>   	}
>   
>   	if (fread(top_index, 2 * 4, 1, stdin) != 1)
> @@ -63,7 +62,7 @@ int cmd_show_index(int argc,
>   
>   	/* detection of hash algorithm
>   	Only works for small files, i.e without large offsets */
> -	if(!the_hash_algo && version == 2) {
> +	if(!repo->hash_algo && version == 2) {
>   		struct stat st;
>   		size_t file_base_size;
>   		size_t table_size;
> @@ -79,9 +78,9 @@ int cmd_show_index(int argc,
>   		hash_size = size_rem / (nr + 2);
>   
>   		if(hash_size == GIT_SHA1_RAWSZ) {
> -			repo_set_hash_algo(the_repository, GIT_HASH_SHA1);
> +			repo_set_hash_algo(repo, GIT_HASH_SHA1);
>   		} else if(hash_size == GIT_SHA256_RAWSZ) {
> -			repo_set_hash_algo(the_repository, GIT_HASH_SHA256);
> +			repo_set_hash_algo(repo, GIT_HASH_SHA256);
>   		} else {
>   			die(_("unable to detect hash algorithm, "
>   					"use --object-format option"));
> @@ -89,10 +88,10 @@ int cmd_show_index(int argc,
>   	}
>   
>   	/* Final fallback to SHA1 */
> -	if(!the_hash_algo)
> -		repo_set_hash_algo(the_repository, GIT_HASH_SHA1);
> +	if(!repo->hash_algo)
> +		repo_set_hash_algo(repo, GIT_HASH_SHA1);
>   
> -	hashsz = the_hash_algo->rawsz;
> +	hashsz = repo->hash_algo->rawsz;
>   
>   	if (version == 1) {
>   		for (i = 0; i < nr; i++) {
> @@ -114,7 +113,7 @@ int cmd_show_index(int argc,
>   		for (i = 0; i < nr; i++) {
>   			if (fread(entries[i].oid.hash, hashsz, 1, stdin) != 1)
>   				die(_("unable to read sha1 %u/%u"), i, nr);
> -			entries[i].oid.algo = hash_algo_by_ptr(the_hash_algo);
> +			entries[i].oid.algo = hash_algo_by_ptr(repo->hash_algo);
>   		}
>   		for (i = 0; i < nr; i++)
>   			if (fread(&entries[i].crc, 4, 1, stdin) != 1)
Previous: Shreyansh PaliwalNext: Shreyansh Paliwal
Message 12 of 25 in “show-index: modernize and implement auto-detection of hash algorithm”
  1. Shreyansh PaliwalJan 20, 2026
  2. 1/3 show-index: implement automatic hash detectionShreyansh Paliwal, Jan 20, 2026
  3. Junio C HamanoJan 20, 2026
  4. Patrick SteinhardtJan 21, 2026
  5. Shreyansh PaliwalJan 21, 2026
  6. Patrick SteinhardtJan 23, 2026
  7. Shreyansh PaliwalJan 23, 2026
  8. brian m. carlsonJan 23, 2026
  9. Shreyansh PaliwalJan 21, 2026
  10. 2/3 show-index: use gettext wrapping in error messagesShreyansh Paliwal, Jan 20, 2026
  11. 3/3 show-index: remove global state variablesShreyansh Paliwal, Jan 20, 2026
  12. Phillip WoodJan 21, 2026
  13. Shreyansh PaliwalJan 21, 2026
  14. Junio C HamanoJan 21, 2026
  15. show-index: warn when falling back to SHA-1 outside a repositoryShreyansh Paliwal, Jan 29, 2026
  16. Junio C HamanoJan 29, 2026
  17. Shreyansh PaliwalJan 30, 2026
  18. brian m. carlsonJan 29, 2026
  19. Shreyansh PaliwalJan 30, 2026
  20. Patrick SteinhardtJan 30, 2026
  21. Junio C HamanoJan 30, 2026
  22. 0/2 show-index: add warning and wrap error messages with gettextShreyansh Paliwal, Jan 30, 2026
  23. 1/2 show-index: warn when falling back to SHA-1 outside a repositoryShreyansh Paliwal, Jan 30, 2026
  24. 2/2 show-index: use gettext wrapping in user facing error messagesShreyansh Paliwal, Jan 30, 2026
  25. Junio C HamanoJan 30, 2026

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.