Use precalculated diff in revision viewer (#2179)

Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
Tilman Vatteroth 2022-07-14 19:43:34 +02:00 committed by GitHub
parent f55b590777
commit 649ebe48f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 530 additions and 89 deletions

View file

@ -0,0 +1,47 @@
/*
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import type { Hunk, ParsedDiff } from 'diff'
/**
* Inverts a given unified patch.
* A patch that e.g. adds a line, will remove it then.
*
* @param parsedDiff The patch to invert
* @return The inverted patch
*/
export const invertUnifiedPatch = (parsedDiff: ParsedDiff): ParsedDiff => {
const { oldFileName, newFileName, oldHeader, newHeader, hunks, index } = parsedDiff
const newHunks: Hunk[] = hunks.map((hunk) => {
const { oldLines, oldStart, newLines, newStart, lines, linedelimiters } = hunk
return {
oldLines: newLines,
oldStart: newStart,
newLines: oldLines,
newStart: oldStart,
linedelimiters: linedelimiters,
lines: lines.map((line) => {
if (line.startsWith('-')) {
return `+${line.slice(1)}`
} else if (line.startsWith('+')) {
return `-${line.slice(1)}`
} else {
return line
}
})
}
})
return {
hunks: newHunks,
index: index,
newFileName: oldFileName,
newHeader: oldHeader,
oldFileName: newFileName,
oldHeader: newHeader
}
}