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