Skip to content

Commit

Permalink
scalar: teach diagnose to gather packfile info
Browse files Browse the repository at this point in the history
It's helpful to see if there are other crud files in the pack
directory. Let's teach the `scalar diagnose` command to gather
file size information about pack files.

While at it, also enumerate the pack files in the alternate
object directories, if any are registered.

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
mjcheetham authored and gitster committed May 31, 2022
1 parent 0ed5b13 commit 93e804b
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
30 changes: 30 additions & 0 deletions contrib/scalar/scalar.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "packfile.h"
#include "help.h"
#include "archive.h"
#include "object-store.h"

/*
* Remove the deepest subdirectory in the provided path string. Path must not
Expand Down Expand Up @@ -594,6 +595,29 @@ static int cmd_clone(int argc, const char **argv)
return res;
}

static void dir_file_stats_objects(const char *full_path, size_t full_path_len,
const char *file_name, void *data)
{
struct strbuf *buf = data;
struct stat st;

if (!stat(full_path, &st))
strbuf_addf(buf, "%-70s %16" PRIuMAX "\n", file_name,
(uintmax_t)st.st_size);
}

static int dir_file_stats(struct object_directory *object_dir, void *data)
{
struct strbuf *buf = data;

strbuf_addf(buf, "Contents of %s:\n", object_dir->path);

for_each_file_in_pack_dir(object_dir->path, dir_file_stats_objects,
data);

return 0;
}

static int cmd_diagnose(int argc, const char **argv)
{
struct option options[] = {
Expand Down Expand Up @@ -656,6 +680,12 @@ static int cmd_diagnose(int argc, const char **argv)
"--add-virtual-file=diagnostics.log:%.*s",
(int)buf.len, buf.buf);

strbuf_reset(&buf);
strbuf_addstr(&buf, "--add-virtual-file=packs-local.txt:");
dir_file_stats(the_repository->objects->odb, &buf);
foreach_alt_odb(dir_file_stats, &buf);
strvec_push(&archiver_args, buf.buf);

if ((res = add_directory_to_archiver(&archiver_args, ".git", 0)) ||
(res = add_directory_to_archiver(&archiver_args, ".git/hooks", 0)) ||
(res = add_directory_to_archiver(&archiver_args, ".git/info", 0)) ||
Expand Down
6 changes: 5 additions & 1 deletion contrib/scalar/t/t9099-scalar.sh
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ test_expect_success '`scalar [...] <dir>` errors out when dir is missing' '
SQ="'"
test_expect_success UNZIP 'scalar diagnose' '
scalar clone "file://$(pwd)" cloned --single-branch &&
git repack &&
echo "$(pwd)/.git/objects/" >>cloned/src/.git/objects/info/alternates &&
scalar diagnose cloned >out 2>err &&
grep "Available space" out &&
sed -n "s/.*$SQ\\(.*\\.zip\\)$SQ.*/\\1/p" <err >zip_path &&
Expand All @@ -110,7 +112,9 @@ test_expect_success UNZIP 'scalar diagnose' '
folder=${zip_path%.zip} &&
test_path_is_missing "$folder" &&
unzip -p "$zip_path" diagnostics.log >out &&
test_file_not_empty out
test_file_not_empty out &&
unzip -p "$zip_path" packs-local.txt >out &&
grep "$(pwd)/.git/objects" out
'

test_done

0 comments on commit 93e804b

Please sign in to comment.