mirror of
https://github.com/git/git.git
synced 2026-08-12 22:17:03 +00:00
The standard philosophy for Unix software when a help option (such as --help) is specified is that the software should exit 0, printing the help output to standard output, since the standard output is for user-requested output and the program performed the requested task successfully. If the user specifies an incorrect option, then the help output should be printed to standard error (since the user has made a mistake) and it should exit unsuccessfully. Most of our commands currently exit 129 on receiving the -h option to print the short help, which does not line up with the standard philosophy above. Let's change that to exit 0 instead. This requires changes to a variety of tests which previously wanted the 129 exit code, so update them. Note that because git diff does its own option parsing, it still exits with 129, so update some of the tests to expect either exit status. Some commands also now pass with -h but not --help-all, so handle those cases differently for those commands. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
146 lines
3.6 KiB
Bash
Executable File
146 lines
3.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='basic update-index tests
|
|
|
|
Tests for command-line parsing and basic operation.
|
|
'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'update-index --nonsense fails' '
|
|
test_must_fail git update-index --nonsense 2>msg &&
|
|
test -s msg
|
|
'
|
|
|
|
test_expect_success 'update-index --nonsense dumps usage' '
|
|
test_expect_code 129 git update-index --nonsense 2>err &&
|
|
test_grep "[Uu]sage: git update-index" err
|
|
'
|
|
|
|
test_expect_success 'update-index -h with corrupt index' '
|
|
mkdir broken &&
|
|
(
|
|
cd broken &&
|
|
git init &&
|
|
>.git/index &&
|
|
git update-index -h >usage 2>&1
|
|
) &&
|
|
test_grep "[Uu]sage: git update-index" broken/usage
|
|
'
|
|
|
|
test_expect_success '--cacheinfo complains of missing arguments' '
|
|
test_must_fail git update-index --cacheinfo
|
|
'
|
|
|
|
test_expect_success '--cacheinfo does not accept blob null sha1' '
|
|
echo content >file &&
|
|
git add file &&
|
|
git rev-parse :file >expect &&
|
|
test_must_fail git update-index --verbose --cacheinfo 100644 $ZERO_OID file >out &&
|
|
git rev-parse :file >actual &&
|
|
test_cmp expect actual &&
|
|
|
|
cat >expect <<-\EOF &&
|
|
add '\''file'\''
|
|
EOF
|
|
test_cmp expect out
|
|
'
|
|
|
|
test_expect_success '--cacheinfo does not accept gitlink null sha1' '
|
|
git init submodule &&
|
|
(cd submodule && test_commit foo) &&
|
|
git add submodule &&
|
|
git rev-parse :submodule >expect &&
|
|
test_must_fail git update-index --cacheinfo 160000 $ZERO_OID submodule &&
|
|
git rev-parse :submodule >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success '--cacheinfo mode,sha1,path (new syntax)' '
|
|
echo content >file &&
|
|
git hash-object -w --stdin <file >expect &&
|
|
|
|
git update-index --add --cacheinfo 100644 "$(cat expect)" file &&
|
|
git rev-parse :file >actual &&
|
|
test_cmp expect actual &&
|
|
|
|
git update-index --add --verbose --cacheinfo "100644,$(cat expect),elif" >out &&
|
|
git rev-parse :elif >actual &&
|
|
test_cmp expect actual &&
|
|
|
|
cat >expect <<-\EOF &&
|
|
add '\''elif'\''
|
|
EOF
|
|
test_cmp expect out
|
|
'
|
|
|
|
test_expect_success '.lock files cleaned up' '
|
|
mkdir cleanup &&
|
|
(
|
|
cd cleanup &&
|
|
mkdir worktree &&
|
|
git init repo &&
|
|
cd repo &&
|
|
git config core.worktree ../../worktree &&
|
|
# --refresh triggers late setup_work_tree,
|
|
# the_index.cache_changed is zero, rollback_lock_file fails
|
|
git update-index --refresh --verbose >out &&
|
|
test_must_be_empty out &&
|
|
test_path_is_missing .git/index.lock
|
|
)
|
|
'
|
|
|
|
test_expect_success '--chmod=+x and chmod=-x in the same argument list' '
|
|
>A &&
|
|
>B &&
|
|
git add A B &&
|
|
git update-index --verbose --chmod=+x A --chmod=-x B >out &&
|
|
cat >expect <<-\EOF &&
|
|
add '\''A'\''
|
|
chmod +x '\''A'\''
|
|
add '\''B'\''
|
|
chmod -x '\''B'\''
|
|
EOF
|
|
test_cmp expect out &&
|
|
|
|
cat >expect <<-EOF &&
|
|
100755 $EMPTY_BLOB 0 A
|
|
100644 $EMPTY_BLOB 0 B
|
|
EOF
|
|
git ls-files --stage A B >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success '--index-version' '
|
|
git commit --allow-empty -m snap &&
|
|
git reset --hard &&
|
|
git rm -f -r --cached . &&
|
|
|
|
# The default index version is 2 --- update this test
|
|
# when you change it in the code
|
|
git update-index --show-index-version >actual &&
|
|
echo 2 >expect &&
|
|
test_cmp expect actual &&
|
|
|
|
# The next test wants us to be using version 2
|
|
git update-index --index-version 2 &&
|
|
|
|
git update-index --index-version 4 --verbose >actual &&
|
|
echo "index-version: was 2, set to 4" >expect &&
|
|
test_cmp expect actual &&
|
|
|
|
git update-index --index-version 4 --verbose >actual &&
|
|
echo "index-version: was 4, set to 4" >expect &&
|
|
test_cmp expect actual &&
|
|
|
|
git update-index --index-version 2 --verbose >actual &&
|
|
echo "index-version: was 4, set to 2" >expect &&
|
|
test_cmp expect actual &&
|
|
|
|
# non-verbose should be silent
|
|
git update-index --index-version 4 >actual &&
|
|
test_must_be_empty actual
|
|
'
|
|
|
|
test_done
|