|  | #!/bin/sh | 
|  |  | 
|  | test_description='submodule --cached, --quiet etc. output' | 
|  |  | 
|  | TEST_PASSES_SANITIZE_LEAK=true | 
|  | . ./test-lib.sh | 
|  | . "$TEST_DIRECTORY"/lib-t3100.sh | 
|  |  | 
|  | setup_sub () { | 
|  | local d="$1" && | 
|  | shift && | 
|  | git $@ clone . "$d" && | 
|  | git $@ submodule add ./"$d" | 
|  | } | 
|  |  | 
|  | normalize_status () { | 
|  | sed -e 's/-g[0-9a-f]*/-gHASH/' | 
|  | } | 
|  |  | 
|  | test_expect_success 'setup' ' | 
|  | test_commit A && | 
|  | test_commit B && | 
|  | setup_sub S  && | 
|  | setup_sub S.D && | 
|  | setup_sub S.C && | 
|  | setup_sub S.C.D && | 
|  | setup_sub X && | 
|  | git add S* && | 
|  | test_commit C && | 
|  |  | 
|  | # recursive in X/ | 
|  | git -C X pull && | 
|  | GIT_ALLOW_PROTOCOL=file git -C X submodule update --init && | 
|  |  | 
|  | # dirty | 
|  | for d in S.D X/S.D | 
|  | do | 
|  | echo dirty >"$d"/A.t || return 1 | 
|  | done && | 
|  |  | 
|  | # commit (for --cached) | 
|  | for d in S.C* X/S.C* | 
|  | do | 
|  | git -C "$d" reset --hard A || return 1 | 
|  | done && | 
|  |  | 
|  | # dirty | 
|  | for d in S*.D X/S*.D | 
|  | do | 
|  | echo dirty >"$d/C2.t" || return 1 | 
|  | done && | 
|  |  | 
|  | for ref in A B C | 
|  | do | 
|  | # Not different with SHA-1 and SHA-256, just (ab)using | 
|  | # test_oid_cache as a variable bag to avoid using | 
|  | # $(git rev-parse ...). | 
|  | oid=$(git rev-parse $ref) && | 
|  | test_oid_cache <<-EOF || return 1 | 
|  | $ref sha1:$oid | 
|  | $ref sha256:$oid | 
|  | EOF | 
|  | done | 
|  | ' | 
|  |  | 
|  | for opts in "" "status" | 
|  | do | 
|  | test_expect_success "git submodule $opts" ' | 
|  | sed -e "s/^>//" >expect <<-EOF && | 
|  | > $(test_oid B) S (B) | 
|  | >+$(test_oid A) S.C (A) | 
|  | >+$(test_oid A) S.C.D (A) | 
|  | > $(test_oid B) S.D (B) | 
|  | >+$(test_oid C) X (C) | 
|  | EOF | 
|  | git submodule $opts >actual.raw && | 
|  | normalize_status <actual.raw >actual && | 
|  | test_cmp expect actual | 
|  | ' | 
|  | done | 
|  |  | 
|  | for opts in \ | 
|  | "status --recursive" | 
|  | do | 
|  | test_expect_success "git submodule $opts" ' | 
|  | sed -e "s/^>//" >expect <<-EOF && | 
|  | > $(test_oid B) S (B) | 
|  | >+$(test_oid A) S.C (A) | 
|  | >+$(test_oid A) S.C.D (A) | 
|  | > $(test_oid B) S.D (B) | 
|  | >+$(test_oid C) X (C) | 
|  | > $(test_oid B) X/S (B) | 
|  | >+$(test_oid A) X/S.C (A) | 
|  | >+$(test_oid A) X/S.C.D (A) | 
|  | > $(test_oid B) X/S.D (B) | 
|  | > $(test_oid B) X/X (B) | 
|  | EOF | 
|  | git submodule $opts >actual.raw && | 
|  | normalize_status <actual.raw >actual && | 
|  | test_cmp expect actual | 
|  | ' | 
|  | done | 
|  |  | 
|  | for opts in \ | 
|  | "--quiet" \ | 
|  | "--quiet status" \ | 
|  | "status --quiet" | 
|  | do | 
|  | test_expect_success "git submodule $opts" ' | 
|  | git submodule $opts >out && | 
|  | test_must_be_empty out | 
|  | ' | 
|  | done | 
|  |  | 
|  | for opts in \ | 
|  | "--cached" \ | 
|  | "--cached status" \ | 
|  | "status --cached" | 
|  | do | 
|  | test_expect_success "git submodule $opts" ' | 
|  | sed -e "s/^>//" >expect <<-EOF && | 
|  | > $(test_oid B) S (B) | 
|  | >+$(test_oid B) S.C (B) | 
|  | >+$(test_oid B) S.C.D (B) | 
|  | > $(test_oid B) S.D (B) | 
|  | >+$(test_oid B) X (B) | 
|  | EOF | 
|  | git submodule $opts >actual.raw && | 
|  | normalize_status <actual.raw >actual && | 
|  | test_cmp expect actual | 
|  | ' | 
|  | done | 
|  |  | 
|  | for opts in \ | 
|  | "--cached --quiet" \ | 
|  | "--cached --quiet status" \ | 
|  | "--cached status --quiet" \ | 
|  | "--quiet status --cached" \ | 
|  | "status --cached --quiet" | 
|  | do | 
|  | test_expect_success "git submodule $opts" ' | 
|  | git submodule $opts >out && | 
|  | test_must_be_empty out | 
|  | ' | 
|  | done | 
|  |  | 
|  | for opts in \ | 
|  | "status --cached --recursive" \ | 
|  | "--cached status --recursive" | 
|  | do | 
|  | test_expect_success "git submodule $opts" ' | 
|  | sed -e "s/^>//" >expect <<-EOF && | 
|  | > $(test_oid B) S (B) | 
|  | >+$(test_oid B) S.C (B) | 
|  | >+$(test_oid B) S.C.D (B) | 
|  | > $(test_oid B) S.D (B) | 
|  | >+$(test_oid B) X (B) | 
|  | > $(test_oid B) X/S (B) | 
|  | >+$(test_oid B) X/S.C (B) | 
|  | >+$(test_oid B) X/S.C.D (B) | 
|  | > $(test_oid B) X/S.D (B) | 
|  | > $(test_oid B) X/X (B) | 
|  | EOF | 
|  | git submodule $opts >actual.raw && | 
|  | normalize_status <actual.raw >actual && | 
|  | test_cmp expect actual | 
|  | ' | 
|  | done | 
|  |  | 
|  | test_done |