Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package net.ntworld.mergeRequestIntegrationIde.infrastructure.service

import com.intellij.openapi.vcs.changes.Change
import net.ntworld.mergeRequest.MergeRequestInfo
import net.ntworld.mergeRequest.ProviderData
import javax.swing.Icon

interface RepositoryFileService {

fun findChanges(providerData: ProviderData, hashes: List<String>): List<Change>
fun findChanges(providerData: ProviderData, mergeRequestInfo: MergeRequestInfo, hashes: List<String>): List<Change>

fun findIcon(providerData: ProviderData, path: String) : Icon

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package net.ntworld.mergeRequestIntegrationIde.infrastructure.service.repository

import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.vcs.changes.Change
import net.ntworld.mergeRequest.MergeRequestInfo
import net.ntworld.mergeRequest.ProviderData
import net.ntworld.mergeRequest.api.Cache
import net.ntworld.mergeRequestIntegrationIde.infrastructure.service.RepositoryFileService
Expand All @@ -13,11 +14,11 @@ class CachedRepositoryFile(
) : RepositoryFileDecorator(service) {
private val myLogger = Logger.getInstance(this.javaClass)

override fun findChanges(providerData: ProviderData, hashes: List<String>): List<Change> {
override fun findChanges(providerData: ProviderData, mergeRequestInfo: MergeRequestInfo, hashes: List<String>): List<Change> {
val key = "${providerData.id}:${hashes.joinToString(",")}"
return cache.getOrRun(key) {
myLogger.info("Cache $key not found")
val result = super.findChanges(providerData, hashes)
val result = super.findChanges(providerData, mergeRequestInfo, hashes)

cache.set(key, result, FIND_CHANGES_TTL)
result
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,13 @@ import com.intellij.psi.PsiFile
import com.intellij.psi.PsiManager
import com.intellij.vcs.log.impl.VcsLogContentUtil
import com.intellij.vcs.log.util.VcsLogUtil
import git4idea.changes.GitChangeUtils
import net.ntworld.mergeRequest.MergeRequest
import net.ntworld.mergeRequest.MergeRequestInfo
import net.ntworld.mergeRequest.ProviderData
import net.ntworld.mergeRequestIntegrationIde.infrastructure.ProjectServiceProvider
import net.ntworld.mergeRequestIntegrationIde.infrastructure.service.RepositoryFileService
import net.ntworld.mergeRequestIntegrationIde.ui.service.DisplayChangesService
import net.ntworld.mergeRequestIntegrationIde.util.RepositoryUtil
import javax.swing.Icon

Expand All @@ -21,7 +25,7 @@ class LocalRepositoryFileService(
) : RepositoryFileService {
private val myLogger = Logger.getInstance(this.javaClass)

override fun findChanges(providerData: ProviderData, hashes: List<String>): List<Change> {
override fun findChanges(providerData: ProviderData, mergeRequestInfo: MergeRequestInfo, hashes: List<String>): List<Change> {
try {
val repository = RepositoryUtil.findRepository(projectServiceProvider, providerData)
if (null === repository) {
Expand All @@ -32,12 +36,17 @@ class LocalRepositoryFileService(
return listOf()
}

val details = VcsLogUtil.getDetails(
log.dataManager.getLogProvider(repository.root),
repository.root,
hashes
)
return VcsLogUtil.collectChanges(details) { it.changes }
if (mergeRequestInfo !is MergeRequest) {
return listOf();
}

val changes = GitChangeUtils.getDiff(repository, mergeRequestInfo.targetBranch, mergeRequestInfo.sourceBranch, true);

if (changes == null) {
return listOf();
}

return changes.toList();
} catch (exception: Exception) {
myLogger.info("Cannot findChanges for ${providerData.repository}, hashes: ${hashes.joinToString(",")}")
throw exception
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package net.ntworld.mergeRequestIntegrationIde.infrastructure.service.repositoryFile

import com.intellij.openapi.vcs.changes.Change
import net.ntworld.mergeRequest.MergeRequestInfo
import net.ntworld.mergeRequest.ProviderData
import net.ntworld.mergeRequestIntegrationIde.infrastructure.service.RepositoryFileService
import javax.swing.Icon
Expand All @@ -9,8 +10,8 @@ open class RepositoryFileDecorator(
private val service: RepositoryFileService
) : RepositoryFileService {

override fun findChanges(providerData: ProviderData, hashes: List<String>): List<Change> {
return service.findChanges(providerData, hashes)
override fun findChanges(providerData: ProviderData, mergeRequestInfo: MergeRequestInfo, hashes: List<String>): List<Change> {
return service.findChanges(providerData, mergeRequestInfo, hashes)
}

override fun findIcon(providerData: ProviderData, path: String): Icon {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@ class ReworkWatcherImpl(

override val interval: Long = 10000
private val myGetCommitsTaskListener = object : GetCommitsTask.Listener {
override fun dataReceived(mergeRequestInfo: MergeRequestInfo, commits: List<Commit>) {
override fun dataReceived(mergeRequest: MergeRequest, commits: List<Commit>) {
this@ReworkWatcherImpl.commits = commits
changes = projectServiceProvider.repositoryFile.findChanges(providerData, commits.map { it.id })
changes = projectServiceProvider.repositoryFile.findChanges(providerData, mergeRequest, commits.map { it.id })
buildChangesMap()
myIsChangesBuilt = true
ApplicationManager.getApplication().invokeLater {
Expand Down Expand Up @@ -100,6 +100,8 @@ class ReworkWatcherImpl(
private val myFindMergeRequestTaskListener = object : FindMergeRequestTask.Listener {
override fun dataReceived(mergeRequest: MergeRequest) {
myMergeRequest = mergeRequest

fetchCommits(mergeRequest)
}
}

Expand All @@ -110,7 +112,6 @@ class ReworkWatcherImpl(
init {
myConnection.subscribe(ReworkWatcherNotifier.TOPIC, this)
projectServiceProvider.singleMRToolWindowNotifierTopic.registerReworkWatcher(this)
fetchCommits()
fetchMergeRequest()
}

Expand Down Expand Up @@ -470,12 +471,12 @@ class ReworkWatcherImpl(
reviewContext.comments = comments
}

private fun fetchCommits() {
private fun fetchCommits(mergeRequest: MergeRequest) {
debug("${providerData.id}:$branchName: fetching commits")
val task = GetCommitsTask(
projectServiceProvider = projectServiceProvider,
providerData = providerData,
mergeRequestInfo = mergeRequestInfo,
mergeRequest = mergeRequest,
listener = myGetCommitsTaskListener
)
task.start()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,18 @@ import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.progress.Task
import com.intellij.openapi.progress.impl.BackgroundableProcessIndicator
import net.ntworld.mergeRequest.Commit
import net.ntworld.mergeRequest.MergeRequestInfo
import net.ntworld.mergeRequest.MergeRequest
import net.ntworld.mergeRequest.ProviderData
import net.ntworld.mergeRequest.query.GetCommitsQuery
import net.ntworld.mergeRequestIntegration.make
import net.ntworld.mergeRequestIntegration.provider.gitlab.request.GitlabFindMRRequest
import net.ntworld.mergeRequestIntegration.provider.gitlab.transformer.GitlabMRTransformer
import net.ntworld.mergeRequestIntegrationIde.infrastructure.ProjectServiceProvider

class GetCommitsTask(
private val projectServiceProvider: ProjectServiceProvider,
private val providerData: ProviderData,
private val mergeRequestInfo: MergeRequestInfo,
private val mergeRequest: MergeRequest,
private val listener: Listener
) : Task.Backgroundable(projectServiceProvider.project, "Fetching commit data...", false) {
fun start() {
Expand All @@ -31,11 +33,11 @@ class GetCommitsTask(
listener.taskStarted()
val result = projectServiceProvider.infrastructure.queryBus() process GetCommitsQuery.make(
providerId = providerData.id,
mergeRequestId = mergeRequestInfo.id
mergeRequestId = mergeRequest.id
)
listener.dataReceived(mergeRequestInfo, result.commits)
listener.dataReceived(mergeRequest, result.commits)
projectServiceProvider.reviewContextManager.updateCommits(
providerData.id, mergeRequestInfo.id, result.commits
providerData.id, mergeRequest.id, result.commits
)
listener.taskEnded()
} catch (exception: Exception) {
Expand All @@ -50,7 +52,7 @@ class GetCommitsTask(

fun taskStarted() {}

fun dataReceived(mergeRequestInfo: MergeRequestInfo, commits: List<Commit>)
fun dataReceived(mergeRequest: MergeRequest, commits: List<Commit>)

fun taskEnded() {}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ class MergeRequestDetails(
ApplicationManager.getApplication().invokeLater {
setMergeRequest(mergeRequest)
}

GetCommitsTask(projectServiceProvider, providerData, mergeRequest, myGetCommitsListener).start()
}
}
private val myGetPipelinesListener = object : GetPipelinesTask.Listener {
Expand All @@ -102,12 +104,12 @@ class MergeRequestDetails(
myCommitsTab.clear()
}

override fun dataReceived(mergeRequestInfo: MergeRequestInfo, commits: List<Commit>) {
override fun dataReceived(mergeRequest: MergeRequest, commits: List<Commit>) {
ApplicationManager.getApplication().invokeLater {
myToolbars.forEach {
it.setCommits(mergeRequestInfo, commits)
it.setCommits(mergeRequest, commits)
}
myCommitsTab.setCommits(providerData, mergeRequestInfo, commits)
myCommitsTab.setCommits(providerData, mergeRequest, commits)
if (commits.isEmpty()) {
myCommitsTabInfo.text = "Commits"
} else {
Expand Down Expand Up @@ -190,7 +192,6 @@ class MergeRequestDetails(
}
FindMergeRequestTask(projectServiceProvider, providerData, mergeRequestInfo, myFindMRListener).start()
GetPipelinesTask(projectServiceProvider, providerData, mergeRequestInfo, myGetPipelinesListener).start()
GetCommitsTask(projectServiceProvider, providerData, mergeRequestInfo, myGetCommitsListener).start()
if (providerData.hasApprovalFeature) {
FindApprovalTask(projectServiceProvider, providerData, mergeRequestInfo, myFindApprovalListener).start()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class CommitChanges(private val projectServiceProvider: ProjectServiceProvider)
myMergeRequestInfo = mergeRequestInfo
thread {
myTree.isVisible = false
val changes = projectServiceProvider.repositoryFile.findChanges(providerData, commits.map { it.id })
val changes = projectServiceProvider.repositoryFile.findChanges(providerData, mergeRequestInfo, commits.map { it.id })
projectServiceProvider.reviewContextManager.updateChanges(providerData.id, mergeRequestInfo.id, changes)
projectServiceProvider.reviewContextManager.updateReviewingChanges(providerData.id, mergeRequestInfo.id, changes)
ApplicationManager.getApplication().invokeLater {
Expand All @@ -95,7 +95,7 @@ class CommitChanges(private val projectServiceProvider: ProjectServiceProvider)
myMergeRequestInfo = mergeRequestInfo
thread {
myTree.isVisible = false
val partialChanges = projectServiceProvider.repositoryFile.findChanges(providerData, selectedCommits.map { it.id })
val partialChanges = projectServiceProvider.repositoryFile.findChanges(providerData, mergeRequestInfo, selectedCommits.map { it.id })
projectServiceProvider.reviewContextManager.updateReviewingChanges(
providerData.id, mergeRequestInfo.id, partialChanges
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.intellij.vcs.log.Hash
import com.intellij.vcs.log.impl.VcsLogContentUtil
import com.intellij.vcs.log.impl.VcsLogManager
import com.intellij.vcs.log.util.VcsLogUtil
import git4idea.changes.GitChangeUtils
import git4idea.repo.GitRepository
import net.ntworld.mergeRequest.Commit
import net.ntworld.mergeRequest.MergeRequest
Expand Down Expand Up @@ -112,27 +113,11 @@ object DisplayChangesService {
log: VcsLogManager,
commits: List<Commit>
) {
// TODO: Reduce repetition
val details = VcsLogUtil.getDetails(
log.dataManager.getLogProvider(repository.root),
repository.root,
commits.map { it.id }
)
if (details.isEmpty()) {
return
}

if (details.size == 1) {
return displayChanges(
applicationServiceProvider, ideaProject,
providerData, mergeRequest, details.first().changes.toList()
)
}
val changes = GitChangeUtils.getDiff(repository, mergeRequest.targetBranch, mergeRequest.sourceBranch, true);

val changes = VcsLogUtil.collectChanges(details) {
it.changes
if (changes != null) {
displayChanges(applicationServiceProvider, ideaProject, providerData, mergeRequest, changes.toList())
}
displayChanges(applicationServiceProvider, ideaProject, providerData, mergeRequest, changes)
}

private fun displayChanges(
Expand Down