Subject: [GSOC PATCH v2 0/2] builtin/prune: remove dependency on global variables and 'the_repository'

From: Ayush Chandekar <[email-masked]>
Date: Mon, 30 Jun 2025 22:11:03 +0530

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.

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 ++++-
 8 files changed, 20 insertions(+), 21 deletions(-)

-- 

Summary of the range-diff:
* Changed the commit message of 1/2 to use "setting" instead of "settings" since it refers to just one.
* Added "Mentored-by" tags in both 1/2 and 2/2.
* Fixed line formatting in builtin/prune.c in 2/2.

Range-diff:
1:  699f9a947d ! 1:  995389d622 repository: move 'repository_format_precious_objects' to repo scope
    @@ Metadata
      ## Commit message ##
         repository: move 'repository_format_precious_objects' to repo scope
     
    -    The 'extensions.preciousObjects' settings when set true, prevents
    +    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
         'repository_format_precious_objects'.
    @@ Commit message
         This change is part of an ongoing effort to eliminate global variables,
         improve modularity and help libify the codebase.
     
    +    Mentored-by: Christian Couder <[email-masked]>
    +    Mentored-by: Ghanshyam Thakkar <[email-masked]>
         Signed-off-by: Ayush Chandekar <[email-masked]>
     
      ## builtin/gc.c ##
2:  f22cc88e9f ! 2:  f70de9d549 builtin/prune: stop depending on 'the_repository'
    @@ Commit message
         repo and thus remove the definition '#define
         USE_THE_REPOSITORY_VARIABLE'
     
    +    Mentored-by: Christian Couder <[email-masked]>
    +    Mentored-by: Ghanshyam Thakkar <[email-masked]>
         Signed-off-by: Ayush Chandekar <[email-masked]>
     
      ## builtin/prune.c ##
    @@ builtin/prune.c: static int prune_object(const struct object_id *oid, const char
      		return 0;
      	if (show_only || verbose) {
     -		enum object_type type = oid_object_info(the_repository, oid,
    -+		enum object_type type = oid_object_info(revs->repo, oid,
    - 							NULL);
    +-							NULL);
    ++		enum object_type type = oid_object_info(revs->repo, oid, NULL);
      		printf("%s %s\n", oid_to_hex(oid),
      		       (type > 0) ? type_name(type) : "unknown");
    + 	}
     @@ builtin/prune.c: static void remove_temporary_files(const char *path)
      int cmd_prune(int argc,
      	      const char **argv,
    @@ builtin/prune.c: int cmd_prune(int argc,
      
     -		if (!repo_get_oid(the_repository, name, &oid)) {
     -			struct object *object = parse_object_or_die(the_repository, &oid,
    +-								    name);
     +		if (!repo_get_oid(repo, name, &oid)) {
    -+			struct object *object = parse_object_or_die(repo, &oid,
    - 								    name);
    ++			struct object *object = parse_object_or_die(repo, &oid, name);
      			add_pending_object(&revs, object, "");
      		}
    + 		else
     @@ builtin/prune.c: int cmd_prune(int argc,
      		revs.exclude_promisor_objects = 1;
      	}

2.49.0