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