rev-parse: add a --show-object-format option

Add an option to print the object format used for input, output, or
storage. This allows shell scripts to discover the hash algorithm in
use.

Since the transition plan allows for multiple input algorithms, document
that we may provide multiple results for input, and the format that the
results may take. While we don't support this now, documenting it early
means that script authors can future-proof their scripts for when we do.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
brian m. carlson 2019-10-28 00:58:55 +00:00 коммит произвёл Junio C Hamano
Родитель 1bcef51204
Коммит 2eabd38313
3 изменённых файлов: 33 добавлений и 0 удалений

Просмотреть файл

@ -274,6 +274,13 @@ print a message to stderr and exit with nonzero status.
Show the path to the shared index file in split index mode, or Show the path to the shared index file in split index mode, or
empty if not in split-index mode. empty if not in split-index mode.
--show-object-format[=(storage|input|output)]::
Show the object format (hash algorithm) used for the repository
for storage inside the `.git` directory, input, or output. For
input, multiple algorithms may be printed, space-separated.
If not specified, the default is "storage".
Other Options Other Options
~~~~~~~~~~~~~ ~~~~~~~~~~~~~

Просмотреть файл

@ -918,6 +918,17 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
show_datestring("--min-age=", arg); show_datestring("--min-age=", arg);
continue; continue;
} }
if (opt_with_value(arg, "--show-object-format", &arg)) {
const char *val = arg ? arg : "storage";
if (strcmp(val, "storage") &&
strcmp(val, "input") &&
strcmp(val, "output"))
die("unknown mode for --show-object-format: %s",
arg);
puts(the_hash_algo->name);
continue;
}
if (show_flag(arg) && verify) if (show_flag(arg) && verify)
die_no_single_rev(quiet); die_no_single_rev(quiet);
continue; continue;

Просмотреть файл

@ -59,6 +59,7 @@ test_rev_parse () {
ROOT=$(pwd) ROOT=$(pwd)
test_expect_success 'setup' ' test_expect_success 'setup' '
test_oid_init &&
mkdir -p sub/dir work && mkdir -p sub/dir work &&
cp -R .git repo.git cp -R .git repo.git
' '
@ -131,6 +132,20 @@ test_expect_success 'rev-parse --is-shallow-repository in non-shallow repo' '
test_cmp expect actual test_cmp expect actual
' '
test_expect_success 'rev-parse --show-object-format in repo' '
echo "$(test_oid algo)" >expect &&
git rev-parse --show-object-format >actual &&
test_cmp expect actual &&
git rev-parse --show-object-format=storage >actual &&
test_cmp expect actual &&
git rev-parse --show-object-format=input >actual &&
test_cmp expect actual &&
git rev-parse --show-object-format=output >actual &&
test_cmp expect actual &&
test_must_fail git rev-parse --show-object-format=squeamish-ossifrage 2>err &&
grep "unknown mode for --show-object-format: squeamish-ossifrage" err
'
test_expect_success 'showing the superproject correctly' ' test_expect_success 'showing the superproject correctly' '
git rev-parse --show-superproject-working-tree >out && git rev-parse --show-superproject-working-tree >out &&
test_must_be_empty out && test_must_be_empty out &&