t4207: delete replace references via git-update-ref(1)

In t4207 we set up a set of replace objects via git-replace(1). Because these references should not be impacting subsequent tests we also set up some cleanup logic that deletes the replacement references via a call to `rm -rf`. This reaches into the internal implementation details of the reference backend and will thus break when we grow an alternative refdb implementation. Refactor the tests to delete the replacement refs via Git commands so that we become independent of the actual refdb that's in use. As we don't have a nice way to delete all replacements or all references in a certain namespace, we opt for a combination of git-for-each-ref(1) and git-update-ref(1)'s `--stdin` mode. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Nov 2, 2023 at 09:47 UTC c6429fb86765714ef35d789905c1c15f50c4de91
1 file changed +8 -2
t/t4207-log-decoration-colors.sh
+8 -2
@@ -70,8 +70,14 @@ ${c_tag}tag: ${c_reset}${c_tag}A${c_reset}${c_commit})${c_reset} A
70 cmp_filtered_decorations
71 '
72
73 +remove_replace_refs () {
74 + git for-each-ref 'refs/replace*/**' --format='delete %(refname)' >in &&
75 + git update-ref --stdin <in &&
76 + rm in
77 +}
78 +
79 test_expect_success 'test coloring with replace-objects' '
74 - test_when_finished rm -rf .git/refs/replace* &&
80 + test_when_finished remove_replace_refs &&
81 test_commit C &&
82 test_commit D &&
83
@@ -99,7 +105,7 @@ EOF
105 '
106
107 test_expect_success 'test coloring with grafted commit' '
102 - test_when_finished rm -rf .git/refs/replace* &&
108 + test_when_finished remove_replace_refs &&
109
110 git replace --graft HEAD HEAD~2 &&
111