| #!/bin/sh |
| |
| test_description='basic tests for fast-export --anonymize' |
| . ./test-lib.sh |
| |
| test_expect_success 'setup simple repo' ' |
| test_commit base && |
| test_commit foo && |
| git checkout -b other HEAD^ && |
| mkdir subdir && |
| test_commit subdir/bar && |
| test_commit subdir/xyzzy && |
| git tag -m "annotated tag" mytag |
| ' |
| |
| test_expect_success 'export anonymized stream' ' |
| git fast-export --anonymize --all >stream |
| ' |
| |
| # this also covers commit messages |
| test_expect_success 'stream omits path names' ' |
| ! grep base stream && |
| ! grep foo stream && |
| ! grep subdir stream && |
| ! grep bar stream && |
| ! grep xyzzy stream |
| ' |
| |
| test_expect_success 'stream allows master as refname' ' |
| grep master stream |
| ' |
| |
| test_expect_success 'stream omits other refnames' ' |
| ! grep other stream && |
| ! grep mytag stream |
| ' |
| |
| test_expect_success 'stream omits identities' ' |
| ! grep "$GIT_COMMITTER_NAME" stream && |
| ! grep "$GIT_COMMITTER_EMAIL" stream && |
| ! grep "$GIT_AUTHOR_NAME" stream && |
| ! grep "$GIT_AUTHOR_EMAIL" stream |
| ' |
| |
| test_expect_success 'stream omits tag message' ' |
| ! grep "annotated tag" stream |
| ' |
| |
| # NOTE: we chdir to the new, anonymized repository |
| # after this. All further tests should assume this. |
| test_expect_success 'import stream to new repository' ' |
| git init new && |
| cd new && |
| git fast-import <../stream |
| ' |
| |
| test_expect_success 'result has two branches' ' |
| git for-each-ref --format="%(refname)" refs/heads >branches && |
| test_line_count = 2 branches && |
| other_branch=$(grep -v refs/heads/master branches) |
| ' |
| |
| test_expect_success 'repo has original shape and timestamps' ' |
| shape () { |
| git log --format="%m %ct" --left-right --boundary "$@" |
| } && |
| (cd .. && shape master...other) >expect && |
| shape master...$other_branch >actual && |
| test_cmp expect actual |
| ' |
| |
| test_expect_success 'root tree has original shape' ' |
| # the output entries are not necessarily in the same |
| # order, but we know at least that we will have one tree |
| # and one blob, so just check the sorted order |
| cat >expect <<-\EOF && |
| blob |
| tree |
| EOF |
| git ls-tree $other_branch >root && |
| cut -d" " -f2 <root | sort >actual && |
| test_cmp expect actual |
| ' |
| |
| test_expect_success 'paths in subdir ended up in one tree' ' |
| cat >expect <<-\EOF && |
| blob |
| blob |
| EOF |
| tree=$(grep tree root | cut -f2) && |
| git ls-tree $other_branch:$tree >tree && |
| cut -d" " -f2 <tree >actual && |
| test_cmp expect actual |
| ' |
| |
| test_expect_success 'tag points to branch tip' ' |
| git rev-parse $other_branch >expect && |
| git for-each-ref --format="%(*objectname)" | grep . >actual && |
| test_cmp expect actual |
| ' |
| |
| test_expect_success 'idents are shared' ' |
| git log --all --format="%an <%ae>" >authors && |
| sort -u authors >unique && |
| test_line_count = 1 unique && |
| git log --all --format="%cn <%ce>" >committers && |
| sort -u committers >unique && |
| test_line_count = 1 unique && |
| ! test_cmp authors committers |
| ' |
| |
| test_done |