Add the --format flag to git-repo-info. By using this flag, the users can choose the format for obtaining the data they requested. Given that this command can be used for generating input for other applications and for being read by end users, it requires at least two formats: one for being read by humans and other for being read by machines. Some other Git commands also have two output formats, notably git-config which was the inspiration for the two formats that were chosen here: - keyvalue, where the retrieved data is printed one per line, using = for delimiting the key and the value. This is the default format, targeted for end users. - nul, where the retrieved data is separated by NUL characters, using the newline character for delimiting the key and the value. This format is targeted for being read by machines. Helped-by: Phillip Wood <phillip.wood@dunelm.org.uk> Helped-by: Junio C Hamano <gitster@pobox.com> Helped-by: Justin Tobler <jltobler@gmail.com> Helped-by: Eric Sunshine <sunshine@sunshineco.com> Mentored-by: Karthik Nayak <karthik.188@gmail.com> Mentored-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Lucas Seiki Oshiro <lucasseikioshiro@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
96 lines
2.8 KiB
Bash
Executable File
96 lines
2.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='test git repo-info'
|
|
|
|
. ./test-lib.sh
|
|
|
|
# Test whether a key-value pair is correctly returned
|
|
#
|
|
# Usage: test_repo_info <label> <init command> <repo_name> <key> <expected value>
|
|
#
|
|
# Arguments:
|
|
# label: the label of the test
|
|
# init_command: a command which creates a repository
|
|
# repo_name: the name of the repository that will be created in init_command
|
|
# key: the key of the field that is being tested
|
|
# expected_value: the value that the field should contain
|
|
test_repo_info () {
|
|
label=$1
|
|
init_command=$2
|
|
repo_name=$3
|
|
key=$4
|
|
expected_value=$5
|
|
|
|
test_expect_success "setup: $label" '
|
|
eval "$init_command $repo_name"
|
|
'
|
|
|
|
test_expect_success "keyvalue: $label" '
|
|
echo "$key=$expected_value" > expect &&
|
|
git -C "$repo_name" repo info "$key" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success "nul: $label" '
|
|
printf "%s\n%s\0" "$key" "$expected_value" >expect &&
|
|
git -C "$repo_name" repo info --format=nul "$key" >actual &&
|
|
test_cmp_bin expect actual
|
|
'
|
|
}
|
|
|
|
test_repo_info 'ref format files is retrieved correctly' \
|
|
'git init --ref-format=files' 'format-files' 'references.format' 'files'
|
|
|
|
test_repo_info 'ref format reftable is retrieved correctly' \
|
|
'git init --ref-format=reftable' 'format-reftable' 'references.format' 'reftable'
|
|
|
|
test_repo_info 'bare repository = false is retrieved correctly' \
|
|
'git init' 'nonbare' 'layout.bare' 'false'
|
|
|
|
test_repo_info 'bare repository = true is retrieved correctly' \
|
|
'git init --bare' 'bare' 'layout.bare' 'true'
|
|
|
|
test_repo_info 'shallow repository = false is retrieved correctly' \
|
|
'git init' 'nonshallow' 'layout.shallow' 'false'
|
|
|
|
test_expect_success 'setup remote' '
|
|
git init remote &&
|
|
echo x >remote/x &&
|
|
git -C remote add x &&
|
|
git -C remote commit -m x
|
|
'
|
|
|
|
test_repo_info 'shallow repository = true is retrieved correctly' \
|
|
'git clone --depth 1 "file://$PWD/remote"' 'shallow' 'layout.shallow' 'true'
|
|
|
|
test_expect_success 'values returned in order requested' '
|
|
cat >expect <<-\EOF &&
|
|
layout.bare=false
|
|
references.format=files
|
|
layout.bare=false
|
|
EOF
|
|
git init --ref-format=files ordered &&
|
|
git -C ordered repo info layout.bare references.format layout.bare >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'git-repo-info fails if an invalid key is requested' '
|
|
echo "error: key ${SQ}foo${SQ} not found" >expect &&
|
|
test_must_fail git repo info foo 2>actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'git-repo-info outputs data even if there is an invalid field' '
|
|
echo "references.format=$(test_detect_ref_format)" >expect &&
|
|
test_must_fail git repo info foo references.format bar >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'git-repo-info aborts when requesting an invalid format' '
|
|
echo "fatal: invalid format ${SQ}foo${SQ}" >expect &&
|
|
test_must_fail git repo info --format=foo 2>actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_done
|