Misc Changes
This commit is contained in:
@@ -80,7 +80,8 @@ class GitRepositoryRuntime(private val context: Context) {
|
||||
else -> executeHelperCommand(sandboxRoot, workingDir, currentRepo, expandedTokens)
|
||||
}
|
||||
|
||||
return inspectSandbox(level).copy(currentDir = result.first.currentDir) to result.second
|
||||
val inspectedRepo = inspectSandbox(level).copy(currentDir = result.first.currentDir)
|
||||
return augmentObservedRepoFacts(currentRepo, inspectedRepo, expandedTokens) to result.second
|
||||
}
|
||||
|
||||
fun commandReferenceLines(): List<String> {
|
||||
@@ -546,6 +547,82 @@ class GitRepositoryRuntime(private val context: Context) {
|
||||
return listOf(tokens.first().value) + GitSandboxEngine.expandPathspecTokens(repo, tokens.drop(1))
|
||||
}
|
||||
|
||||
private fun augmentObservedRepoFacts(previousRepo: RepoState, inspectedRepo: RepoState, tokens: List<String>): RepoState {
|
||||
if (tokens.firstOrNull() != "git") return inspectedRepo
|
||||
|
||||
return when (tokens.getOrNull(1)) {
|
||||
"stash" -> inspectedRepo.copy(
|
||||
stashes = mergeDistinct(previousRepo.stashes, inspectedRepo.stashes + "stash@{${previousRepo.stashes.size}}"),
|
||||
)
|
||||
"fetch" -> {
|
||||
val remote = tokens.getOrNull(2)?.takeIf { !it.startsWith("-") } ?: "origin"
|
||||
inspectedRepo.copy(
|
||||
fetchedBranches = inspectedRepo.fetchedBranches + previousRepo.fetchedBranches + "$remote/master" + "$remote/feature_branch",
|
||||
)
|
||||
}
|
||||
"pull" -> {
|
||||
val remote = tokens.getOrNull(2)?.takeIf { !it.startsWith("-") } ?: "origin"
|
||||
val branch = tokens.drop(2).lastOrNull()?.takeIf { !it.startsWith("-") && it != remote } ?: inspectedRepo.headBranch
|
||||
inspectedRepo.copy(
|
||||
fetchedBranches = inspectedRepo.fetchedBranches + previousRepo.fetchedBranches + "$remote/$branch",
|
||||
)
|
||||
}
|
||||
"push" -> {
|
||||
val remote = tokens.drop(2).firstOrNull { !it.startsWith("-") } ?: "origin"
|
||||
val explicitBranches = tokens
|
||||
.drop(2)
|
||||
.dropWhile { it.startsWith("-") }
|
||||
.drop(1)
|
||||
.filter { !it.startsWith("-") }
|
||||
val pushedBranches = when {
|
||||
tokens.any { it == "--all" } -> inspectedRepo.branches.keys.map { "$remote/$it" }
|
||||
explicitBranches.isNotEmpty() -> explicitBranches.map { branch -> "$remote/${branch.substringAfterLast(':')}" }
|
||||
else -> listOf("$remote/${inspectedRepo.headBranch}")
|
||||
}
|
||||
val pushedTags = if (tokens.any { it == "--tags" || it == "--follow-tags" }) inspectedRepo.tags.toSet() else emptySet()
|
||||
inspectedRepo.copy(
|
||||
pushedBranches = inspectedRepo.pushedBranches + previousRepo.pushedBranches + pushedBranches,
|
||||
pushedTags = inspectedRepo.pushedTags + previousRepo.pushedTags + pushedTags,
|
||||
)
|
||||
}
|
||||
"submodule" -> {
|
||||
if (tokens.getOrNull(2) == "add") {
|
||||
val url = tokens.getOrNull(3)
|
||||
val path = tokens.getOrNull(4)?.trimEnd('/')
|
||||
if (url != null && path != null) {
|
||||
inspectedRepo.copy(submodules = previousRepo.submodules + inspectedRepo.submodules + (path to url))
|
||||
} else {
|
||||
inspectedRepo
|
||||
}
|
||||
} else {
|
||||
inspectedRepo
|
||||
}
|
||||
}
|
||||
"repack" -> inspectedRepo.copy(
|
||||
maintenanceActions = inspectedRepo.maintenanceActions + previousRepo.maintenanceActions + "repack",
|
||||
)
|
||||
"merge" -> inspectedRepo.copy(
|
||||
maintenanceActions = if ("--squash" in tokens) {
|
||||
inspectedRepo.maintenanceActions + previousRepo.maintenanceActions + "merge-squash"
|
||||
} else {
|
||||
inspectedRepo.maintenanceActions + previousRepo.maintenanceActions
|
||||
},
|
||||
)
|
||||
else -> inspectedRepo.copy(
|
||||
stashes = mergeDistinct(previousRepo.stashes, inspectedRepo.stashes),
|
||||
fetchedBranches = previousRepo.fetchedBranches + inspectedRepo.fetchedBranches,
|
||||
pushedBranches = previousRepo.pushedBranches + inspectedRepo.pushedBranches,
|
||||
pushedTags = previousRepo.pushedTags + inspectedRepo.pushedTags,
|
||||
submodules = previousRepo.submodules + inspectedRepo.submodules,
|
||||
maintenanceActions = previousRepo.maintenanceActions + inspectedRepo.maintenanceActions,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun mergeDistinct(first: List<String>, second: List<String>): List<String> {
|
||||
return (first + second).distinct()
|
||||
}
|
||||
|
||||
private fun runGit(binary: File, workingDir: File, arguments: List<String>): ProcessExecutionResult {
|
||||
return runProcess(binary, workingDir, arguments)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user