@matheusbsbs / matheus-bagliano / commits / 8a49495583
Fork 0

fast-export: anonymize "master" refname

Running "fast-export --anonymize" will leave "refs/heads/master" untouched in the output, for two reasons: - it helped to have some known reference point between the original and anonymized repository - since it's historically the default branch name, it doesn't leak any information Now that we can ask fast-export to retain particular tokens, we have a much better tool for the first one (because it works for any ref, not just master). For the second, the notion of "default branch name" is likely to become configurable soon, at which point the name _does_ leak information. Let's drop this special case in preparation. Note that we have to adjust the test a bit, since it relied on using the name "master" in the anonymized repos. We could just use --anonymize-map=master to keep the same output, but then we wouldn't know if it works because of our hard-coded master or because of the explicit map. So let's flip the test a bit, and confirm that we anonymize "master", but keep "other" in the output. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Jun 25, 2020 at 15:48 UTC 8a494955835e3635926d4f6f4607c1ed95b011fc
2 files changed +7 -12
builtin/fast-export.c
-7
@@ -538,13 +538,6 @@ static const char *anonymize_refname(const char *refname)
538 static struct strbuf anon = STRBUF_INIT;
539 int i;
540
541 - /*
542 - * We also leave "master" as a special case, since it does not reveal
543 - * anything interesting.
544 - */
545 - if (!strcmp(refname, "refs/heads/master"))
546 - return refname;
547 -
541 strbuf_reset(&anon);
542 for (i = 0; i < ARRAY_SIZE(prefixes); i++) {
543 if (skip_prefix(refname, prefixes[i], &refname)) {
t/t9351-fast-export-anonymize.sh
+7 -5
@@ -22,6 +22,7 @@ test_expect_success 'export anonymized stream' '
22 git fast-export --anonymize --all \
23 --anonymize-map=retain-me \
24 --anonymize-map=xyzzy:custom-name \
25 + --anonymize-map=other \
26 >stream
27 '
28
@@ -45,12 +46,12 @@ test_expect_success 'stream omits gitlink oids' '
46 ! grep a000000000000000000 stream
47 '
48
48 -test_expect_success 'stream allows master as refname' '
49 - grep master stream
49 +test_expect_success 'stream retains other as refname' '
50 + grep other stream
51 '
52
53 test_expect_success 'stream omits other refnames' '
53 - ! grep other stream &&
54 + ! grep master stream &&
55 ! grep mytag stream
56 '
57
@@ -76,7 +77,8 @@ test_expect_success 'import stream to new repository' '
77 test_expect_success 'result has two branches' '
78 git for-each-ref --format="%(refname)" refs/heads >branches &&
79 test_line_count = 2 branches &&
79 - other_branch=$(grep -v refs/heads/master branches)
80 + other_branch=refs/heads/other &&
81 + main_branch=$(grep -v $other_branch branches)
82 '
83
84 test_expect_success 'repo has original shape and timestamps' '
@@ -84,7 +86,7 @@ test_expect_success 'repo has original shape and timestamps' '
86 git log --format="%m %ct" --left-right --boundary "$@"
87 } &&
88 (cd .. && shape master...other) >expect &&
87 - shape master...$other_branch >actual &&
89 + shape $main_branch...$other_branch >actual &&
90 test_cmp expect actual
91 '
92