in plugin-bazel/src/main/kotlin/org/jetbrains/bazel/sync/task/ProjectSyncTask.kt [55:114]
suspend fun sync(syncScope: ProjectSyncScope, buildProject: Boolean) {
if (project.isTrusted()) {
bspTracer.spanBuilder("bsp.sync.project.ms").setAttribute("project.name", project.name).useWithScope {
var syncAlreadyInProgress = false
try {
log.debug("Starting sync project task")
project.syncConsole.startTask(
taskId = PROJECT_SYNC_TASK_ID,
title = BazelPluginBundle.message("console.task.sync.title"),
message = BazelPluginBundle.message("console.task.sync.in.progress"),
cancelAction = {
SyncStatusService.getInstance(project).cancel()
coroutineContext.cancel()
},
redoAction = { sync(syncScope, buildProject) },
)
preSync()
doSync(syncScope, buildProject)
project.syncConsole.finishTask(PROJECT_SYNC_TASK_ID, BazelPluginBundle.message("console.task.sync.success"))
} catch (e: CancellationException) {
project.syncConsole.finishTask(
PROJECT_SYNC_TASK_ID,
BazelPluginBundle.message("console.task.sync.cancelled"),
SkippedResultImpl(),
)
throw e
} catch (_: SyncAlreadyInProgressException) {
syncAlreadyInProgress = true
} catch (_: SyncPartialFailureException) {
project.syncConsole.addWarnMessage(
PROJECT_SYNC_TASK_ID,
BazelPluginBundle.message("console.task.sync.partialsuccess"),
)
project.syncConsole.finishTask(
PROJECT_SYNC_TASK_ID,
BazelPluginBundle.message("console.task.sync.partialsuccess"),
SuccessResultImpl(true),
)
} catch (_: SyncFatalFailureException) {
project.syncConsole.finishTask(
PROJECT_SYNC_TASK_ID,
BazelPluginBundle.message("console.task.sync.fatalfailure"),
FailureResultImpl(),
)
} catch (e: Exception) {
project.syncConsole.finishTask(
PROJECT_SYNC_TASK_ID,
BazelPluginBundle.message("console.task.sync.failed"),
FailureResultImpl(e),
)
} finally {
if (!syncAlreadyInProgress) {
postSync()
}
}
}
}
}