From: Doug Kelly <dougk.ff7@gmail.com>
To: git@vger.kernel.org
Cc: Doug Kelly <dougk.ff7@gmail.com>
Subject: [PATCH 3/3] gc: Remove garbage .idx files from pack dir
Date: Tue, 3 Nov 2015 21:05:08 -0600 [thread overview]
Message-ID: <1446606308-1668-3-git-send-email-dougk.ff7@gmail.com> (raw)
In-Reply-To: <1446606308-1668-1-git-send-email-dougk.ff7@gmail.com>
Add a custom report_garbage handler to collect and remove garbage
.idx files from the pack directory.
Signed-off-by: Doug Kelly <dougk.ff7@gmail.com>
---
builtin/gc.c | 20 ++++++++++++++++++++
t/t5304-prune.sh | 2 +-
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/builtin/gc.c b/builtin/gc.c
index df3e454..668f975 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -45,6 +45,21 @@ static struct argv_array rerere = ARGV_ARRAY_INIT;
static struct tempfile pidfile;
static struct lock_file log_lock;
+static struct string_list pack_garbage = STRING_LIST_INIT_DUP;
+
+static void clean_pack_garbage(void)
+{
+ int i;
+ for (i = 0; i < pack_garbage.nr; i++)
+ unlink_or_warn(pack_garbage.items[i].string);
+ string_list_clear(&pack_garbage, 0);
+}
+
+static void report_pack_garbage(unsigned seen_bits, const char *path)
+{
+ if (seen_bits == PACKDIR_FILE_IDX)
+ string_list_append(&pack_garbage, path);
+}
static void git_config_date_string(const char *key, const char **output)
{
@@ -416,6 +431,11 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
if (run_command_v_opt(rerere.argv, RUN_GIT_CMD))
return error(FAILED_RUN, rerere.argv[0]);
+ report_garbage = report_pack_garbage;
+ reprepare_packed_git();
+ if (pack_garbage.nr > 0)
+ clean_pack_garbage();
+
if (auto_gc && too_many_loose_objects())
warning(_("There are too many unreachable loose objects; "
"run 'git prune' to remove them."));
diff --git a/t/t5304-prune.sh b/t/t5304-prune.sh
index 0297515..def203c 100755
--- a/t/t5304-prune.sh
+++ b/t/t5304-prune.sh
@@ -245,7 +245,7 @@ EOF
test_cmp expected actual
'
-test_expect_failure 'clean pack garbage with gc' '
+test_expect_success 'clean pack garbage with gc' '
test_when_finished "rm -f .git/objects/pack/fake*" &&
test_when_finished "rm -f .git/objects/pack/foo*" &&
: >.git/objects/pack/foo.keep &&
--
2.5.1
next prev parent reply other threads:[~2015-11-04 3:05 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-21 18:41 Question: .idx without .pack causes performance issues? Doug Kelly
2015-07-21 18:57 ` Junio C Hamano
2015-07-21 19:15 ` Junio C Hamano
2015-07-21 20:48 ` Junio C Hamano
2015-07-21 21:37 ` Doug Kelly
2015-08-03 22:17 ` Doug Kelly
2015-08-04 1:27 ` Junio C Hamano
2015-08-07 21:36 ` Doug Kelly
2015-08-07 22:27 ` Junio C Hamano
2015-08-13 18:02 ` [PATCH 1/2] prepare_packed_git(): refactor garbage reporting in pack directory Doug Kelly
2015-08-13 18:02 ` [PATCH 2/2] gc: Remove garbage .idx files from pack dir Doug Kelly
2015-08-17 16:35 ` Junio C Hamano
2015-08-17 20:30 ` Junio C Hamano
2015-08-13 18:46 ` [PATCH 1/2] prepare_packed_git(): refactor garbage reporting in pack directory Eric Sunshine
2015-08-17 16:53 ` Junio C Hamano
2015-10-28 17:48 ` Junio C Hamano
2015-10-28 22:43 ` Doug Kelly
2015-11-04 3:05 ` [PATCH 1/3] " Doug Kelly
2015-11-04 3:05 ` [PATCH 2/3] t5304: Add test for cleaning pack garbage Doug Kelly
2015-11-04 3:05 ` Doug Kelly [this message]
2015-11-04 3:12 ` [PATCH 1/2] prepare_packed_git(): refactor garbage reporting in pack directory Doug Kelly
2015-11-04 19:35 ` Junio C Hamano
2015-11-04 19:56 ` Doug Kelly
2015-11-04 20:02 ` Jeff King
2015-11-04 20:08 ` Doug Kelly
2015-11-04 20:15 ` Jeff King
2015-12-30 7:37 ` Jeff King
2016-01-13 17:14 ` Doug Kelly
2016-01-13 20:08 ` Junio C Hamano
2016-01-13 20:19 ` Doug Kelly
2016-01-13 20:23 ` Jeff King
2015-11-04 19:56 ` Jeff King
[not found] ` <CABYiQpn7r2Vcf=S5RaWHBN85eBYGPV_e02+BY=4L98qfUzDT1Q@mail.gmail.com>
2015-11-11 14:58 ` Fwd: Question: .idx without .pack causes performance issues? Thomas Berg
2015-07-21 19:49 ` Doug Kelly
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=1446606308-1668-3-git-send-email-dougk.ff7@gmail.com \
--to=dougk.ff7@gmail.com \
--cc=git@vger.kernel.org \
/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).