#!/bin/sh test_description='test textconv caching' . ./test-lib.sh cat >helper <<'EOF' #!/bin/sh sed 's/^/converted: /' "$@" >helper.out cat helper.out EOF chmod +x helper test_expect_success 'setup' ' echo foo content 1 >foo.bin && echo bar content 1 >bar.bin && git add . && git commit -m one && foo1=$(git rev-parse --short HEAD:foo.bin) && bar1=$(git rev-parse --short HEAD:bar.bin) && echo foo content 2 >foo.bin && echo bar content 2 >bar.bin && git commit -a -m two && foo2=$(git rev-parse --short HEAD:foo.bin) && bar2=$(git rev-parse --short HEAD:bar.bin) && echo "*.bin diff=magic" >.gitattributes && git config diff.magic.textconv ./helper && git config diff.magic.cachetextconv true ' cat >expect <<EOF diff --git a/bar.bin b/bar.bin index $bar1..$bar2 100644 --- a/bar.bin +++ b/bar.bin @@ -1 +1 @@ -converted: bar content 1 +converted: bar content 2 diff --git a/foo.bin b/foo.bin index $foo1..$foo2 100644 --- a/foo.bin +++ b/foo.bin @@ -1 +1 @@ -converted: foo content 1 +converted: foo content 2 EOF test_expect_success 'first textconv works' ' git diff HEAD^ HEAD >actual && test_cmp expect actual ' test_expect_success 'cached textconv produces same output' ' git diff HEAD^ HEAD >actual && test_cmp expect actual ' test_expect_success 'cached textconv does not run helper' ' rm -f helper.out && git diff HEAD^ HEAD >actual && test_cmp expect actual && ! test -r helper.out ' cat >expect <<EOF diff --git a/bar.bin b/bar.bin index $bar1..$bar2 100644 --- a/bar.bin +++ b/bar.bin @@ -1,2 +1,2 @@ converted: other -converted: bar content 1 +converted: bar content 2 diff --git a/foo.bin b/foo.bin index $foo1..$foo2 100644 --- a/foo.bin +++ b/foo.bin @@ -1,2 +1,2 @@ converted: other -converted: foo content 1 +converted: foo content 2 EOF test_expect_success 'changing textconv invalidates cache' ' echo other >other && git config diff.magic.textconv "./helper other" && git diff HEAD^ HEAD >actual && test_cmp expect actual ' cat >expect <<EOF diff --git a/bar.bin b/bar.bin index $bar1..$bar2 100644 --- a/bar.bin +++ b/bar.bin @@ -1,2 +1,2 @@ converted: other -converted: bar content 1 +converted: bar content 2 diff --git a/foo.bin b/foo.bin index $foo1..$foo2 100644 --- a/foo.bin +++ b/foo.bin @@ -1 +1 @@ -converted: foo content 1 +converted: foo content 2 EOF test_expect_success 'switching diff driver produces correct results' ' git config diff.moremagic.textconv ./helper && echo foo.bin diff=moremagic >>.gitattributes && git diff HEAD^ HEAD >actual && test_cmp expect actual ' # The point here is to test that we can log the notes cache and still use it to # produce a diff later (older versions of git would segfault on this). It's # much more likely to come up in the real world with "log --all -p", but using # --no-walk lets us reliably reproduce the order of traversal. test_expect_success 'log notes cache and still use cache for -p' ' git log --no-walk -p refs/notes/textconv/magic HEAD ' test_done