diff --git a/plugins/settings-repository/src/IcsManager.kt b/plugins/settings-repository/src/IcsManager.kt index cc31c82f2327..684c7555e84f 100644 --- a/plugins/settings-repository/src/IcsManager.kt +++ b/plugins/settings-repository/src/IcsManager.kt @@ -262,7 +262,7 @@ class IcsApplicationLoadListener : ApplicationLoadListener { } val repositoryManager = icsManager.repositoryManager - if (repositoryManager.isRepositoryExists()) { + if (repositoryManager.isRepositoryExists() && repositoryManager is GitRepositoryManager) { repositoryManager.renameDirectory(linkedMapOf( Pair("\$ROOT_CONFIG$", null), Pair("_mac/\$ROOT_CONFIG$", "_mac"), diff --git a/plugins/settings-repository/src/RepositoryManager.kt b/plugins/settings-repository/src/RepositoryManager.kt index 37b094fa78aa..1f56f6a7255d 100644 --- a/plugins/settings-repository/src/RepositoryManager.kt +++ b/plugins/settings-repository/src/RepositoryManager.kt @@ -57,11 +57,6 @@ public interface RepositoryManager { public fun canCommit(): Boolean - /** - * Think twice before use - */ - public fun renameDirectory(pairs: Map) - public interface Updater { fun merge(): UpdateResult? diff --git a/plugins/settings-repository/src/git/CommitMessageFormatter.kt b/plugins/settings-repository/src/git/CommitMessageFormatter.kt new file mode 100644 index 000000000000..e3f6a0f6b1f7 --- /dev/null +++ b/plugins/settings-repository/src/git/CommitMessageFormatter.kt @@ -0,0 +1,47 @@ +package org.jetbrains.settingsRepository.git + +import com.intellij.openapi.application.ex.ApplicationInfoEx +import org.eclipse.jgit.lib.Ref +import org.eclipse.jgit.merge.MergeMessageFormatter +import java.net.InetAddress + +public interface CommitMessageFormatter { + public fun message(text: String): String = text + + public fun prependMessage(builder: StringBuilder = StringBuilder()): StringBuilder = builder + + public fun mergeMessage(refsToMerge: List, target: Ref): String = MergeMessageFormatter().format(refsToMerge, target) +} + +class IdeaCommitMessageFormatter : CommitMessageFormatter { + override fun message(text: String) = StringBuilder().appendCommitOwnerInfo().append(text).toString() + + override fun prependMessage(builder: StringBuilder) = builder.appendCommitOwnerInfo() + + override fun mergeMessage(refsToMerge: List, target: Ref) = StringBuilder().appendCommitOwnerInfo().append(super.mergeMessage(refsToMerge, target)).toString() + + fun StringBuilder.appendCommitOwnerInfo(): StringBuilder { + appendAppName() + append(' ').append('<').append(System.getProperty("user.name", "unknown-user")).append('@').append(InetAddress.getLocalHost().getHostName()) + append(' ') + return this + } + + fun StringBuilder.appendAppName() { + val appInfo = ApplicationInfoEx.getInstanceEx() + if (appInfo != null) { + val build = appInfo.getBuild() + append(build.getProductCode()).append('-') + if (appInfo.getMajorVersion() != null && !appInfo.isEAP()) { + append(appInfo.getFullVersion()) + } + else { + var buildString = build.asStringWithoutProductCode() + if (build.getBuildNumber() == Integer.MAX_VALUE) { + buildString = buildString.replace(".SNAPSHOT", "") + } + append(buildString) + } + } + } +} \ No newline at end of file diff --git a/plugins/settings-repository/src/git/GitRepositoryManager.kt b/plugins/settings-repository/src/git/GitRepositoryManager.kt index cbe01da0ca96..7591ba1fa447 100644 --- a/plugins/settings-repository/src/git/GitRepositoryManager.kt +++ b/plugins/settings-repository/src/git/GitRepositoryManager.kt @@ -16,7 +16,6 @@ package org.jetbrains.settingsRepository.git import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.application.ex.ApplicationInfoEx import com.intellij.openapi.progress.EmptyProgressIndicator import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.util.NotNullLazyValue @@ -43,7 +42,6 @@ import org.jetbrains.settingsRepository.RepositoryManager.Updater import org.jetbrains.settingsRepository.RepositoryService import java.io.File import java.io.IOException -import java.net.InetAddress import kotlin.concurrent.write import kotlin.properties.Delegates @@ -195,7 +193,7 @@ class GitRepositoryManager(private val credentialsStore: NotNullLazyValue) { + fun renameDirectory(pairs: Map) { val addCommand = AddCommand(repository) val toDelete = SmartList() var added = false @@ -245,13 +243,7 @@ class GitRepositoryManager(private val credentialsStore: NotNullLazyValue(null, srcCommit), ImmutableUpdateResult(dirCacheCheckout.getUpdated().keySet(), dirCacheCheckout.getRemoved())) - //return MergeResult(srcCommit, srcCommit, array(null, srcCommit), MergeStatus.FAST_FORWARD, mergeStrategy, null) } val refLogMessage = StringBuilder("merge ") @@ -193,13 +192,9 @@ open class Pull(val manager: GitRepositoryManager, val indicator: ProgressIndica dirCacheCheckout = DirCacheCheckout(repository, headCommit.getTree(), repository.lockDirCache(), srcCommit.getTree()) dirCacheCheckout.setFailOnConflict(true) dirCacheCheckout.checkout() -// var msg: String? = null val newHead: ObjectId -// val base: ObjectId val mergeStatus: MergeStatus if (squash) { -// msg = JGitText.get().squashCommitNotUpdatingHEAD -// base = headId newHead = headId mergeStatus = MergeStatus.FAST_FORWARD_SQUASHED val squashedCommits = RevWalkUtils.find(revWalk, srcCommit, headCommit) @@ -207,17 +202,14 @@ open class Pull(val manager: GitRepositoryManager, val indicator: ProgressIndica } else { updateHead(refLogMessage, srcCommit, headId, repository) -// base = srcCommit newHead = srcCommit mergeStatus = MergeStatus.FAST_FORWARD } return MergeResultEx(newHead, mergeStatus, arrayOf(headCommit, srcCommit), ImmutableUpdateResult(dirCacheCheckout.getUpdated().keySet(), dirCacheCheckout.getRemoved())) - //return MergeResult(newHead, base, array(headCommit, srcCommit), mergeStatus, mergeStrategy, null, msg) } else { if (fastForwardMode == FastForwardMode.FF_ONLY) { return MergeResultEx(headCommit, MergeStatus.ABORTED, arrayOf(headCommit, srcCommit), EMPTY_UPDATE_RESULT) - // return MergeResult(headCommit, srcCommit, array(headCommit, srcCommit), MergeStatus.ABORTED, mergeStrategy, null) } val mergeMessage: String @@ -226,7 +218,7 @@ open class Pull(val manager: GitRepositoryManager, val indicator: ProgressIndica repository.writeSquashCommitMsg(SquashMessageFormatter().format(RevWalkUtils.find(revWalk, srcCommit, headCommit), head)) } else { - mergeMessage = MergeMessageFormatter().format(listOf(ref), head) + mergeMessage = commitMessageFormatter.mergeMessage(listOf(ref), head) repository.writeMergeCommitMsg(mergeMessage) repository.writeMergeHeads(arrayListOf(ref.getObjectId())) } @@ -247,19 +239,10 @@ open class Pull(val manager: GitRepositoryManager, val indicator: ProgressIndica noProblems = merger.merge(headCommit, srcCommit) } refLogMessage.append(": Merge made by ") - if (revWalk.isMergedInto(headCommit, srcCommit)) { - refLogMessage.append("recursive") - } - else { - refLogMessage.append(mergeStrategy.getName()) - } + refLogMessage.append(if (revWalk.isMergedInto(headCommit, srcCommit)) "recursive" else mergeStrategy.getName()) refLogMessage.append('.') - var result: ImmutableUpdateResult? = null - if (merger is ResolveMerger) { - result = ImmutableUpdateResult(merger.getToBeCheckedOut().keySet(), merger.getToBeDeleted()) - } - + var result = if (merger is ResolveMerger) ImmutableUpdateResult(merger.getToBeCheckedOut().keySet(), merger.getToBeDeleted()) else null if (noProblems) { // ResolveMerger does checkout if (merger !is ResolveMerger) { @@ -269,7 +252,6 @@ open class Pull(val manager: GitRepositoryManager, val indicator: ProgressIndica result = ImmutableUpdateResult(dirCacheCheckout.getUpdated().keySet(), dirCacheCheckout.getRemoved()) } -// var msg: String? = null var newHeadId: ObjectId? = null var mergeStatus: MergeResult.MergeStatus? = null if (!commit && squash) { @@ -283,26 +265,19 @@ open class Pull(val manager: GitRepositoryManager, val indicator: ProgressIndica mergeStatus = MergeResult.MergeStatus.MERGED } if (commit && squash) { -// msg = JGitText.get().squashCommitNotUpdatingHEAD newHeadId = headCommit.getId() mergeStatus = MergeResult.MergeStatus.MERGED_SQUASHED } return MergeResultEx(newHeadId, mergeStatus!!, arrayOf(headCommit.getId(), srcCommit.getId()), result!!) - // return MergeResult(newHeadId, null, array(headCommit.getId(), srcCommit.getId()), mergeStatus, mergeStrategy, null, msg) + } + else if (failingPaths == null) { + repository.writeMergeCommitMsg(MergeMessageFormatter().formatWithConflicts(mergeMessage, unmergedPaths)) + return MergeResultEx(null, MergeResult.MergeStatus.CONFLICTING, arrayOf(headCommit.getId(), srcCommit.getId()), result!!, lowLevelResults) } else { - if (failingPaths == null) { - val mergeMessageWithConflicts = MergeMessageFormatter().formatWithConflicts(mergeMessage, unmergedPaths) - repository.writeMergeCommitMsg(mergeMessageWithConflicts) - return MergeResultEx(null, MergeResult.MergeStatus.CONFLICTING, arrayOf(headCommit.getId(), srcCommit.getId()), result!!, lowLevelResults) - //return MergeResult(null, merger.getBaseCommitId(), array(headCommit.getId(), srcCommit.getId()), MergeResult.MergeStatus.CONFLICTING, mergeStrategy, lowLevelResults) - } - else { - repository.writeMergeCommitMsg(null) - repository.writeMergeHeads(null) - return MergeResultEx(null, MergeResult.MergeStatus.FAILED, arrayOf(headCommit.getId(), srcCommit.getId()), result!!, lowLevelResults) - //return MergeResult(null, merger.getBaseCommitId(), array(headCommit.getId(), srcCommit.getId()), MergeResult.MergeStatus.FAILED, mergeStrategy, lowLevelResults, failingPaths, null) - } + repository.writeMergeCommitMsg(null) + repository.writeMergeHeads(null) + return MergeResultEx(null, MergeResult.MergeStatus.FAILED, arrayOf(headCommit.getId(), srcCommit.getId()), result!!, lowLevelResults) } } } diff --git a/plugins/settings-repository/src/git/reset.kt b/plugins/settings-repository/src/git/reset.kt index ea03cca6346b..2489619dba10 100644 --- a/plugins/settings-repository/src/git/reset.kt +++ b/plugins/settings-repository/src/git/reset.kt @@ -18,7 +18,7 @@ class Reset(manager: GitRepositoryManager, indicator: ProgressIndicator) : Pull( indicator.checkCanceled() - val commitMessage = "Reset to ${if (toTheirs) manager.getUpstream() else "my"}" + val commitMessage = commitMessageFormatter.message(if (toTheirs) "Overwrite local to ${manager.getUpstream()}" else "Overwrite remote ${manager.getUpstream()} to local") // grab added/deleted/renamed/modified files val mergeStrategy = if (toTheirs) MergeStrategy.THEIRS else MergeStrategy.OURS val firstMergeResult = pull(mergeStrategy, commitMessage)