[PATCH v2 05/12] fast-export: handle overridden main branch names correctly
- From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jun 15, 2020, 12:50 UTC
- Message-ID
- <a3be4f39aa240e614a2e12756e1ea864c35137a2.1592225416.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.656.v2.git.1592225416.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>
When anonymizing commit history, we are careful to translate the main branch name to `ref0`.
When the main branch name is overridden via the config, we will want `git fast-export` to use that overridden name instead.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> --- builtin/fast-export.c | 11 ++++++++++- t/t9351-fast-export-anonymize.sh | 6 ++++++ 2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/builtin/fast-export.c b/builtin/fast-export.c index 1072bbf041f..deeb01b6937 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -515,14 +515,23 @@ static const char *anonymize_refname(const char *refname) }; static struct hashmap refs; static struct strbuf anon = STRBUF_INIT; + static char *main_branch; int i; /* * In certain circumstances, it might be interesting to be able to * identify the main branch. For that reason, let's force its name to * be anonymized to `ref0`. + * + * While the main branch name might often be `main` for new + * repositories (and `master` for aged ones), and such well-known names + * may not necessarily need anonymizing, it could be configured to use + * a secret word that the user may not want to reveal. */ - if (!strcmp(refname, "refs/heads/master")) + if (!main_branch) + main_branch = git_main_branch_name(MAIN_BRANCH_FULL_NAME); + + if (!strcmp(refname, main_branch)) return "refs/heads/ref0"; strbuf_reset(&anon); diff --git a/t/t9351-fast-export-anonymize.sh b/t/t9351-fast-export-anonymize.sh index 2415f0ec213..f42be635c2f 100755 --- a/t/t9351-fast-export-anonymize.sh +++ b/t/t9351-fast-export-anonymize.sh @@ -31,6 +31,12 @@ test_expect_success 'stream translates master to ref0' ' ! grep master stream ' +test_expect_success 'respects configured main branch' ' + git -c core.mainBranch=does-not-exist \ + fast-export --anonymize --all >stream-without-ref0 && + ! grep ref0 stream-without-ref0 +' + test_expect_success 'stream omits other refnames' ' ! grep other stream && ! grep mytag stream
-- gitgitgadget