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) {