Git leaks empty reference directories if reference transaction isn't committed
Preparing a reference transaction with git update-ref
and not committing it leads to leaking empty reference directories with git version 2.49.0.
When stdin is closed after preparing, a reference directory is leaked:
~/refs-test-del master
❯ ls .git/refs/heads/
~/refs-test-del master
❯ echo -ne 'start\ndelete refs/heads/subdir/reference\nprepare\n' | git update-ref --stdin
start: ok
prepare: ok
~/refs-test-del master
❯ ls .git/refs/heads/
subdir/
When a reference transaction is aborted, a reference directory is leaked:
~/refs-test-del master
❯ ls .git/refs/heads/
~/refs-test-del master
❯ echo -ne 'start\ndelete refs/heads/subdir/reference\nprepare\nabort\n' | git update-ref --stdin
start: ok
prepare: ok
abort: ok
~/refs-test-del master
❯ ls .git/refs/heads/
subdir/
When a reference transaction is committed, the directory is cleaned up:
~/refs-test-del master
❯ ls .git/refs/heads/
~/refs-test-del master
❯ echo -ne 'start\ndelete refs/heads/subdir/reference\nprepare\ncommit\n' | git update-ref --stdin
start: ok
prepare: ok
commit: ok
~/refs-test-del master
❯ ls .git/refs/heads/
Edited by Sami Hiltunen