mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-131688 Settings repository plugin: more descriptive commit message
This commit is contained in:
@@ -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"),
|
||||
|
||||
@@ -57,11 +57,6 @@ public interface RepositoryManager {
|
||||
|
||||
public fun canCommit(): Boolean
|
||||
|
||||
/**
|
||||
* Think twice before use
|
||||
*/
|
||||
public fun renameDirectory(pairs: Map<String, String?>)
|
||||
|
||||
public interface Updater {
|
||||
fun merge(): UpdateResult?
|
||||
|
||||
|
||||
@@ -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<Ref>, 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<Ref>, 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<Creden
|
||||
|
||||
override fun canCommit() = repository.getRepositoryState().canCommit()
|
||||
|
||||
override fun renameDirectory(pairs: Map<String, String?>) {
|
||||
fun renameDirectory(pairs: Map<String, String?>) {
|
||||
val addCommand = AddCommand(repository)
|
||||
val toDelete = SmartList<DeleteDirectory>()
|
||||
var added = false
|
||||
@@ -245,13 +243,7 @@ class GitRepositoryManager(private val credentialsStore: NotNullLazyValue<Creden
|
||||
return
|
||||
}
|
||||
|
||||
val builder = StringBuilder()
|
||||
builder.append(ApplicationInfoEx.getInstanceEx()!!.getFullApplicationName())
|
||||
builder.append(' ').append('<').append(System.getProperty("user.name", "unknown-user")).append('@').append(InetAddress.getLocalHost().getHostName())
|
||||
builder.append(' ')
|
||||
|
||||
builder.append("Get rid of \$ROOT_CONFIG$")
|
||||
repository.commit(builder.toString())
|
||||
repository.commit(IdeaCommitMessageFormatter().prependMessage().append("Get rid of \$ROOT_CONFIG$").toString())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.jetbrains.settingsRepository.git
|
||||
|
||||
import com.intellij.openapi.application.ex.ApplicationInfoEx
|
||||
import com.intellij.openapi.progress.ProgressIndicator
|
||||
import com.intellij.util.PathUtilRt
|
||||
import com.intellij.util.SmartList
|
||||
@@ -11,9 +10,8 @@ import org.jetbrains.jgit.dirCache.PathEdit
|
||||
import org.jetbrains.jgit.dirCache.edit
|
||||
import org.jetbrains.settingsRepository.LOG
|
||||
import org.jetbrains.settingsRepository.PROJECTS_DIR_NAME
|
||||
import java.net.InetAddress
|
||||
|
||||
fun commit(manager: GitRepositoryManager, indicator: ProgressIndicator?): Boolean {
|
||||
fun commit(manager: GitRepositoryManager, indicator: ProgressIndicator?, commitMessageFormatter: CommitMessageFormatter = IdeaCommitMessageFormatter()): Boolean {
|
||||
indicator?.checkCanceled()
|
||||
|
||||
val diff = manager.repository.computeIndexDiff()
|
||||
@@ -47,9 +45,7 @@ fun commit(manager: GitRepositoryManager, indicator: ProgressIndicator?): Boolea
|
||||
indicator?.checkCanceled()
|
||||
|
||||
val builder = StringBuilder()
|
||||
builder.append(ApplicationInfoEx.getInstanceEx()!!.getFullApplicationName())
|
||||
builder.append(' ' ).append('<').append(System.getProperty("user.name", "unknown-user")).append('@').append(InetAddress.getLocalHost().getHostName())
|
||||
builder.append(' ')
|
||||
commitMessageFormatter.prependMessage(builder)
|
||||
|
||||
// we use Github (edit via web UI) terms here
|
||||
builder.appendCompactList("Update", diff.getChanged())
|
||||
|
||||
@@ -25,7 +25,7 @@ import java.io.IOException
|
||||
import java.text.MessageFormat
|
||||
import java.util.ArrayList
|
||||
|
||||
open class Pull(val manager: GitRepositoryManager, val indicator: ProgressIndicator) {
|
||||
open class Pull(val manager: GitRepositoryManager, val indicator: ProgressIndicator, val commitMessageFormatter: CommitMessageFormatter = IdeaCommitMessageFormatter()) {
|
||||
val repository = manager.repository
|
||||
|
||||
// we must use the same StoredConfig instance during the operation
|
||||
@@ -176,7 +176,6 @@ open class Pull(val manager: GitRepositoryManager, val indicator: ProgressIndica
|
||||
throw NoHeadException(JGitText.get().commitOnRepoWithoutHEADCurrentlyNotSupported)
|
||||
}
|
||||
return MergeResultEx(srcCommit, MergeStatus.FAST_FORWARD, arrayOf<ObjectId?>(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<ObjectId?>(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<ObjectId?>(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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user