The aim of this patch series is to remove the definition '#define USE_THE_REPOSITORY_VARIABLE' from "builtin/prune.c" by removing global variables and the global 'the_repository'. This patch series contains two patches: 1 - Move the global variable 'repository_format_precious_objects' into 'struct repository' and update all affected code paths accordingly. 2 - Remove the dependency of 'the_repository' in "builtin/prunce.c", allowing the removal of the definition. Also, add a test to check if 'git prune -h' can be run when repository is 'NULL'. Ayush Chandekar (2): repository: move 'repository_format_precious_objects' to repo scope builtin/prune: stop depending on 'the_repository' builtin/gc.c | 2 +- builtin/prune.c | 27 ++++++++++++--------------- builtin/repack.c | 2 +- environment.c | 1 - environment.h | 2 -- repository.c | 1 + repository.h | 1 + setup.c | 5 ++++- t/t1517-outside-repo.sh | 7 +++++++ 9 files changed, 27 insertions(+), 21 deletions(-) -- Summary of range-diff: * Format the commit message of 1/2 correctly. * Move the call to `repo_init_revisions()` after `parse_options()` in 2/2. * Add a test to check if 'git prune -h' can be run outside repository in 2/2. Range-diff with v2: 1: a58577a147 ! 1: a828ade541 repository: move 'repository_format_precious_objects' to repo scope @@ Commit message repository: move 'repository_format_precious_objects' to repo scope The 'extensions.preciousObjects' setting when set true, prevents - operations that might drop objects from the object storage. - This setting is populated in the global variable + operations that might drop objects from the object storage. This setting + is populated in the global variable 'repository_format_precious_objects'. - Move this global variable to repo scope by adding it to struct - `repository` and also refactor all the occurences accordingly. + + Move this global variable to repo scope by adding it to 'struct + repository and also refactor all the occurences accordingly. This change is part of an ongoing effort to eliminate global variables, improve modularity and help libify the codebase. 2: c5eaebc2cc ! 2: 22fbbc8cf1 builtin/prune: stop depending on 'the_repository' @@ Commit message Refactor builtin/prune.c to remove the dependency on the global 'the_repository'. Replace all the occurrences of 'the_repository' with repo and thus remove the definition '#define - USE_THE_REPOSITORY_VARIABLE' + USE_THE_REPOSITORY_VARIABLE'. Also, add a test to make sure that 'git + prune -h' can be called when the repository is `NULL`. Mentored-by: Christian Couder <christian.couder@xxxxxxxxx> Mentored-by: Ghanshyam Thakkar <shyamthakkar001@xxxxxxxxx> @@ builtin/prune.c: int cmd_prune(int argc, save_commit_buffer = 0; disable_replace_refs(); - repo_init_revisions(the_repository, &revs, prefix); -+ repo_init_revisions(repo, &revs, prefix); argc = parse_options(argc, argv, prefix, options, prune_usage, 0); - if (the_repository->repository_format_precious_objects) ++ repo_init_revisions(repo, &revs, prefix); + if (repo->repository_format_precious_objects) die(_("cannot prune in a precious-objects repo")); @@ builtin/prune.c: int cmd_prune(int argc, perform_reachability_traversal(&revs); prune_shallow(show_only ? PRUNE_SHOW_ONLY : 0); } + + ## t/t1517-outside-repo.sh ## +@@ t/t1517-outside-repo.sh: test_expect_success 'update-server-info does not crash with -h' ' + test_grep "[Uu]sage: git update-server-info " usage + ' + ++test_expect_success 'prune does not crash with -h' ' ++ test_expect_code 129 git prune -h >usage && ++ test_grep "[Uu]sage: git prune " usage && ++ test_expect_code 129 nongit git prune -h >usage && ++ test_grep "[Uu]sage: git prune " usage ++' ++ + test_done 2.49.0