Git fork
at reftables-rust 141 lines 4.0 kB view raw
1#!/bin/sh 2 3test_description='basic tests for fast-export --anonymize' 4GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 5export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 6 7. ./test-lib.sh 8 9test_expect_success 'setup simple repo' ' 10 test_commit base && 11 test_commit foo && 12 test_commit retain-me && 13 git checkout -b other HEAD^ && 14 mkdir subdir && 15 test_commit subdir/bar && 16 test_commit subdir/xyzzy && 17 fake_commit=$(echo $ZERO_OID | sed s/0/a/) && 18 git update-index --add --cacheinfo 160000,$fake_commit,link1 && 19 git update-index --add --cacheinfo 160000,$fake_commit,link2 && 20 git commit -m "add gitlink" && 21 git tag -m "annotated tag" mytag && 22 git tag -m "annotated tag with long message" longtag 23' 24 25test_expect_success 'export anonymized stream' ' 26 git fast-export --anonymize --all \ 27 --anonymize-map=retain-me \ 28 --anonymize-map=xyzzy:should-not-appear \ 29 --anonymize-map=xyzzy:custom-name \ 30 --anonymize-map=other \ 31 >stream 32' 33 34# this also covers commit messages 35test_expect_success 'stream omits path names' ' 36 ! grep base stream && 37 ! grep foo stream && 38 ! grep subdir stream && 39 ! grep bar stream && 40 ! grep xyzzy stream 41' 42 43test_expect_success 'stream contains user-specified names' ' 44 grep retain-me stream && 45 ! grep should-not-appear stream && 46 grep custom-name stream 47' 48 49test_expect_success 'stream omits gitlink oids' ' 50 # avoid relying on the whole oid to remain hash-agnostic; this is 51 # plenty to be unique within our test case 52 ! grep a000000000000000000 stream 53' 54 55test_expect_success 'stream retains other as refname' ' 56 grep other stream 57' 58 59test_expect_success 'stream omits other refnames' ' 60 ! grep main stream && 61 ! grep mytag stream && 62 ! grep longtag stream 63' 64 65test_expect_success 'stream omits identities' ' 66 ! grep "$GIT_COMMITTER_NAME" stream && 67 ! grep "$GIT_COMMITTER_EMAIL" stream && 68 ! grep "$GIT_AUTHOR_NAME" stream && 69 ! grep "$GIT_AUTHOR_EMAIL" stream 70' 71 72test_expect_success 'stream omits tag message' ' 73 ! grep "annotated tag" stream 74' 75 76# NOTE: we chdir to the new, anonymized repository 77# after this. All further tests should assume this. 78test_expect_success 'import stream to new repository' ' 79 git init new && 80 cd new && 81 git fast-import <../stream 82' 83 84test_expect_success 'result has two branches' ' 85 git for-each-ref --format="%(refname)" refs/heads >branches && 86 test_line_count = 2 branches && 87 other_branch=refs/heads/other && 88 main_branch=$(grep -v $other_branch branches) 89' 90 91test_expect_success 'repo has original shape and timestamps' ' 92 shape () { 93 git log --format="%m %ct" --left-right --boundary "$@" 94 } && 95 (cd .. && shape main...other) >expect && 96 shape $main_branch...$other_branch >actual && 97 test_cmp expect actual 98' 99 100test_expect_success 'root tree has original shape' ' 101 # the output entries are not necessarily in the same 102 # order, but we should at least have the same set of 103 # object types. 104 git -C .. ls-tree HEAD >orig-root && 105 cut -d" " -f2 <orig-root | sort >expect && 106 git ls-tree $other_branch >root && 107 cut -d" " -f2 <root | sort >actual && 108 test_cmp expect actual 109' 110 111test_expect_success 'paths in subdir ended up in one tree' ' 112 git -C .. ls-tree other:subdir >orig-subdir && 113 cut -d" " -f2 <orig-subdir | sort >expect && 114 tree=$(grep tree root | cut -f2) && 115 git ls-tree $other_branch:$tree >tree && 116 cut -d" " -f2 <tree >actual && 117 test_cmp expect actual 118' 119 120test_expect_success 'identical gitlinks got identical oid' ' 121 awk "/commit/ { print \$3 }" <root | sort -u >commits && 122 test_line_count = 1 commits 123' 124 125test_expect_success 'all tags point to branch tip' ' 126 git rev-parse $other_branch >expect && 127 git for-each-ref --format="%(*objectname)" | grep . | uniq >actual && 128 test_cmp expect actual 129' 130 131test_expect_success 'idents are shared' ' 132 git log --all --format="%an <%ae>" >authors && 133 sort -u authors >unique && 134 test_line_count = 1 unique && 135 git log --all --format="%cn <%ce>" >committers && 136 sort -u committers >unique && 137 test_line_count = 1 unique && 138 ! test_cmp authors committers 139' 140 141test_done