Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='basic tests for fast-export --anonymize' |
Johannes Schindelin | a881baa | 2020-11-18 23:44:42 +0000 | [diff] [blame] | 4 | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
Johannes Schindelin | 334afbc | 2020-11-18 23:44:19 +0000 | [diff] [blame] | 5 | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
| 6 | |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 7 | . ./test-lib.sh |
| 8 | |
| 9 | test_expect_success 'setup simple repo' ' |
| 10 | test_commit base && |
| 11 | test_commit foo && |
Jeff King | 65b5d9f | 2020-06-25 15:48:32 -0400 | [diff] [blame] | 12 | test_commit retain-me && |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 13 | git checkout -b other HEAD^ && |
| 14 | mkdir subdir && |
| 15 | test_commit subdir/bar && |
| 16 | test_commit subdir/xyzzy && |
Jeff King | b897bf5 | 2020-06-23 11:24:49 -0400 | [diff] [blame] | 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" && |
Tal Kelrich | 2f040a9 | 2021-08-31 15:55:54 +0000 | [diff] [blame] | 21 | git tag -m "annotated tag" mytag && |
| 22 | git tag -m "annotated tag with long message" longtag |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 23 | ' |
| 24 | |
| 25 | test_expect_success 'export anonymized stream' ' |
Jeff King | 65b5d9f | 2020-06-25 15:48:32 -0400 | [diff] [blame] | 26 | git fast-export --anonymize --all \ |
| 27 | --anonymize-map=retain-me \ |
Jeff King | aa54845 | 2023-03-22 13:42:13 -0400 | [diff] [blame] | 28 | --anonymize-map=xyzzy:should-not-appear \ |
Jeff King | 65b5d9f | 2020-06-25 15:48:32 -0400 | [diff] [blame] | 29 | --anonymize-map=xyzzy:custom-name \ |
Jeff King | 8a49495 | 2020-06-25 15:48:35 -0400 | [diff] [blame] | 30 | --anonymize-map=other \ |
Jeff King | 65b5d9f | 2020-06-25 15:48:32 -0400 | [diff] [blame] | 31 | >stream |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 32 | ' |
| 33 | |
| 34 | # this also covers commit messages |
| 35 | test_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 | |
Jeff King | 65b5d9f | 2020-06-25 15:48:32 -0400 | [diff] [blame] | 43 | test_expect_success 'stream contains user-specified names' ' |
| 44 | grep retain-me stream && |
Jeff King | aa54845 | 2023-03-22 13:42:13 -0400 | [diff] [blame] | 45 | ! grep should-not-appear stream && |
Jeff King | 65b5d9f | 2020-06-25 15:48:32 -0400 | [diff] [blame] | 46 | grep custom-name stream |
| 47 | ' |
| 48 | |
Jeff King | b897bf5 | 2020-06-23 11:24:49 -0400 | [diff] [blame] | 49 | test_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 | |
Jeff King | 8a49495 | 2020-06-25 15:48:35 -0400 | [diff] [blame] | 55 | test_expect_success 'stream retains other as refname' ' |
| 56 | grep other stream |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 57 | ' |
| 58 | |
| 59 | test_expect_success 'stream omits other refnames' ' |
Johannes Schindelin | a881baa | 2020-11-18 23:44:42 +0000 | [diff] [blame] | 60 | ! grep main stream && |
Tal Kelrich | 2f040a9 | 2021-08-31 15:55:54 +0000 | [diff] [blame] | 61 | ! grep mytag stream && |
| 62 | ! grep longtag stream |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 63 | ' |
| 64 | |
| 65 | test_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 | |
| 72 | test_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. |
| 78 | test_expect_success 'import stream to new repository' ' |
| 79 | git init new && |
| 80 | cd new && |
| 81 | git fast-import <../stream |
| 82 | ' |
| 83 | |
| 84 | test_expect_success 'result has two branches' ' |
| 85 | git for-each-ref --format="%(refname)" refs/heads >branches && |
| 86 | test_line_count = 2 branches && |
Jeff King | 8a49495 | 2020-06-25 15:48:35 -0400 | [diff] [blame] | 87 | other_branch=refs/heads/other && |
| 88 | main_branch=$(grep -v $other_branch branches) |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 89 | ' |
| 90 | |
| 91 | test_expect_success 'repo has original shape and timestamps' ' |
| 92 | shape () { |
| 93 | git log --format="%m %ct" --left-right --boundary "$@" |
| 94 | } && |
Johannes Schindelin | a881baa | 2020-11-18 23:44:42 +0000 | [diff] [blame] | 95 | (cd .. && shape main...other) >expect && |
Jeff King | 8a49495 | 2020-06-25 15:48:35 -0400 | [diff] [blame] | 96 | shape $main_branch...$other_branch >actual && |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 97 | test_cmp expect actual |
| 98 | ' |
| 99 | |
| 100 | test_expect_success 'root tree has original shape' ' |
| 101 | # the output entries are not necessarily in the same |
Jeff King | b8c0689 | 2020-06-23 11:24:47 -0400 | [diff] [blame] | 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 && |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 106 | git ls-tree $other_branch >root && |
| 107 | cut -d" " -f2 <root | sort >actual && |
| 108 | test_cmp expect actual |
| 109 | ' |
| 110 | |
| 111 | test_expect_success 'paths in subdir ended up in one tree' ' |
Jeff King | b8c0689 | 2020-06-23 11:24:47 -0400 | [diff] [blame] | 112 | git -C .. ls-tree other:subdir >orig-subdir && |
| 113 | cut -d" " -f2 <orig-subdir | sort >expect && |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 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 | |
Jeff King | b897bf5 | 2020-06-23 11:24:49 -0400 | [diff] [blame] | 120 | test_expect_success 'identical gitlinks got identical oid' ' |
| 121 | awk "/commit/ { print \$3 }" <root | sort -u >commits && |
| 122 | test_line_count = 1 commits |
| 123 | ' |
| 124 | |
Tal Kelrich | 2f040a9 | 2021-08-31 15:55:54 +0000 | [diff] [blame] | 125 | test_expect_success 'all tags point to branch tip' ' |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 126 | git rev-parse $other_branch >expect && |
Tal Kelrich | 2f040a9 | 2021-08-31 15:55:54 +0000 | [diff] [blame] | 127 | git for-each-ref --format="%(*objectname)" | grep . | uniq >actual && |
Jeff King | a872275 | 2014-08-27 13:01:28 -0400 | [diff] [blame] | 128 | test_cmp expect actual |
| 129 | ' |
| 130 | |
| 131 | test_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 | |
| 141 | test_done |