#!/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 && 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 && 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 && 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 && test_cmp expect actual ' done test_done