Skip to content

Commit 02b5c1a

Browse files
pks-tgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent a54a84b commit 02b5c1a

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

git-p4.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4251,7 +4251,8 @@ def run(self, args):
42514251
if self.tempBranches != []:
42524252
for branch in self.tempBranches:
42534253
read_pipe(["git", "update-ref", "-d", branch])
4254-
os.rmdir(os.path.join(os.environ.get("GIT_DIR", ".git"), self.tempBranchLocation))
4254+
if len(read_pipe(["git", "for-each-ref", self.tempBranchLocation])) > 0:
4255+
die("There are unexpected temporary branches")
42554256

42564257
# Create a symbolic ref p4/HEAD pointing to p4/<branch> to allow
42574258
# a convenient shortcut refname "p4".

0 commit comments

Comments
 (0)