]> git.ipfire.org Git - thirdparty/git.git/commit - git-p4.py
git-p4: stop reaching into the refdb
authorPatrick Steinhardt <ps@pks.im>
Thu, 11 Jan 2024 13:47:27 +0000 (14:47 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 11 Jan 2024 21:10:41 +0000 (13:10 -0800)
commit02b5c1a94698a14b6df71a9e8d38b75169787fa3
treefe6a6a24d030711dbda53e796cf450a8dc5dfdb7
parenta54a84b333adbecf7bc4483c0e36ed5878cac17b
git-p4: stop reaching into the refdb

The git-p4 tool creates a bunch of temporary branches that share a
common prefix "refs/git-p4-tmp/". These branches get cleaned up via
git-update-ref(1) after the import has finished. Once done, we try to
manually remove the now supposedly-empty ".git/refs/git-p4-tmp/"
directory.

This last step can fail in case there still are any temporary branches
around that we failed to delete because `os.rmdir()` refuses to delete a
non-empty directory. It can thus be seen as kind of a sanity check to
verify that we really did delete all temporary branches. Another failure
mode though is when the directory didn't exist in the first place, which
can be the case when using an alternate ref backend like the upcoming
"reftable" backend.

Convert the code to instead use git-for-each-ref(1) to verify that there
are no more temporary branches around. This works alright with alternate
ref backends while retaining the sanity check that we really did prune
all temporary branches.

This is a modification in behaviour for the "files" backend because the
empty directory does not get deleted anymore. But arguably we should not
care about such implementation details of the ref backend anyway, and
this should not cause any user-visible change in behaviour.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-p4.py