commit 8128d7171e1abbe938af4d31a39eda58a14b2b02 from: ale date: Fri Jul 24 08:33:32 2026 UTC Improve VCS compatibility: refactor content handling, optimize push operations, and implement distributed commit features. commit - 0136c7f3483e8e3c7bd5dcc9f78978b00e7e192b commit + 8128d7171e1abbe938af4d31a39eda58a14b2b02 blob - 358dae35996c95b4d204e975b6f21afe773eb24b blob + 1b85568799abb3fcbf7961aefcb27025bd1c4fc0 --- src/main/kotlin/dev/nezzontli/gotvcs/GotVcs.kt +++ src/main/kotlin/dev/nezzontli/gotvcs/GotVcs.kt @@ -4,12 +4,15 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.vcs.AbstractVcs import com.intellij.openapi.vcs.VcsKey import com.intellij.openapi.vcs.changes.ChangeProvider +import com.intellij.openapi.vcs.changes.CommitExecutor import com.intellij.openapi.vcs.checkin.CheckinEnvironment import com.intellij.openapi.vcs.diff.DiffProvider import com.intellij.openapi.vcs.history.VcsHistoryProvider import com.intellij.openapi.vcs.rollback.RollbackEnvironment import com.intellij.openapi.vcs.update.UpdateEnvironment +import com.intellij.openapi.vcs.VcsType import dev.nezzontli.gotvcs.checkin.GotCheckinEnvironment +import dev.nezzontli.gotvcs.checkin.GotCommitAndSendExecutor import dev.nezzontli.gotvcs.checkin.GotRollbackEnvironment import dev.nezzontli.gotvcs.changes.GotChangeProvider import dev.nezzontli.gotvcs.changes.GotDiffProvider @@ -26,9 +29,18 @@ class GotVcs(project: Project) : AbstractVcs(project, private val rollbackEnvironment = GotRollbackEnvironment(project, commandLine) private val historyProvider = GotVcsHistoryProvider(project, commandLine) private val updateEnvironment = GotUpdateEnvironment(commandLine) + private val commitAndSendExecutor = GotCommitAndSendExecutor(project, checkinEnvironment) override fun getDisplayName(): String = NAME + // got is a distributed VCS (local commits, explicit `got send`), same + // shape as Git. The platform only enables its non-modal Commit tool + // window when every active VCS reports VcsType.distributed here -- + // AbstractVcs.getType() defaults to centralized, which silently forces + // the old modal commit dialog and greys out the Commit tool window + // entirely (verified via CommitModeManager.canSetNonModal() bytecode). + override fun getType(): VcsType = VcsType.distributed + override fun getChangeProvider(): ChangeProvider = changeProvider override fun getDiffProvider(): DiffProvider = diffProvider @@ -41,6 +53,8 @@ class GotVcs(project: Project) : AbstractVcs(project, override fun getUpdateEnvironment(): UpdateEnvironment = updateEnvironment + override fun getCommitExecutors(): List = listOf(commitAndSendExecutor) + companion object { const val NAME = "got" blob - c414081a7f02630f421091f93a84a3deec66fc6e blob + 12aeb4cf7ba167f98d6b05be62bad269d4bca3c7 --- src/main/kotlin/dev/nezzontli/gotvcs/history/GotFileRevision.kt +++ src/main/kotlin/dev/nezzontli/gotvcs/history/GotFileRevision.kt @@ -40,8 +40,11 @@ class GotFileRevision( override fun getChangedRepositoryPath(): RepositoryLocation? = null @Throws(VcsException::class) - override fun loadContent(): ByteArray = getContent() + override fun loadContent(): ByteArray = commandLine.catAt(workDir, entry.commitId, relativePath).toByteArray() + // VcsFileContent.getContent() has no default body despite being deprecated + // in favor of loadContent() -- it must still be implemented. + @Suppress("OVERRIDE_DEPRECATION") @Throws(VcsException::class) - override fun getContent(): ByteArray = commandLine.catAt(workDir, entry.commitId, relativePath).toByteArray() + override fun getContent(): ByteArray = loadContent() } blob - fe82f9165a7f72564bdb819e25bdbbf0b46072d4 blob + 6f772d20ab23f52059f60a2893b079859d96c2db --- src/main/kotlin/dev/nezzontli/gotvcs/push/GotOutgoingCommitsProvider.kt +++ src/main/kotlin/dev/nezzontli/gotvcs/push/GotOutgoingCommitsProvider.kt @@ -7,6 +7,7 @@ import com.intellij.dvcs.push.VcsError import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.vcs.VcsException import dev.nezzontli.gotvcs.cli.GotCommandLineWrapper +import dev.nezzontli.gotvcs.log.GotFullCommitDetails import dev.nezzontli.gotvcs.repo.GotRepository import java.io.File @@ -28,16 +29,12 @@ class GotOutgoingCommitsProvider(private val commandLi ): OutgoingResult { val workDir = File(repository.root.path) val target = pushSpec.target - logger.warn("got outgoing commits: workDir=$workDir remote=${target.remoteName} branch=${target.branch}") return try { val remoteHash = commandLine.remoteBranchHash(workDir, target.remoteName, target.branch) - logger.warn("got outgoing commits: remoteHash=$remoteHash") val ids = commandLine.outgoingCommitIds(workDir, remoteHash) - logger.warn("got outgoing commits: ids=$ids") val commits = ids.map { id -> GotFullCommitDetails(commandLine.catCommit(workDir, id), repository.root) } OutgoingResult(commits, emptyList()) } catch (e: VcsException) { - logger.warn("got outgoing commits failed", e) OutgoingResult(emptyList(), listOf(VcsError(e.message))) } catch (e: Exception) { logger.error("got outgoing commits failed unexpectedly", e) blob - b974d16779def762c4a4d1815d1e6b8aae07b979 blob + 3c7dcf56b45ee99c4ea9fc2f8f27e69ca5c8a491 --- src/main/kotlin/dev/nezzontli/gotvcs/push/GotPusher.kt +++ src/main/kotlin/dev/nezzontli/gotvcs/push/GotPusher.kt @@ -14,7 +14,7 @@ class GotPusher(private val commandLine: GotCommandLin Pusher() { override fun push( - pushSpecs: MutableMap>, + pushSpecs: Map>, forcePushOptionValue: VcsPushOptionValue?, force: Boolean, ) { blob - 10b7ba43876f4f2897f39aa65ff5c2488054c3e1 blob + f5080061a1987c081204acc125599fc285fc261a --- src/main/resources/META-INF/plugin.xml +++ src/main/resources/META-INF/plugin.xml @@ -32,5 +32,13 @@ implementation="dev.nezzontli.gotvcs.repo.GotBranchWidget$Factory" order="after CodeStyleStatusBarWidget"/> + + + + + + +