diff --git a/plugins/settings-repository/src/BaseRepositoryManager.kt b/plugins/settings-repository/src/BaseRepositoryManager.kt
index c1549164563e..02cdabfbaf45 100644
--- a/plugins/settings-repository/src/BaseRepositoryManager.kt
+++ b/plugins/settings-repository/src/BaseRepositoryManager.kt
@@ -103,7 +103,7 @@ public abstract class BaseRepositoryManager(protected val dir: File) : Repositor
return null
}
- override fun write(path: String, content: ByteArray, size: Int) {
+ override fun write(path: String, content: ByteArray, size: Int): Boolean {
if (LOG.isDebugEnabled()) {
LOG.debug("Write $path")
}
@@ -118,7 +118,9 @@ public abstract class BaseRepositoryManager(protected val dir: File) : Repositor
}
catch (e: Exception) {
LOG.error(e)
+ return false
}
+ return true
}
/**
diff --git a/plugins/settings-repository/src/IcsManager.kt b/plugins/settings-repository/src/IcsManager.kt
index 2ba5dabde263..7b5ee7467391 100644
--- a/plugins/settings-repository/src/IcsManager.kt
+++ b/plugins/settings-repository/src/IcsManager.kt
@@ -215,16 +215,12 @@ class IcsManager(dir: File) {
throw IllegalStateException("Save is prohibited now")
}
- doSave(fileSpec, content, size, roamingType)
-
- if (isAutoCommit(fileSpec, roamingType)) {
+ if (doSave(fileSpec, content, size, roamingType) && isAutoCommit(fileSpec, roamingType)) {
scheduleCommit()
}
}
- fun doSave(fileSpec: String, content: ByteArray, size: Int, roamingType: RoamingType) {
- repositoryManager.write(buildPath(fileSpec, roamingType, projectId), content, size)
- }
+ fun doSave(fileSpec: String, content: ByteArray, size: Int, roamingType: RoamingType) = repositoryManager.write(buildPath(fileSpec, roamingType, projectId), content, size)
protected open fun isAutoCommit(fileSpec: String, roamingType: RoamingType): Boolean = true
diff --git a/plugins/settings-repository/src/RepositoryManager.kt b/plugins/settings-repository/src/RepositoryManager.kt
index bb4ea185b46b..6fa3f4410f10 100644
--- a/plugins/settings-repository/src/RepositoryManager.kt
+++ b/plugins/settings-repository/src/RepositoryManager.kt
@@ -41,7 +41,10 @@ public interface RepositoryManager {
public fun read(path: String): InputStream?
- public fun write(path: String, content: ByteArray, size: Int)
+ /**
+ * Returns false if file is not written (for example, due to ignore rules).
+ */
+ public fun write(path: String, content: ByteArray, size: Int): Boolean
public fun delete(path: String)
diff --git a/plugins/settings-repository/src/git/GitRepositoryManager.kt b/plugins/settings-repository/src/git/GitRepositoryManager.kt
index d1463bdb7b71..7606baf63ee4 100644
--- a/plugins/settings-repository/src/git/GitRepositoryManager.kt
+++ b/plugins/settings-repository/src/git/GitRepositoryManager.kt
@@ -26,6 +26,7 @@ import com.intellij.util.SmartList
import org.eclipse.jgit.api.AddCommand
import org.eclipse.jgit.api.errors.UnmergedPathsException
import org.eclipse.jgit.errors.TransportException
+import org.eclipse.jgit.ignore.IgnoreNode
import org.eclipse.jgit.lib.ConfigConstants
import org.eclipse.jgit.lib.Constants
import org.eclipse.jgit.lib.Repository
@@ -62,6 +63,8 @@ class GitRepositoryManager(private val credentialsStore: NotNullLazyValue")
+ provider.write("i/am/a/long/path/to/file/foo.html", "")
+
+ val diff = repository.computeIndexDiff()
+ assertThat(diff.diff()).isFalse()
+ assertThat(diff.getAdded()).isEmpty()
+ assertThat(diff.getChanged()).isEmpty()
+ assertThat(diff.getRemoved()).isEmpty()
+ assertThat(diff.getModified()).isEmpty()
+ assertThat(diff.getUntracked()).isEmpty()
+ assertThat(diff.getUntrackedFolders()).isEmpty()
+ }
+
private fun createRemoteRepository(branchName: String? = null, initialCommit: Boolean = true) {
val repository = tempDirManager.createRepository("upstream")
if (initialCommit) {