From 8bf5f08dbcfa4c5870a907c04ef2fdc5393da97d Mon Sep 17 00:00:00 2001 From: Mark Amery Date: Fri, 29 Dec 2023 12:11:57 +0000 Subject: [PATCH] Add function to reverse a patch --- src/patch/reverse.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/patch/reverse.js diff --git a/src/patch/reverse.js b/src/patch/reverse.js new file mode 100644 index 00000000..76f072ec --- /dev/null +++ b/src/patch/reverse.js @@ -0,0 +1,25 @@ +export function reversePatch(structuredPatch) { + const result = {...structuredPatch, hunks: structuredPatch.hunks.slice()}; + const { oldFileName, newFileName, oldHeader, newHeader, hunks } = result; + + result.oldFileName = newFileName; + result.oldHeader = newHeader; + result.newFileName = oldFileName; + result.newHeader = oldHeader; + + for (const hunk of hunks) { + const { oldLines, oldStart, newLines, newStart, lines } = hunk; + hunk.oldLines = newLines.slice(); + hunk.oldStart = newStart; + hunk.newLines = oldLines.slice(); + hunk.newStart = oldStart; + + hunk.lines = lines.map(l => { + if (l.startsWith('-')) return `+${l.slice(1)}`; + if (l.startsWith('+')) return `-${l.slice(1)}`; + return l; + }); + } + + return structuredPatch; +}