From 0668f251cff83ddf0dade28686b408a6f6e7b13a Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 2 Mar 2017 22:58:28 +0000 Subject: [PATCH] Don't read branch.lock files as branches Since Git 2.10 (92b1551b1d407065f961ffd1d972481063a0edcc) such lock files can be created to synchronize ref updates. We used to read them as branches and later fail either because no hash was available, or because the files were removed. --- .../src/git4idea/repo/GitRepositoryReader.java | 3 ++- .../git4idea/repo/GitRepositoryReaderNewTest.kt | 14 ++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/git4idea/src/git4idea/repo/GitRepositoryReader.java b/plugins/git4idea/src/git4idea/repo/GitRepositoryReader.java index 8370f2ed1ed0..06a32c52e434 100644 --- a/plugins/git4idea/src/git4idea/repo/GitRepositoryReader.java +++ b/plugins/git4idea/src/git4idea/repo/GitRepositoryReader.java @@ -31,6 +31,7 @@ import com.intellij.vcs.log.Hash; import com.intellij.vcs.log.impl.HashImpl; import git4idea.*; import git4idea.branch.GitBranchUtil; +import git4idea.validators.GitRefNameValidator; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -272,7 +273,7 @@ class GitRepositoryReader { if (relativePath != null) { String branchName = prefix + FileUtil.toSystemIndependentName(relativePath); String hash = loadHashFromBranchFile(file); - if (hash != null) { + if (hash != null && GitRefNameValidator.getInstance().checkInput(branchName)) { result.put(branchName, hash); } } diff --git a/plugins/git4idea/tests/git4idea/repo/GitRepositoryReaderNewTest.kt b/plugins/git4idea/tests/git4idea/repo/GitRepositoryReaderNewTest.kt index 12c6c79de260..7d5154365a98 100644 --- a/plugins/git4idea/tests/git4idea/repo/GitRepositoryReaderNewTest.kt +++ b/plugins/git4idea/tests/git4idea/repo/GitRepositoryReaderNewTest.kt @@ -19,13 +19,11 @@ import com.intellij.dvcs.repo.Repository.State import com.intellij.openapi.util.SystemInfo import git4idea.GitLocalBranch import git4idea.branch.GitBranchUtil +import git4idea.test.* import git4idea.test.GitScenarios.commit import git4idea.test.GitScenarios.conflict -import git4idea.test.GitSingleRepoTest -import git4idea.test.makeCommit -import git4idea.test.git -import git4idea.test.last import org.junit.Assume.assumeTrue +import java.io.File import kotlin.test.assertNotEquals /** @@ -153,6 +151,14 @@ class GitRepositoryReaderNewTest : GitSingleRepoTest() { assertNotEquals(GitLocalBranch("UpperCase"), GitLocalBranch("uppercase")) } + fun `test non-branch files are ignored`() { + tac("f.txt") + assertTrue(File(myRepo.repositoryFiles.refsHeadsFile, "master.lock").createNewFile()) + + myRepo.update() + assertSameElements(listOf("master"), myRepo.branches.localBranches.map { it.name }) + } + private fun moveToDetachedHead(): String { makeCommit("file.txt") makeCommit("file.txt")