Added option to clone submodules when cloning a repo

This commit is contained in:
Abdelilah El Aissaoui 2023-04-16 02:07:51 +02:00
parent 8cfc3607c2
commit 552ac17d0e
No known key found for this signature in database
GPG Key ID: 7587FC860F594869
4 changed files with 37 additions and 5 deletions

View File

@ -18,7 +18,7 @@ private const val TAG = "CloneRepositoryUseCase"
class CloneRepositoryUseCase @Inject constructor(
private val handleTransportUseCase: HandleTransportUseCase,
) {
operator fun invoke(directory: File, url: String): Flow<CloneStatus> = callbackFlow {
operator fun invoke(directory: File, url: String, cloneSubmodules: Boolean): Flow<CloneStatus> = callbackFlow {
var lastTitle: String = ""
var lastTotalWork = 0
var progress = 0
@ -64,6 +64,7 @@ class CloneRepositoryUseCase @Inject constructor(
}
)
.setTransportConfigCallback { handleTransportUseCase(it, null) }
.setCloneSubmodules(cloneSubmodules)
.call()
ensureActive()

View File

@ -2,6 +2,7 @@ package com.jetpackduba.gitnuro.ui.dialogs
import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.background
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
@ -18,6 +19,7 @@ import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.unit.dp
import com.jetpackduba.gitnuro.extensions.handMouseClickable
import com.jetpackduba.gitnuro.git.CloneStatus
import com.jetpackduba.gitnuro.theme.outlinedTextFieldColors
@ -85,6 +87,7 @@ private fun CloneInput(
) {
var url by remember { mutableStateOf(cloneViewModel.url) }
var directory by remember { mutableStateOf(cloneViewModel.directory) }
var cloneSubmodules by remember { mutableStateOf(true) }
val urlFocusRequester = remember { FocusRequester() }
val directoryFocusRequester = remember { FocusRequester() }
@ -174,6 +177,34 @@ private fun CloneInput(
}
}
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.handMouseClickable(
interactionSource = remember { MutableInteractionSource() },
indication = null,
) {
cloneSubmodules = !cloneSubmodules
}
.fillMaxWidth()
.padding(top = 16.dp)
) {
Checkbox(
checked = cloneSubmodules,
onCheckedChange = {
cloneSubmodules = it
},
modifier = Modifier
.padding(all = 8.dp)
.size(12.dp)
)
Text(
"Clone submodules recursively",
style = MaterialTheme.typography.body2,
color = MaterialTheme.colors.onBackground,
)
}
if (errorMessage != null) {
Box(
modifier = Modifier
@ -213,7 +244,7 @@ private fun CloneInput(
)
PrimaryButton(
onClick = {
cloneViewModel.clone(directory, url)
cloneViewModel.clone(directory, url, cloneSubmodules)
},
modifier = Modifier
.focusRequester(cloneButtonFocusRequester)

View File

@ -26,7 +26,7 @@ class CloneViewModel @Inject constructor(
private var cloneJob: Job? = null
fun clone(directoryPath: String, url: String) {
fun clone(directoryPath: String, url: String, cloneSubmodules: Boolean) {
cloneJob = tabState.safeProcessingWithoutGit {
if (directoryPath.isBlank()) {
_cloneStatus.value = CloneStatus.Fail("Invalid empty directory")
@ -69,7 +69,7 @@ class CloneViewModel @Inject constructor(
repoDir.mkdir()
}
cloneRepositoryUseCase(repoDir, url)
cloneRepositoryUseCase(repoDir, url, cloneSubmodules)
.flowOn(Dispatchers.IO)
.collect { newCloneStatus ->
_cloneStatus.value = newCloneStatus

View File

@ -51,7 +51,7 @@ class BeforeRepoAllTestsExtension : BeforeAllCallback, AfterAllCallback {
},
)
)
cloneRepositoryUseCase(repoDir, REPO_URL)
cloneRepositoryUseCase(repoDir, REPO_URL, false)
.flowOn(Dispatchers.IO)
.collect { newCloneStatus ->
println("Cloning test repository: $newCloneStatus")