#!/bin/sh global test_description := ''basic tests for fast-export --anonymize'' source ./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 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 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 (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"basic tests for fast-export --anonymize">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <"setup simple repo">)} { (SQ <"\n"> <"\ttest_commit base &&\n"> <"\ttest_commit foo &&\n"> <"\tgit checkout -b other HEAD^ &&\n"> <"\tmkdir subdir &&\n"> <"\ttest_commit subdir/bar &&\n"> <"\ttest_commit subdir/xyzzy &&\n"> <"\tgit tag -m \"annotated tag\" mytag\n"> ) } ) (C {(test_expect_success)} {(SQ <"export anonymized stream">)} {(SQ <"\n"> <"\tgit fast-export --anonymize --all >stream\n">)} ) (C {(test_expect_success)} {(SQ <"stream omits path names">)} { (SQ <"\n"> <"\t! grep base stream &&\n"> <"\t! grep foo stream &&\n"> <"\t! grep subdir stream &&\n"> <"\t! grep bar stream &&\n"> <"\t! grep xyzzy stream\n"> ) } ) (C {(test_expect_success)} {(SQ <"stream allows master as refname">)} {(SQ <"\n"> <"\tgrep master stream\n">)} ) (C {(test_expect_success)} {(SQ <"stream omits other refnames">)} {(SQ <"\n"> <"\t! grep other stream &&\n"> <"\t! grep mytag stream\n">)} ) (C {(test_expect_success)} {(SQ <"stream omits identities">)} { (SQ <"\n"> <"\t! grep \"$GIT_COMMITTER_NAME\" stream &&\n"> <"\t! grep \"$GIT_COMMITTER_EMAIL\" stream &&\n"> <"\t! grep \"$GIT_AUTHOR_NAME\" stream &&\n"> <"\t! grep \"$GIT_AUTHOR_EMAIL\" stream\n"> ) } ) (C {(test_expect_success)} {(SQ <"stream omits tag message">)} {(SQ <"\n"> <"\t! grep \"annotated tag\" stream\n">)} ) (C {(test_expect_success)} {(SQ <"import stream to new repository">)} {(SQ <"\n"> <"\tgit init new &&\n"> <"\tcd new &&\n"> <"\tgit fast-import <../stream\n">)} ) (C {(test_expect_success)} {(SQ <"result has two branches">)} { (SQ <"\n"> <"\tgit for-each-ref --format=\"%(refname)\" refs/heads >branches &&\n"> <"\ttest_line_count = 2 branches &&\n"> <"\tother_branch=$(grep -v refs/heads/master branches)\n"> ) } ) (C {(test_expect_success)} {(SQ <"repo has original shape and timestamps">)} { (SQ <"\n"> <"\tshape () {\n"> <"\t\tgit log --format=\"%m %ct\" --left-right --boundary \"$@\"\n"> <"\t} &&\n"> <"\t(cd .. && shape master...other) >expect &&\n"> <"\tshape master...$other_branch >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"root tree has original shape">)} { (SQ <"\n"> <"\t# the output entries are not necessarily in the same\n"> <"\t# order, but we know at least that we will have one tree\n"> <"\t# and one blob, so just check the sorted order\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tblob\n"> <"\ttree\n"> <"\tEOF\n"> <"\tgit ls-tree $other_branch >root &&\n"> <"\tcut -d\" \" -f2 actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"paths in subdir ended up in one tree">)} { (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tblob\n"> <"\tblob\n"> <"\tEOF\n"> <"\ttree=$(grep tree root | cut -f2) &&\n"> <"\tgit ls-tree $other_branch:$tree >tree &&\n"> <"\tcut -d\" \" -f2 actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"tag points to branch tip">)} { (SQ <"\n"> <"\tgit rev-parse $other_branch >expect &&\n"> <"\tgit for-each-ref --format=\"%(*objectname)\" | grep . >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"idents are shared">)} { (SQ <"\n"> <"\tgit log --all --format=\"%an <%ae>\" >authors &&\n"> <"\tsort -u authors >unique &&\n"> <"\ttest_line_count = 1 unique &&\n"> <"\tgit log --all --format=\"%cn <%ce>\" >committers &&\n"> <"\tsort -u committers >unique &&\n"> <"\ttest_line_count = 1 unique &&\n"> <"\t! test_cmp authors committers\n"> ) } ) (C {(test_done)}) ] )