toes diff improvements

This commit is contained in:
Chris Wanstrath 2026-02-09 21:40:48 -08:00
parent 891b08ecd8
commit 115d3199e8

View File

@ -886,12 +886,28 @@ function showDiff(remote: string, local: string) {
let lineCount = 0
const maxLines = 50
const contextLines = 3
let remoteLine = 1
let localLine = 1
let needsHeader = true
let hunkCount = 0
const printHeader = (_rStart: number, lStart: number) => {
if (hunkCount > 0) console.log()
if (lStart > 1) {
console.log(color.cyan(`Line ${lStart}:`))
lineCount++
}
needsHeader = false
hunkCount++
}
for (let i = 0; i < changes.length; i++) {
const part = changes[i]!
const lines = part.value.replace(/\n$/, '').split('\n')
if (part.added) {
if (needsHeader) printHeader(remoteLine, localLine)
for (const line of lines) {
if (lineCount >= maxLines) {
console.log(color.gray('... diff truncated'))
@ -900,7 +916,9 @@ function showDiff(remote: string, local: string) {
console.log(color.green(`+ ${line}`))
lineCount++
}
localLine += lines.length
} else if (part.removed) {
if (needsHeader) printHeader(remoteLine, localLine)
for (const line of lines) {
if (lineCount >= maxLines) {
console.log(color.gray('... diff truncated'))
@ -909,6 +927,7 @@ function showDiff(remote: string, local: string) {
console.log(color.red(`- ${line}`))
lineCount++
}
remoteLine += lines.length
} else {
// Context: show lines near changes
const prevHasChange = i > 0 && (changes[i - 1]!.added || changes[i - 1]!.removed)
@ -929,9 +948,11 @@ function showDiff(remote: string, local: string) {
if (nextHasChange) {
const start = Math.max(0, lines.length - contextLines)
if (start > 0) {
console.log(color.gray(' ...'))
lineCount++
needsHeader = true
}
const headerLine = remoteLine + start
const headerLocalLine = localLine + start
if (needsHeader) printHeader(headerLine, headerLocalLine)
for (let j = start; j < lines.length; j++) {
if (lineCount >= maxLines) {
console.log(color.gray('... diff truncated'))
@ -942,7 +963,7 @@ function showDiff(remote: string, local: string) {
}
}
// Show context after previous change
if (prevHasChange) {
if (prevHasChange && !nextHasChange) {
const end = Math.min(lines.length, contextLines)
for (let j = 0; j < end; j++) {
if (lineCount >= maxLines) {
@ -952,11 +973,13 @@ function showDiff(remote: string, local: string) {
console.log(color.gray(` ${lines[j]}`))
lineCount++
}
if (end < lines.length && !nextHasChange) {
console.log(color.gray(' ...'))
if (end < lines.length) {
needsHeader = true
}
}
}
remoteLine += lines.length
localLine += lines.length
}
}
}