Merge branch 'jc/index-pack-fsck-levels'

The "--fsck-objects" option of "git index-pack" now can take the
optional parameter to tweak severity of different fsck errors.

* jc/index-pack-fsck-levels:
  index-pack: --fsck-objects to take an optional argument for fsck msgs
  index-pack: test and document --strict=<msg-id>=<severity>...
This commit is contained in:
Junio C Hamano
2024-02-08 13:20:33 -08:00
3 changed files with 62 additions and 10 deletions

View File

@ -79,8 +79,13 @@ OPTIONS
to force the version for the generated pack index, and to force to force the version for the generated pack index, and to force
64-bit index entries on objects located above the given offset. 64-bit index entries on objects located above the given offset.
--strict:: --strict[=<msg-id>=<severity>...]::
Die, if the pack contains broken objects or links. Die, if the pack contains broken objects or links. An optional
comma-separated list of `<msg-id>=<severity>` can be passed to change
the severity of some possible issues, e.g.,
`--strict="missingEmail=ignore,badTagName=error"`. See the entry for the
`fsck.<msg-id>` configuration options in linkgit:git-fsck[1] for more
information on the possible values of `<msg-id>` and `<severity>`.
--progress-title:: --progress-title::
For internal use only. For internal use only.
@ -91,13 +96,18 @@ default and "Indexing objects" when `--stdin` is specified.
--check-self-contained-and-connected:: --check-self-contained-and-connected::
Die if the pack contains broken links. For internal use only. Die if the pack contains broken links. For internal use only.
--fsck-objects:: --fsck-objects[=<msg-id>=<severity>...]::
For internal use only. Die if the pack contains broken objects, but unlike `--strict`, don't
choke on broken links. If the pack contains a tree pointing to a
.gitmodules blob that does not exist, prints the hash of that blob
(for the caller to check) after the hash that goes into the name of the
pack/idx file (see "Notes").
+ +
Die if the pack contains broken objects. If the pack contains a tree An optional comma-separated list of `<msg-id>=<severity>` can be passed to
pointing to a .gitmodules blob that does not exist, prints the hash of change the severity of some possible issues, e.g.,
that blob (for the caller to check) after the hash that goes into the `--fsck-objects="missingEmail=ignore,badTagName=ignore"`. See the entry for the
name of the pack/idx file (see "Notes"). `fsck.<msg-id>` configuration options in linkgit:git-fsck[1] for more
information on the possible values of `<msg-id>` and `<severity>`.
--threads=<n>:: --threads=<n>::
Specifies the number of threads to spawn when resolving Specifies the number of threads to spawn when resolving

View File

@ -24,7 +24,7 @@
#include "setup.h" #include "setup.h"
static const char index_pack_usage[] = static const char index_pack_usage[] =
"git index-pack [-v] [-o <index-file>] [--keep | --keep=<msg>] [--[no-]rev-index] [--verify] [--strict] (<pack-file> | --stdin [--fix-thin] [<pack-file>])"; "git index-pack [-v] [-o <index-file>] [--keep | --keep=<msg>] [--[no-]rev-index] [--verify] [--strict[=<msg-id>=<severity>...]] [--fsck-objects[=<msg-id>=<severity>...]] (<pack-file> | --stdin [--fix-thin] [<pack-file>])";
struct object_entry { struct object_entry {
struct pack_idx_entry idx; struct pack_idx_entry idx;
@ -1785,8 +1785,9 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
} else if (!strcmp(arg, "--check-self-contained-and-connected")) { } else if (!strcmp(arg, "--check-self-contained-and-connected")) {
strict = 1; strict = 1;
check_self_contained_and_connected = 1; check_self_contained_and_connected = 1;
} else if (!strcmp(arg, "--fsck-objects")) { } else if (skip_to_optional_arg(arg, "--fsck-objects", &arg)) {
do_fsck_object = 1; do_fsck_object = 1;
fsck_set_msg_types(&fsck_options, arg);
} else if (!strcmp(arg, "--verify")) { } else if (!strcmp(arg, "--verify")) {
verify = 1; verify = 1;
} else if (!strcmp(arg, "--verify-stat")) { } else if (!strcmp(arg, "--verify-stat")) {

View File

@ -441,6 +441,47 @@ test_expect_success 'index-pack with --strict' '
) )
' '
test_expect_success 'setup for --strict and --fsck-objects downgrading fsck msgs' '
git init strict &&
(
cd strict &&
test_commit first hello &&
cat >commit <<-EOF &&
tree $(git rev-parse HEAD^{tree})
parent $(git rev-parse HEAD)
author A U Thor
committer A U Thor
commit: this is a commit with bad emails
EOF
git hash-object --literally -t commit -w --stdin <commit >commit_list &&
git pack-objects test <commit_list >pack-name
)
'
test_with_bad_commit () {
must_fail_arg="$1" &&
must_pass_arg="$2" &&
(
cd strict &&
test_expect_fail git index-pack "$must_fail_arg" "test-$(cat pack-name).pack"
git index-pack "$must_pass_arg" "test-$(cat pack-name).pack"
)
}
test_expect_success 'index-pack with --strict downgrading fsck msgs' '
test_with_bad_commit --strict --strict="missingEmail=ignore"
'
test_expect_success 'index-pack with --fsck-objects downgrading fsck msgs' '
test_with_bad_commit --fsck-objects --fsck-objects="missingEmail=ignore"
'
test_expect_success 'cleanup for --strict and --fsck-objects downgrading fsck msgs' '
rm -rf strict
'
test_expect_success 'honor pack.packSizeLimit' ' test_expect_success 'honor pack.packSizeLimit' '
git config pack.packSizeLimit 3m && git config pack.packSizeLimit 3m &&
packname_10=$(git pack-objects test-10 <obj-list) && packname_10=$(git pack-objects test-10 <obj-list) &&