| 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='basic update-index tests |
| 4 | |
| 5 | Tests for command-line parsing and basic operation. |
| 6 | ' |
| 7 | |
| 8 | . ./test-lib.sh |
| 9 | |
| 10 | test_expect_success 'update-index --nonsense fails' ' |
| 11 | test_must_fail git update-index --nonsense 2>msg && |
| 12 | test -s msg |
| 13 | ' |
| 14 | |
| 15 | test_expect_success 'update-index --nonsense dumps usage' ' |
| 16 | test_expect_code 129 git update-index --nonsense 2>err && |
| 17 | test_grep "[Uu]sage: git update-index" err |
| 18 | ' |
| 19 | |
| 20 | test_expect_success 'update-index -h with corrupt index' ' |
| 21 | mkdir broken && |
| 22 | ( |
| 23 | cd broken && |
| 24 | git init && |
| 25 | >.git/index && |
| 26 | git update-index -h >usage 2>&1 |
| 27 | ) && |
| 28 | test_grep "[Uu]sage: git update-index" broken/usage |
| 29 | ' |
| 30 | |
| 31 | test_expect_success '--cacheinfo complains of missing arguments' ' |
| 32 | test_must_fail git update-index --cacheinfo |
| 33 | ' |
| 34 | |
| 35 | test_expect_success '--cacheinfo does not accept blob null sha1' ' |
| 36 | echo content >file && |
| 37 | git add file && |
| 38 | git rev-parse :file >expect && |
| 39 | test_must_fail git update-index --verbose --cacheinfo 100644 $ZERO_OID file >out && |
| 40 | git rev-parse :file >actual && |
| 41 | test_cmp expect actual && |
| 42 | |
| 43 | cat >expect <<-\EOF && |
| 44 | add '\''file'\'' |
| 45 | EOF |
| 46 | test_cmp expect out |
| 47 | ' |
| 48 | |
| 49 | test_expect_success '--cacheinfo does not accept gitlink null sha1' ' |
| 50 | git init submodule && |
| 51 | (cd submodule && test_commit foo) && |
| 52 | git add submodule && |
| 53 | git rev-parse :submodule >expect && |
| 54 | test_must_fail git update-index --cacheinfo 160000 $ZERO_OID submodule && |
| 55 | git rev-parse :submodule >actual && |
| 56 | test_cmp expect actual |
| 57 | ' |
| 58 | |
| 59 | test_expect_success '--cacheinfo mode,sha1,path (new syntax)' ' |
| 60 | echo content >file && |
| 61 | git hash-object -w --stdin <file >expect && |
| 62 | |
| 63 | git update-index --add --cacheinfo 100644 "$(cat expect)" file && |
| 64 | git rev-parse :file >actual && |
| 65 | test_cmp expect actual && |
| 66 | |
| 67 | git update-index --add --verbose --cacheinfo "100644,$(cat expect),elif" >out && |
| 68 | git rev-parse :elif >actual && |
| 69 | test_cmp expect actual && |
| 70 | |
| 71 | cat >expect <<-\EOF && |
| 72 | add '\''elif'\'' |
| 73 | EOF |
| 74 | test_cmp expect out |
| 75 | ' |
| 76 | |
| 77 | test_expect_success '.lock files cleaned up' ' |
| 78 | mkdir cleanup && |
| 79 | ( |
| 80 | cd cleanup && |
| 81 | mkdir worktree && |
| 82 | git init repo && |
| 83 | cd repo && |
| 84 | git config core.worktree ../../worktree && |
| 85 | # --refresh triggers late setup_work_tree, |
| 86 | # the_index.cache_changed is zero, rollback_lock_file fails |
| 87 | git update-index --refresh --verbose >out && |
| 88 | test_must_be_empty out && |
| 89 | test_path_is_missing .git/index.lock |
| 90 | ) |
| 91 | ' |
| 92 | |
| 93 | test_expect_success '--chmod=+x and chmod=-x in the same argument list' ' |
| 94 | >A && |
| 95 | >B && |
| 96 | git add A B && |
| 97 | git update-index --verbose --chmod=+x A --chmod=-x B >out && |
| 98 | cat >expect <<-\EOF && |
| 99 | add '\''A'\'' |
| 100 | chmod +x '\''A'\'' |
| 101 | add '\''B'\'' |
| 102 | chmod -x '\''B'\'' |
| 103 | EOF |
| 104 | test_cmp expect out && |
| 105 | |
| 106 | cat >expect <<-EOF && |
| 107 | 100755 $EMPTY_BLOB 0 A |
| 108 | 100644 $EMPTY_BLOB 0 B |
| 109 | EOF |
| 110 | git ls-files --stage A B >actual && |
| 111 | test_cmp expect actual |
| 112 | ' |
| 113 | |
| 114 | test_expect_success '--index-version' ' |
| 115 | git commit --allow-empty -m snap && |
| 116 | git reset --hard && |
| 117 | git rm -f -r --cached . && |
| 118 | |
| 119 | # The default index version is 2 --- update this test |
| 120 | # when you change it in the code |
| 121 | git update-index --show-index-version >actual && |
| 122 | echo 2 >expect && |
| 123 | test_cmp expect actual && |
| 124 | |
| 125 | # The next test wants us to be using version 2 |
| 126 | git update-index --index-version 2 && |
| 127 | |
| 128 | git update-index --index-version 4 --verbose >actual && |
| 129 | echo "index-version: was 2, set to 4" >expect && |
| 130 | test_cmp expect actual && |
| 131 | |
| 132 | git update-index --index-version 4 --verbose >actual && |
| 133 | echo "index-version: was 4, set to 4" >expect && |
| 134 | test_cmp expect actual && |
| 135 | |
| 136 | git update-index --index-version 2 --verbose >actual && |
| 137 | echo "index-version: was 4, set to 2" >expect && |
| 138 | test_cmp expect actual && |
| 139 | |
| 140 | # non-verbose should be silent |
| 141 | git update-index --index-version 4 >actual && |
| 142 | test_must_be_empty actual |
| 143 | ' |
| 144 | |
| 145 | test_done |