diff --git a/plugins/settings-sync/src/com/intellij/settingsSync/GitSettingsLog.kt b/plugins/settings-sync/src/com/intellij/settingsSync/GitSettingsLog.kt index f13103108347..d98e7a0ac8c7 100644 --- a/plugins/settings-sync/src/com/intellij/settingsSync/GitSettingsLog.kt +++ b/plugins/settings-sync/src/com/intellij/settingsSync/GitSettingsLog.kt @@ -318,6 +318,8 @@ class GitSettingsLog(private val settingsSyncStorage: Path, override fun collectCurrentSnapshot(): SettingsSnapshot { // todo check repository consistency, e.g. there should be no uncommitted changes git.checkout().setName(MASTER_REF_NAME).setForced(true).call() + git.reset().setMode(ResetCommand.ResetType.HARD).call() + git.clean().setForce(true).setCleanDirectories(true).call() val lastModifiedDate = getDate(getBranchTip(master)) diff --git a/plugins/settings-sync/tests/com/intellij/settingsSync/GitSettingsLogTest.kt b/plugins/settings-sync/tests/com/intellij/settingsSync/GitSettingsLogTest.kt index 22bd8529a308..604f1c324362 100644 --- a/plugins/settings-sync/tests/com/intellij/settingsSync/GitSettingsLogTest.kt +++ b/plugins/settings-sync/tests/com/intellij/settingsSync/GitSettingsLogTest.kt @@ -10,6 +10,7 @@ import com.intellij.testFramework.TemporaryDirectory import com.intellij.ui.JBAccountInfoService import com.intellij.util.io.createParentDirectories import com.intellij.util.io.write +import org.eclipse.jgit.api.Git import org.eclipse.jgit.dircache.DirCache import org.eclipse.jgit.lib.Config import org.eclipse.jgit.lib.Repository @@ -604,6 +605,44 @@ internal class GitSettingsLogTest { } } + @Test + @TestFor(issues = ["IJPL-13061"]) + fun `drop for unfinished modifications`() { + val editorXml = (configDir / "options" / "editor.xml").write("Editor Initial") + val lafXml = (configDir / "options" / "laf.xml").write("LaF Initial") + val generalXml = (configDir / "options" / "ide.general.xml").write("General Initial") + + val settingsLog = initializeGitSettingsLog(lafXml, editorXml) + + + settingsLog.applyCloudState( + settingsSnapshot { + fileState("options/editor.xml", "Editor Cloud") + fileState("options/ide.general.xml", "General Cloud") + }, "Remote changes" + ) + settingsLog.advanceMaster() + + settingsLog.applyIdeState( + settingsSnapshot { + fileState("options/editor.xml", "Editor Ide") + fileState("options/ide.general.xml", "General Ide") + }, "Local changes" + ) + + generalXml.write("General Cloud") + (configDir / "settingsSync" / "options" / "ide.general.xml").write("General New") + val repository = FileRepositoryBuilder() + .setGitDir((configDir / "settingsSync"/ ".git").toFile()) + .setAutonomous(true).readEnvironment().build() + val git = Git(repository) + val addCommand = git.add() + addCommand.addFilepattern("options/ide.general.xml") + addCommand.call() + + initializeGitSettingsLog(lafXml, editorXml, generalXml) + } + private fun checkUsernameEmail(expectedName: String, expectedEmail: String) { arrayOf>() val editorXml = (configDir / "options" / "editor.xml").createParentDirectories().createFile()