From: "Shashank S via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Kaartic Sivaraam <kaartic.sivaraam@gmail.com>,
Christian Couder <christian.couder@gmail.com>,
Siddharth Asthana <siddharthasthana31@gmail.com>,
Usman Akinyemi <usmanakinyemi202@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Shashank S <shashu8660@gmail.com>,
Shashank <shashu8660@gmail.com>
Subject: [PATCH] prune-packed: remove USE_THE_REPOSITORY_VARIABLE
Date: Sun, 18 Oct 2026 16:31:12 +0000 [thread overview]
Message-ID: <pull.2266.git.1792341073005.gitgitgadget@gmail.com> (raw)
From: Shashank <shashu8660@gmail.com>
Right now, the prune_packed_objects() function uses the global
the_repository variable. To help with the libification effort,
change this function so it takes a 'struct repository' pointer
as an argument instead.
The function for_each_loose_file_in_source() uses a callback
that only takes a single 'void *data' pointer. This means we
cannot pass both the repository pointer and the 'opts' integer
at the same time. To fix this, create a new 'struct prune_data'
to hold both of them together, and update the prune_subdir() and
prune_object() callbacks to read from this new struct.
Update the builtins that call this function (builtin/prune-packed.c,
builtin/prune.c, and builtin/repack.c) to pass their local `repo`
variables. Because we are now actually using the 'repo' parameter
in these files, we can safely remove the UNUSED macro from them.
finally, drop the USE_THE_REPOSITORY_VARIABLE macro from
prune-packed.c.
Signed-off-by: Shashank <shashu8660@gmail.com>
---
[Outreachy PATCH] prune-packed: remove use_the_repository_variable
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2266%2Fshashu8660%2Foutreachy2-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2266/shashu8660/outreachy2-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/2266
builtin/prune-packed.c | 4 ++--
builtin/prune.c | 2 +-
builtin/repack.c | 2 +-
prune-packed.c | 32 ++++++++++++++++++++------------
prune-packed.h | 4 +++-
5 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/builtin/prune-packed.c b/builtin/prune-packed.c
index 4d63f26b0a..d44e7f81d4 100644
--- a/builtin/prune-packed.c
+++ b/builtin/prune-packed.c
@@ -11,7 +11,7 @@ static const char * const prune_packed_usage[] = {
int cmd_prune_packed(int argc,
const char **argv,
const char *prefix,
- struct repository *repo UNUSED)
+ struct repository *repo)
{
int opts = isatty(2) ? PRUNE_PACKED_VERBOSE : 0;
const struct option prune_packed_options[] = {
@@ -30,6 +30,6 @@ int cmd_prune_packed(int argc,
prune_packed_usage,
prune_packed_options);
- prune_packed_objects(opts);
+ prune_packed_objects(repo, opts);
return 0;
}
diff --git a/builtin/prune.c b/builtin/prune.c
index a7e4678d11..4eee5a2e27 100644
--- a/builtin/prune.c
+++ b/builtin/prune.c
@@ -201,7 +201,7 @@ int cmd_prune(int argc,
for_each_loose_file_in_source(repo->objects->sources,
prune_object, prune_cruft, prune_subdir, &revs);
- prune_packed_objects(show_only ? PRUNE_PACKED_DRY_RUN : 0);
+ prune_packed_objects(repo, show_only ? PRUNE_PACKED_DRY_RUN : 0);
remove_temporary_files(repo_get_object_directory(repo));
s = mkpathdup("%s/pack", repo_get_object_directory(repo));
remove_temporary_files(s);
diff --git a/builtin/repack.c b/builtin/repack.c
index c4360382c1..e8970e8eb7 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -757,7 +757,7 @@ int cmd_repack(int argc,
wrote_incremental_midx);
if (show_progress)
opts |= PRUNE_PACKED_VERBOSE;
- prune_packed_objects(opts);
+ prune_packed_objects(repo, opts);
if (!keep_unreachable &&
(!(pack_everything & LOOSEN_UNREACHABLE) ||
diff --git a/prune-packed.c b/prune-packed.c
index d49dc11957..a53b7031b5 100644
--- a/prune-packed.c
+++ b/prune-packed.c
@@ -1,5 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
#include "git-compat-util.h"
#include "gettext.h"
#include "object-file.h"
@@ -8,40 +6,50 @@
#include "prune-packed.h"
#include "repository.h"
+struct prune_data {
+ struct repository *r;
+ int opts;
+};
+
static struct progress *progress;
static int prune_subdir(unsigned int nr, const char *path, void *data)
{
- int *opts = data;
+ struct prune_data *d = data;
display_progress(progress, nr + 1);
- if (!(*opts & PRUNE_PACKED_DRY_RUN))
+ if (!(d->opts & PRUNE_PACKED_DRY_RUN))
rmdir(path);
return 0;
}
static int prune_object(const struct object_id *oid, const char *path,
- void *data)
+ void *data)
{
- int *opts = data;
+ struct prune_data *d = data;
- if (!has_object_pack(the_repository, oid))
+ if (!has_object_pack(d->r, oid))
return 0;
- if (*opts & PRUNE_PACKED_DRY_RUN)
+ if (d->opts & PRUNE_PACKED_DRY_RUN)
printf("rm -f %s\n", path);
else
unlink_or_warn(path);
return 0;
}
-void prune_packed_objects(int opts)
+void prune_packed_objects(struct repository *r, int opts)
{
+ struct prune_data cb_data = {
+ .r = r,
+ .opts = opts
+ };
+
if (opts & PRUNE_PACKED_VERBOSE)
- progress = start_delayed_progress(the_repository,
+ progress = start_delayed_progress(r,
_("Removing duplicate objects"), 256);
- for_each_loose_file_in_source(the_repository->objects->sources,
- prune_object, NULL, prune_subdir, &opts);
+ for_each_loose_file_in_source(r->objects->sources,
+ prune_object, NULL, prune_subdir, &cb_data);
/* Ensure we show 100% before finishing progress */
display_progress(progress, 256);
diff --git a/prune-packed.h b/prune-packed.h
index 936fa9df23..9ec7ff0d60 100644
--- a/prune-packed.h
+++ b/prune-packed.h
@@ -1,9 +1,11 @@
#ifndef PRUNE_PACKED_H
#define PRUNE_PACKED_H
+struct repository;
+
#define PRUNE_PACKED_DRY_RUN 01
#define PRUNE_PACKED_VERBOSE 02
-void prune_packed_objects(int);
+void prune_packed_objects(struct repository *r, int opts);
#endif
base-commit: 6de20f6092dcf9bdb1c8efe03db4b70c82b423dd
--
gitgitgadget
next reply other threads:[~2026-10-18 16:31 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-18 16:31 Shashank S via GitGitGadget [this message]
2026-10-19 7:09 ` [PATCH] prune-packed: remove USE_THE_REPOSITORY_VARIABLE Patrick Steinhardt
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.2266.git.1792341073005.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=kaartic.sivaraam@gmail.com \
--cc=shashu8660@gmail.com \
--cc=siddharthasthana31@gmail.com \
--cc=usmanakinyemi202@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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox