Fixed unstage hunk regression in commit 3b1486e
This commit is contained in:
parent
eafebd2221
commit
add5666d89
@ -23,8 +23,8 @@ class UnstageHunkUseCase @Inject constructor(
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
val entryContent = rawFileManager.getRawContent(
|
val entryContent = rawFileManager.getRawContent(
|
||||||
repository = git.repository,
|
repository = repository,
|
||||||
side = DiffEntry.Side.OLD,
|
side = DiffEntry.Side.NEW,
|
||||||
entry = diffEntry,
|
entry = diffEntry,
|
||||||
oldTreeIterator = null,
|
oldTreeIterator = null,
|
||||||
newTreeIterator = null
|
newTreeIterator = null
|
||||||
@ -37,31 +37,33 @@ class UnstageHunkUseCase @Inject constructor(
|
|||||||
|
|
||||||
val hunkLines = hunk.lines.filter { it.lineType != LineType.CONTEXT }
|
val hunkLines = hunk.lines.filter { it.lineType != LineType.CONTEXT }
|
||||||
|
|
||||||
|
val addedLines = hunkLines
|
||||||
|
.filter { it.lineType == LineType.ADDED }
|
||||||
|
.sortedBy { it.newLineNumber }
|
||||||
|
val removedLines = hunkLines
|
||||||
|
.filter { it.lineType == LineType.REMOVED }
|
||||||
|
.sortedBy { it.newLineNumber }
|
||||||
|
|
||||||
|
var linesRemoved = 0
|
||||||
|
|
||||||
|
// Start by removing the added lines to the index
|
||||||
|
for (line in addedLines) {
|
||||||
|
textLines.removeAt(line.newLineNumber + linesRemoved)
|
||||||
|
linesRemoved--
|
||||||
|
}
|
||||||
|
|
||||||
var linesAdded = 0
|
var linesAdded = 0
|
||||||
for (line in hunkLines) {
|
|
||||||
when (line.lineType) {
|
// Restore previously removed lines to the index
|
||||||
LineType.ADDED -> {
|
for (line in removedLines) {
|
||||||
textLines.add(line.oldLineNumber + linesAdded, line.text)
|
// Check how many lines before this one have been deleted
|
||||||
|
val previouslyRemovedLines = addedLines.count { it.newLineNumber < line.newLineNumber }
|
||||||
|
textLines.add(line.newLineNumber + linesAdded - previouslyRemovedLines, line.text)
|
||||||
linesAdded++
|
linesAdded++
|
||||||
}
|
}
|
||||||
|
|
||||||
LineType.REMOVED -> {
|
|
||||||
textLines.removeAt(line.oldLineNumber + linesAdded)
|
|
||||||
linesAdded--
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> throw NotImplementedError("Line type not implemented for stage hunk")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val stagedFileText = textLines.joinToString("")
|
val stagedFileText = textLines.joinToString("")
|
||||||
dirCacheEditor.add(
|
dirCacheEditor.add(HunkEdit(diffEntry.newPath, repository, ByteBuffer.wrap(stagedFileText.toByteArray())))
|
||||||
HunkEdit(
|
|
||||||
diffEntry.newPath,
|
|
||||||
repository,
|
|
||||||
ByteBuffer.wrap(stagedFileText.toByteArray())
|
|
||||||
)
|
|
||||||
)
|
|
||||||
dirCacheEditor.commit()
|
dirCacheEditor.commit()
|
||||||
|
|
||||||
completedWithErrors = false
|
completedWithErrors = false
|
||||||
|
Loading…
Reference in New Issue
Block a user