3 test_description
='basic tests for fast-export --anonymize'
4 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
=main
5 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
9 test_expect_success
'setup simple repo' '
12 test_commit retain-me &&
13 git checkout -b other HEAD^ &&
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
25 test_expect_success
'export anonymized stream' '
26 git fast-export --anonymize --all \
27 --anonymize-map=retain-me \
28 --anonymize-map=xyzzy:custom-name \
29 --anonymize-map=other \
33 # this also covers commit messages
34 test_expect_success
'stream omits path names' '
37 ! grep subdir stream &&
42 test_expect_success
'stream contains user-specified names' '
43 grep retain-me stream &&
44 grep custom-name stream
47 test_expect_success
'stream omits gitlink oids' '
48 # avoid relying on the whole oid to remain hash-agnostic; this is
49 # plenty to be unique within our test case
50 ! grep a000000000000000000 stream
53 test_expect_success
'stream retains other as refname' '
57 test_expect_success
'stream omits other refnames' '
59 ! grep mytag stream &&
63 test_expect_success
'stream omits identities' '
64 ! grep "$GIT_COMMITTER_NAME" stream &&
65 ! grep "$GIT_COMMITTER_EMAIL" stream &&
66 ! grep "$GIT_AUTHOR_NAME" stream &&
67 ! grep "$GIT_AUTHOR_EMAIL" stream
70 test_expect_success
'stream omits tag message' '
71 ! grep "annotated tag" stream
74 # NOTE: we chdir to the new, anonymized repository
75 # after this. All further tests should assume this.
76 test_expect_success
'import stream to new repository' '
79 git fast-import <../stream
82 test_expect_success
'result has two branches' '
83 git for-each-ref --format="%(refname)" refs/heads >branches &&
84 test_line_count = 2 branches &&
85 other_branch=refs/heads/other &&
86 main_branch=$(grep -v $other_branch branches)
89 test_expect_success
'repo has original shape and timestamps' '
91 git log --format="%m %ct" --left-right --boundary "$@"
93 (cd .. && shape main...other) >expect &&
94 shape $main_branch...$other_branch >actual &&
95 test_cmp expect actual
98 test_expect_success
'root tree has original shape' '
99 # the output entries are not necessarily in the same
100 # order, but we should at least have the same set of
102 git -C .. ls-tree HEAD >orig-root &&
103 cut -d" " -f2 <orig-root | sort >expect &&
104 git ls-tree $other_branch >root &&
105 cut -d" " -f2 <root | sort >actual &&
106 test_cmp expect actual
109 test_expect_success
'paths in subdir ended up in one tree' '
110 git -C .. ls-tree other:subdir >orig-subdir &&
111 cut -d" " -f2 <orig-subdir | sort >expect &&
112 tree=$(grep tree root | cut -f2) &&
113 git ls-tree $other_branch:$tree >tree &&
114 cut -d" " -f2 <tree >actual &&
115 test_cmp expect actual
118 test_expect_success
'identical gitlinks got identical oid' '
119 awk "/commit/ { print \$3 }" <root | sort -u >commits &&
120 test_line_count = 1 commits
123 test_expect_success
'all tags point to branch tip' '
124 git rev-parse $other_branch >expect &&
125 git for-each-ref --format="%(*objectname)" | grep . | uniq >actual &&
126 test_cmp expect actual
129 test_expect_success
'idents are shared' '
130 git log --all --format="%an <%ae>" >authors &&
131 sort -u authors >unique &&
132 test_line_count = 1 unique &&
133 git log --all --format="%cn <%ce>" >committers &&
134 sort -u committers >unique &&
135 test_line_count = 1 unique &&
136 ! test_cmp authors committers