Implemented basic local git init

This commit is contained in:
Abdelilah El Aissaoui 2022-04-01 05:42:44 +02:00
parent 54a1ab4436
commit 558f02fca4
4 changed files with 57 additions and 10 deletions

View File

@ -8,6 +8,8 @@ import org.eclipse.jgit.storage.file.FileRepositoryBuilder
import java.io.File import java.io.File
import javax.inject.Inject import javax.inject.Inject
private const val INITIAL_BRANCH_NAME = "main"
class RepositoryManager @Inject constructor() { class RepositoryManager @Inject constructor() {
suspend fun getRepositoryState(git: Git) = withContext(Dispatchers.IO) { suspend fun getRepositoryState(git: Git) = withContext(Dispatchers.IO) {
return@withContext git.repository.repositoryState return@withContext git.repository.repositoryState
@ -30,4 +32,11 @@ class RepositoryManager @Inject constructor() {
.findGitDir() // scan up the file system tree .findGitDir() // scan up the file system tree
.build() .build()
} }
suspend fun initLocalRepo(repoDir: File): Unit = withContext(Dispatchers.IO) {
Git.init()
.setInitialBranch(INITIAL_BRANCH_NAME)
.setDirectory(repoDir)
.call()
}
} }

View File

@ -1,14 +1,38 @@
import app.extensions.runCommand import app.extensions.runCommand
import app.viewmodels.TabViewModel import app.viewmodels.TabViewModel
import java.io.File
import javax.swing.JFileChooser import javax.swing.JFileChooser
import javax.swing.UIManager import javax.swing.UIManager
fun openDirectoryDialog(): String? {
val os = System.getProperty("os.name")
var dirToOpen: String? = null
if (os.lowercase() == "linux") {
val checkZenityInstalled = runCommand("which zenity 2>/dev/null")
val isZenityInstalled = !checkZenityInstalled.isNullOrEmpty()
if (isZenityInstalled) {
val openDirectory = runCommand(
"zenity --file-selection --title=Open --directory"
)?.replace("\n", "")
if (!openDirectory.isNullOrEmpty())
dirToOpen = openDirectory
} else
dirToOpen = openJvmDialog("", true)
} else {
dirToOpen = openJvmDialog("", false)
}
return dirToOpen
}
fun openRepositoryDialog(tabViewModel: TabViewModel) { fun openRepositoryDialog(tabViewModel: TabViewModel) {
val os = System.getProperty("os.name") val os = System.getProperty("os.name")
val appStateManager = tabViewModel.appStateManager val appStateManager = tabViewModel.appStateManager
val latestDirectoryOpened = appStateManager.latestOpenedRepositoryPath val latestDirectoryOpened = appStateManager.latestOpenedRepositoryPath
var dirToOpen: String? = null
if (os.lowercase() == "linux") { if (os.lowercase() == "linux") {
val checkZenityInstalled = runCommand("which zenity 2>/dev/null") val checkZenityInstalled = runCommand("which zenity 2>/dev/null")
@ -20,20 +44,21 @@ fun openRepositoryDialog(tabViewModel: TabViewModel) {
)?.replace("\n", "") )?.replace("\n", "")
if (!openDirectory.isNullOrEmpty()) if (!openDirectory.isNullOrEmpty())
tabViewModel.openRepository(openDirectory) dirToOpen = openDirectory
} else } else
openRepositoryDialog(tabViewModel, latestDirectoryOpened, true) dirToOpen = openJvmDialog(latestDirectoryOpened, true)
} else { } else {
openRepositoryDialog(tabViewModel, latestDirectoryOpened, false) dirToOpen = openJvmDialog(latestDirectoryOpened, false)
} }
if(dirToOpen != null)
tabViewModel.openRepository(dirToOpen)
} }
private fun openRepositoryDialog( private fun openJvmDialog(
tabViewModel: TabViewModel,
latestDirectoryOpened: String, latestDirectoryOpened: String,
isLinux: Boolean, isLinux: Boolean,
) { ) : String? {
if (!isLinux) { if (!isLinux) {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()) UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
} }
@ -46,6 +71,8 @@ private fun openRepositoryDialog(
fileChooser.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY fileChooser.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY
fileChooser.showSaveDialog(null) fileChooser.showSaveDialog(null)
if (fileChooser.selectedFile != null) return if (fileChooser.selectedFile != null)
tabViewModel.openRepository(fileChooser.selectedFile) fileChooser.selectedFile.absolutePath
else
null
} }

View File

@ -25,6 +25,7 @@ import app.theme.secondaryTextColor
import app.ui.dialogs.CloneDialog import app.ui.dialogs.CloneDialog
import app.ui.dialogs.MaterialDialog import app.ui.dialogs.MaterialDialog
import app.viewmodels.TabViewModel import app.viewmodels.TabViewModel
import openDirectoryDialog
import openRepositoryDialog import openRepositoryDialog
import java.awt.Desktop import java.awt.Desktop
import java.net.URI import java.net.URI
@ -87,7 +88,11 @@ fun WelcomePage(
.padding(bottom = 8.dp), .padding(bottom = 8.dp),
title = "Start a local repository", title = "Start a local repository",
painter = painterResource("open.svg"), painter = painterResource("open.svg"),
onClick = { } onClick = {
val dir = openDirectoryDialog()
if(dir != null)
tabViewModel.initLocalRepository(dir)
}
) )
Text( Text(

View File

@ -254,6 +254,12 @@ class TabViewModel @Inject constructor(
diffViewModel.updateDiff(diffSelected) diffViewModel.updateDiff(diffSelected)
} }
} }
fun initLocalRepository(dir: String) = tabState.managerScope.launch(Dispatchers.IO){
val repoDir = File(dir)
repositoryManager.initLocalRepo(repoDir)
openRepository(repoDir)
}
} }