%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
const EOL = '\n'
const colorizeDiff = require('@npmcli/disparity-colors')
const jsDiff = require('diff')
const shouldPrintPatch = require('./should-print-patch.js')
const formatDiff = ({ files, opts = {}, refs, versions }) => {
let res = ''
const srcPrefix = opts.diffNoPrefix ? '' : opts.diffSrcPrefix || 'a/'
const dstPrefix = opts.diffNoPrefix ? '' : opts.diffDstPrefix || 'b/'
for (const filename of files.values()) {
const names = {
a: `${srcPrefix}${filename}`,
b: `${dstPrefix}${filename}`,
}
let fileMode = ''
const filenames = {
a: refs.get(`a/${filename}`),
b: refs.get(`b/${filename}`),
}
const contents = {
a: filenames.a && filenames.a.content,
b: filenames.b && filenames.b.content,
}
const modes = {
a: filenames.a && filenames.a.mode,
b: filenames.b && filenames.b.mode,
}
if (contents.a === contents.b && modes.a === modes.b) {
continue
}
if (opts.diffNameOnly) {
res += `${filename}${EOL}`
continue
}
let patch = ''
let headerLength = 0
const header = str => {
headerLength++
patch += `${str}${EOL}`
}
// manually build a git diff-compatible header
header(`diff --git ${names.a} ${names.b}`)
if (modes.a === modes.b) {
fileMode = filenames.a.mode
} else {
if (modes.a && !modes.b) {
header(`deleted file mode ${modes.a}`)
} else if (!modes.a && modes.b) {
header(`new file mode ${modes.b}`)
} else {
header(`old mode ${modes.a}`)
header(`new mode ${modes.b}`)
}
}
/* eslint-disable-next-line max-len */
header(`index ${opts.tagVersionPrefix || 'v'}${versions.a}..${opts.tagVersionPrefix || 'v'}${versions.b} ${fileMode}`)
if (shouldPrintPatch(filename)) {
patch += jsDiff.createTwoFilesPatch(
names.a,
names.b,
contents.a || '',
contents.b || '',
'',
'',
{
context: opts.diffUnified === 0 ? 0 : opts.diffUnified || 3,
ignoreWhitespace: opts.diffIgnoreAllSpace,
}
).replace(
'===================================================================\n',
''
).replace(/\t\n/g, '\n') // strip trailing tabs
headerLength += 2
} else {
header(`--- ${names.a}`)
header(`+++ ${names.b}`)
}
res += (opts.color
? colorizeDiff(patch, { headerLength })
: patch)
}
return res.trim()
}
module.exports = formatDiff