Merge branch 'ps/refs-files-remove-empty-parent'

When a ref creation at refs/heads/foo/bar fails, the files backend
now removes refs/heads/foo/ if the directory is otherwise not used.

* ps/refs-files-remove-empty-parent:
  refs/files: remove empty parent dirs when ref creation fails
maint
Junio C Hamano 2025-07-16 09:42:27 -07:00
commit ac5fd29581
2 changed files with 21 additions and 0 deletions

View File

@ -2760,6 +2760,8 @@ static void files_transaction_cleanup(struct files_ref_store *refs,

if (lock) {
unlock_ref(lock);
try_remove_empty_parents(refs, update->refname,
REMOVE_EMPTY_PARENTS_REF);
update->backend_data = NULL;
}
}

View File

@ -2349,4 +2349,23 @@ test_expect_success 'update-ref should also create reflog for HEAD' '
test_cmp expect actual
'

test_expect_success REFFILES 'empty directories are pruned when aborting a transaction' '
test_path_is_missing .git/refs/heads/nested &&
git update-ref --stdin <<-EOF &&
create refs/heads/nested/something HEAD
prepare
abort
EOF
test_path_is_missing .git/refs/heads/nested
'

test_expect_success REFFILES 'empty directories are pruned when not committing' '
test_path_is_missing .git/refs/heads/nested &&
git update-ref --stdin <<-EOF &&
create refs/heads/nested/something HEAD
prepare
EOF
test_path_is_missing .git/refs/heads/nested
'

test_done