diff --git a/cli/src/main/kotlin/com/mitteloupe/cag/cli/Main.kt b/cli/src/main/kotlin/com/mitteloupe/cag/cli/Main.kt index c3403b0..b7ff430 100644 --- a/cli/src/main/kotlin/com/mitteloupe/cag/cli/Main.kt +++ b/cli/src/main/kotlin/com/mitteloupe/cag/cli/Main.kt @@ -35,7 +35,6 @@ import com.mitteloupe.cag.core.request.GenerateUseCaseRequest import com.mitteloupe.cag.core.request.GenerateViewModelRequest import java.io.File import java.nio.file.Paths -import java.util.UUID import kotlin.system.exitProcess fun main(arguments: Array) { @@ -93,7 +92,6 @@ fun main(arguments: Array) { } val projectTemplateRequest = GenerateProjectTemplateRequest( - requestId = UUID.randomUUID().toString(), destinationRootDirectory = projectTemplateDestinationDirectory, projectName = request.projectName, packageName = request.packageName, diff --git a/core/src/main/kotlin/com/mitteloupe/cag/core/request/GenerateProjectTemplateRequest.kt b/core/src/main/kotlin/com/mitteloupe/cag/core/request/GenerateProjectTemplateRequest.kt index efcb8c5..8a7094e 100644 --- a/core/src/main/kotlin/com/mitteloupe/cag/core/request/GenerateProjectTemplateRequest.kt +++ b/core/src/main/kotlin/com/mitteloupe/cag/core/request/GenerateProjectTemplateRequest.kt @@ -3,7 +3,6 @@ package com.mitteloupe.cag.core.request import java.io.File data class GenerateProjectTemplateRequest( - val requestId: String, val destinationRootDirectory: File, val projectName: String, val packageName: String, diff --git a/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/GitAddQueueService.kt b/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/GitAddQueueService.kt index 8427969..3d04256 100644 --- a/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/GitAddQueueService.kt +++ b/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/GitAddQueueService.kt @@ -8,7 +8,7 @@ import java.util.concurrent.ConcurrentSkipListSet @Service(Service.Level.PROJECT) class GitAddQueueService(private val project: Project) { private val queue = ConcurrentSkipListSet() - private val gitStager = GitStager(ProcessExecutor()) + private val gitStager = GitStager() fun enqueue(file: File) { val path = file.absolutePath @@ -27,44 +27,7 @@ class GitAddQueueService(private val project: Project) { return } - gitStager.stageAll(projectRoot, items.map(::File)) + gitStager.stage(projectRoot, items.map(::File)) queue.removeAll(items) } } - -internal class GitStager(private val executor: ProcessExecutor) { - fun stageAll( - projectRoot: File, - files: Collection - ) { - if (files.isEmpty()) { - return - } - val gitCommandWithArguments = - listOf("git", "add", "--") + - files.map { file -> - val absolutePath = file.absolutePath - val file = File(absolutePath) - file.relativeToOrNull(projectRoot)?.path ?: absolutePath - } - executor.run(projectRoot, gitCommandWithArguments) - } -} - -internal class ProcessExecutor { - fun run( - directory: File, - args: List - ) { - try { - val process = - ProcessBuilder(args) - .directory(directory) - .redirectErrorStream(true) - .start() - process.inputStream.bufferedReader().use { it.readText() } - process.waitFor() - } catch (_: Exception) { - } - } -} diff --git a/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/GitInitializer.kt b/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/GitInitializer.kt new file mode 100644 index 0000000..dbde39d --- /dev/null +++ b/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/GitInitializer.kt @@ -0,0 +1,9 @@ +package com.mitteloupe.cag.cleanarchitecturegenerator.git + +import java.io.File + +internal class GitInitializer(private val executor: ProcessExecutor = ProcessExecutor()) { + fun initialize(projectRoot: File) { + executor.run(projectRoot, listOf("git", "init")) + } +} diff --git a/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/GitStager.kt b/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/GitStager.kt new file mode 100644 index 0000000..6a1ec90 --- /dev/null +++ b/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/GitStager.kt @@ -0,0 +1,26 @@ +package com.mitteloupe.cag.cleanarchitecturegenerator.git + +import java.io.File + +internal class GitStager(private val executor: ProcessExecutor = ProcessExecutor()) { + fun stage( + projectRoot: File, + files: Collection + ) { + if (files.isEmpty()) { + return + } + val gitCommandWithArguments = + listOf("git", "add", "--") + + files.map { file -> + val absolutePath = file.absolutePath + val file = File(absolutePath) + file.relativeToOrNull(projectRoot)?.path ?: absolutePath + } + executor.run(projectRoot, gitCommandWithArguments) + } + + fun stageAll(projectRoot: File) { + executor.run(projectRoot, listOf("git", "add", "-A")) + } +} diff --git a/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/ProcessExecutor.kt b/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/ProcessExecutor.kt new file mode 100644 index 0000000..0aae9b7 --- /dev/null +++ b/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/git/ProcessExecutor.kt @@ -0,0 +1,28 @@ +package com.mitteloupe.cag.cleanarchitecturegenerator.git + +import com.intellij.openapi.diagnostic.Logger +import java.io.File + +internal class ProcessExecutor { + private val logger = Logger.getInstance(ProcessExecutor::class.java) + + fun run( + directory: File, + args: List + ) { + try { + val process = + ProcessBuilder(args) + .directory(directory) + .redirectErrorStream(true) + .start() + val output = process.inputStream.bufferedReader().use { it.readText() } + val exitCode = process.waitFor() + if (exitCode != 0) { + logger.warn("Command failed: '${args.joinToString(" ")}' in '${directory.absolutePath}' (exit=$exitCode)\nOutput:\n$output") + } + } catch (e: Exception) { + logger.warn("Process execution failed for '${args.joinToString(" ")}' in '${directory.absolutePath}'", e) + } + } +} diff --git a/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/projectwizard/CleanArchitectureWizardTemplateProvider.kt b/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/projectwizard/CleanArchitectureWizardTemplateProvider.kt index faf3e70..4f9b9c4 100644 --- a/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/projectwizard/CleanArchitectureWizardTemplateProvider.kt +++ b/plugin/src/main/kotlin/com/mitteloupe/cag/cleanarchitecturegenerator/projectwizard/CleanArchitectureWizardTemplateProvider.kt @@ -15,25 +15,21 @@ import com.android.tools.idea.wizard.template.WizardUiContext import com.android.tools.idea.wizard.template.booleanParameter import com.android.tools.idea.wizard.template.impl.activities.common.MIN_API import com.android.tools.idea.wizard.template.template -import com.intellij.openapi.application.ApplicationManager import com.mitteloupe.cag.cleanarchitecturegenerator.CleanArchitectureGeneratorBundle import com.mitteloupe.cag.cleanarchitecturegenerator.IdeBridge import com.mitteloupe.cag.cleanarchitecturegenerator.filesystem.GeneratorProvider +import com.mitteloupe.cag.cleanarchitecturegenerator.git.GitInitializer +import com.mitteloupe.cag.cleanarchitecturegenerator.git.GitStager +import com.mitteloupe.cag.cleanarchitecturegenerator.settings.AppSettingsService import com.mitteloupe.cag.core.GenerationException import com.mitteloupe.cag.core.request.GenerateProjectTemplateRequest import java.io.File import java.lang.reflect.Field -import java.util.UUID -import java.util.concurrent.ConcurrentHashMap class CleanArchitectureWizardTemplateProvider : WizardTemplateProvider() { private val ideBridge = IdeBridge() private val generatorProvider = GeneratorProvider() - private val processedRequests = ConcurrentHashMap() - - private val executionId = UUID.randomUUID().toString() - override fun getTemplates(): List