зеркало из https://github.com/microsoft/git.git
scalar: teach `diagnose` to gather packfile info
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>
This commit is contained in:
Родитель
0ed5b13f24
Коммит
93e804b278
|
@ -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
|
||||
|
@ -594,6 +595,29 @@ cleanup:
|
|||
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[] = {
|
||||
|
@ -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)) ||
|
||||
|
|
|
@ -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 &&
|
||||
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче