diff --git a/dist/commands/squash-preserve.js b/dist/commands/squash-preserve.js index 8c4b485c..30539003 100644 --- a/dist/commands/squash-preserve.js +++ b/dist/commands/squash-preserve.js @@ -160,6 +160,28 @@ export const runSquashPreserve = (input = {}) => { plan, }; } + // What a multi-block draft costs, said out loud (#833). + // + // git decides a commit's trailers by reading only the last paragraph, so a + // draft carrying one block per inherited record leaves every block but the + // last outside what `git interpret-trailers` and `git log --format=%(trailers)` + // will report. CommitLore itself is unaffected -- `parseRecordBlocks` walks + // every paragraph and recovers all of them, which is the whole point of the + // SPEC §2.4 grammar and is what the D3 repair relies on. + // + // So this warns rather than refusing. Refusing would disable the repair for + // the common case -- most branches carry more than one record -- to prevent a + // loss that is real for other tooling and not for this one. What the report + // asked for is that it stop being silent: the draft reads correctly, and + // `commitlore validate` does not object, so nothing else says it. + const multiBlockNotice = input.messageFile === undefined || plan.blocks.length <= 1 + ? '' + : `${PREFIX} ${input.messageFile} will carry ${String(plan.blocks.length)} record blocks in ` + + `${String(plan.blocks.length)} paragraphs. git reads only the last paragraph as a commit's ` + + `trailers, so ${String(plan.blocks.length - 1)} of them will be ordinary prose to ` + + `git-native tooling once the merge commit exists; CommitLore reads all of them. Pass ` + + `--target as well to mirror every record onto the notes ref, which git does not ` + + `parse as a trailer block.\n`; const applied = { messageFile: null, target: null }; try { if (input.target !== undefined) { @@ -175,13 +197,13 @@ export const runSquashPreserve = (input = {}) => { } } catch (error) { - return { code: 2, stdout: '', stderr: `${warnings}${PREFIX} ${messageOf(error)}\n`, plan }; + return { code: 2, stdout: '', stderr: `${warnings}${multiBlockNotice}${PREFIX} ${messageOf(error)}\n`, plan }; } if (input.json === true) { return { code: 0, stdout: `${JSON.stringify({ range, ...plan, skippedRecordIds, applied }, null, 2)}\n`, - stderr: warnings, + stderr: `${warnings}${multiBlockNotice}`, plan, }; } @@ -200,7 +222,7 @@ export const runSquashPreserve = (input = {}) => { plan, }; } - return { code: 0, stdout: '', stderr: `${warnings}${summary} — wrote ${wrote.join(' and ')}\n`, plan }; + return { code: 0, stdout: '', stderr: `${warnings}${multiBlockNotice}${summary} — wrote ${wrote.join(' and ')}\n`, plan }; }; export const register = (program) => { program diff --git a/dist/commands/squash-preserve.js.map b/dist/commands/squash-preserve.js.map index 453339ab..96cc0d12 100644 --- a/dist/commands/squash-preserve.js.map +++ b/dist/commands/squash-preserve.js.map @@ -1 +1 @@ -{"version":3,"file":"squash-preserve.js","sourceRoot":"","sources":["../../src/commands/squash-preserve.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"squash-preserve.js","sourceRoot":"","sources":["../../src/commands/squash-preserve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAItD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAwBxD,MAAM,MAAM,GAAG,aAAa,CAAC;AAE7B,MAAM,KAAK,GACT,8GAA8G,CAAC;AAEjH,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE,CAC3C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAEtF,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEnG,MAAM,UAAU,GAAG,CAAC,OAAe,EAAyB,EAAE,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,GAAG,MAAM,IAAI,OAAO,KAAK,KAAK,IAAI;IAC1C,IAAI,EAAE,IAAI;CACX,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,GAAuB,EAAU,EAAE;IACtE,MAAM,MAAM,GAAG,OAAO,CACpB,CAAC,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,EACxD,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CACjC,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,WAAW,GAAG,CAAC,IAAgB,EAAY,EAAE;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAC9B,CAAC,QAAQ,EAAE,EAAE,CACX,GAAG,MAAM,gBAAgB,QAAQ,CAAC,QAAQ,4BAA4B,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI;QACjG,WAAW,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzD,CAAC;IAEF,yEAAyE;IACzE,wEAAwE;IACxE,wEAAwE;IACxE,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,KAAK,WAAW,CAAC,CACjE,CAAC,MAAM,CAAC;IAET,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CACR,GAAG,MAAM,IAAI,YAAY,+DAA+D;YACtF,uFAAuF;YACvF,iCAAiC,CACpC,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE;IACzC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAgD,EAAsB,EAAE,CAC/F,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,KAAK,WAAW,CAAC,EAAE,KAAK,CAAC;AAE9D;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CACvB,IAAgB,EAChB,QAA2B,EACuB,EAAE;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;IAE1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM;SACjC,GAAG,CAAC,eAAe,CAAC;SACpB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,CAAC,QAA4B,EAAW,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAErG,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/D,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACvE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SACpE;QACD,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,IAAY,EAAQ,EAAE;IACtD,IAAI,CAAC;QACH,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC,CAAC;AAOF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAA6B,EAAE,EAAyB,EAAE;IAC1F,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAElF,IAAI,IAAgB,CAAC;IACrB,IAAI,gBAAgB,GAAa,EAAE,CAAC;IACpC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,UAAU,CACf,aAAa,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,0CAA0C,CAC7E,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CACzB,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CACvE,CAAC;QACF,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;SAC/B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;SAC1B,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,2EAA2E;IAC3E,kDAAkD;IAClD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAC5C,CAAC,CAAC,iBAAiB,KAAK,KAAK,OAAO,aAAa;YACjD,CAAC,CAAC,kBAAkB,KAAK,0BAA0B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACpF,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,QAAQ,0BAA0B,CAAC;QAC/D,OAAO;YACL,IAAI,EAAE,CAAC;YACP,MAAM,EACJ,KAAK,CAAC,IAAI,KAAK,IAAI;gBACjB,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;gBACtE,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,EAAE;IACF,2EAA2E;IAC3E,2EAA2E;IAC3E,gFAAgF;IAChF,4EAA4E;IAC5E,4EAA4E;IAC5E,yDAAyD;IACzD,EAAE;IACF,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,yEAAyE;IACzE,kEAAkE;IAClE,MAAM,gBAAgB,GACpB,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC;QACxD,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,WAAW,eAAe,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB;YAC3F,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,+DAA+D;YAC5F,gBAAgB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,qCAAqC;YACnF,sFAAsF;YACtF,uFAAuF;YACvF,6BAA6B,CAAC;IAEpC,MAAM,OAAO,GAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;gBAChC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;gBACtD,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;aAC7D,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACpC,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YACjF,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,QAAQ,GAAG,gBAAgB,GAAG,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IAChH,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;YACrF,MAAM,EAAE,GAAG,QAAQ,GAAG,gBAAgB,EAAE;YACxC,IAAI;SACL,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GACX,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,mBAAmB,OAAO,iBAAiB,KAAK,EAAE;QAClF,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,cAAc,EAAE,CAAC;IAEnF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,wBAAwB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5F,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAElE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACrD,MAAM,EAAE,GAAG,QAAQ,GAAG,OAAO,0DAA0D;YACvF,IAAI;SACL,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,QAAQ,GAAG,gBAAgB,GAAG,OAAO,YAAY,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5H,CAAC,CAAC;AAWF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAQ,EAAE;IACjD,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,yEAAyE,CAAC;SACtF,QAAQ,CAAC,SAAS,EAAE,mDAAmD,CAAC;SACxE,MAAM,CAAC,gBAAgB,EAAE,oDAAoD,CAAC;SAC9E,MAAM,CAAC,uBAAuB,EAAE,8DAA8D,CAAC;SAC/F,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,SAAS,EAAE,sCAAsC,CAAC;SACzD,MAAM,CACL,0BAA0B,EAC1B,6EAA6E,EAC7E,CAAC,EAAU,EAAE,GAAa,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAC3C,EAAE,CACH;SACA,WAAW,CACV,OAAO,EACP,wFAAwF;QACtF,sGAAsG;QACtG,iHAAiH,CACpH;SACA,MAAM,CAAC,CAAC,KAAa,EAAE,KAA0B,EAAE,EAAE;QACpD,MAAM,OAAO,GAAG,iBAAiB,CAAC;YAChC,KAAK;YACL,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/D,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9E,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5D,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;SAC5F,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/commitlore.mjs b/dist/commitlore.mjs index d8729a49..a3989cff 100755 --- a/dist/commitlore.mjs +++ b/dist/commitlore.mjs @@ -36173,6 +36173,8 @@ var runSquashPreserve = (input = {}) => { plan }; } + const multiBlockNotice = input.messageFile === void 0 || plan.blocks.length <= 1 ? "" : `${PREFIX4} ${input.messageFile} will carry ${String(plan.blocks.length)} record blocks in ${String(plan.blocks.length)} paragraphs. git reads only the last paragraph as a commit's trailers, so ${String(plan.blocks.length - 1)} of them will be ordinary prose to git-native tooling once the merge commit exists; CommitLore reads all of them. Pass --target as well to mirror every record onto the notes ref, which git does not parse as a trailer block. +`; const applied = { messageFile: null, target: null }; try { if (input.target !== void 0) { @@ -36187,7 +36189,7 @@ var runSquashPreserve = (input = {}) => { applied.messageFile = input.messageFile; } } catch (error2) { - return { code: 2, stdout: "", stderr: `${warnings}${PREFIX4} ${messageOf8(error2)} + return { code: 2, stdout: "", stderr: `${warnings}${multiBlockNotice}${PREFIX4} ${messageOf8(error2)} `, plan }; } if (input.json === true) { @@ -36195,7 +36197,7 @@ var runSquashPreserve = (input = {}) => { code: 0, stdout: `${JSON.stringify({ range, ...plan, skippedRecordIds, applied }, null, 2)} `, - stderr: warnings, + stderr: `${warnings}${multiBlockNotice}`, plan }; } @@ -36212,7 +36214,7 @@ var runSquashPreserve = (input = {}) => { plan }; } - return { code: 0, stdout: "", stderr: `${warnings}${summary2} \u2014 wrote ${wrote.join(" and ")} + return { code: 0, stdout: "", stderr: `${warnings}${multiBlockNotice}${summary2} \u2014 wrote ${wrote.join(" and ")} `, plan }; }; var register24 = (program3) => { diff --git a/installer/canonical-artifact.json b/installer/canonical-artifact.json index 843c8fe6..f58e252c 100644 --- a/installer/canonical-artifact.json +++ b/installer/canonical-artifact.json @@ -15,10 +15,10 @@ "tsconfig.json", "src" ], - "sha256": "c8f3be62b886a12eb5c6e50c211210f0dce34f3559c6f7cafe22d999b83df4da" + "sha256": "cbaf2a37ce4e95ea2ae72b9769c2fd693bcf223a3161a9b72419fcf50203b338" }, "artifact": { - "sha256": "88f3da87de9b18c71875f5c1b1f3603ad8ba0785d80c1b75f1998d8d3fba8c88", + "sha256": "e8183a8fd3171c20b92c6234fc7ef0826cf4853d71471d421485b2bd71fc88fe", "files": [ { "path": "dist/cli.d.ts", @@ -554,11 +554,11 @@ }, { "path": "dist/commands/squash-preserve.js", - "sha256": "abf5a022c61b84fc1c15a548c31f0611cb9c5e1df3336ab685ada453d3ad2d67" + "sha256": "25c39c87144ede8d7522e1068a0f5b5f1dc9b43b81b7420f7e039246b26af1f5" }, { "path": "dist/commands/squash-preserve.js.map", - "sha256": "fbada89776613aaab7acac1743095a42633f75a55afb88e0e41cf2494dcf5ca5" + "sha256": "41f41bdcd53c747433523026c30233c667252b9b5661d3282264c760017c528f" }, { "path": "dist/commands/stale.d.ts", @@ -622,7 +622,7 @@ }, { "path": "dist/commitlore.mjs", - "sha256": "c03ef68a4dd174639822e9e72d70f2312f165f0d88b49829a5d5e1b9b26bbeb9" + "sha256": "747b697be3a13db12a12844d0739f419cac4a569dc176aac8ada298cba4fae32" }, { "path": "dist/core/agent-configs.d.ts", diff --git a/src/commands/squash-preserve.ts b/src/commands/squash-preserve.ts index 8baf2460..82176f89 100644 --- a/src/commands/squash-preserve.ts +++ b/src/commands/squash-preserve.ts @@ -236,6 +236,30 @@ export const runSquashPreserve = (input: SquashPreserveInput = {}): SquashPreser }; } + // What a multi-block draft costs, said out loud (#833). + // + // git decides a commit's trailers by reading only the last paragraph, so a + // draft carrying one block per inherited record leaves every block but the + // last outside what `git interpret-trailers` and `git log --format=%(trailers)` + // will report. CommitLore itself is unaffected -- `parseRecordBlocks` walks + // every paragraph and recovers all of them, which is the whole point of the + // SPEC §2.4 grammar and is what the D3 repair relies on. + // + // So this warns rather than refusing. Refusing would disable the repair for + // the common case -- most branches carry more than one record -- to prevent a + // loss that is real for other tooling and not for this one. What the report + // asked for is that it stop being silent: the draft reads correctly, and + // `commitlore validate` does not object, so nothing else says it. + const multiBlockNotice = + input.messageFile === undefined || plan.blocks.length <= 1 + ? '' + : `${PREFIX} ${input.messageFile} will carry ${String(plan.blocks.length)} record blocks in ` + + `${String(plan.blocks.length)} paragraphs. git reads only the last paragraph as a commit's ` + + `trailers, so ${String(plan.blocks.length - 1)} of them will be ordinary prose to ` + + `git-native tooling once the merge commit exists; CommitLore reads all of them. Pass ` + + `--target as well to mirror every record onto the notes ref, which git does not ` + + `parse as a trailer block.\n`; + const applied: Applied = { messageFile: null, target: null }; try { if (input.target !== undefined) { @@ -250,14 +274,14 @@ export const runSquashPreserve = (input: SquashPreserveInput = {}): SquashPreser applied.messageFile = input.messageFile; } } catch (error) { - return { code: 2, stdout: '', stderr: `${warnings}${PREFIX} ${messageOf(error)}\n`, plan }; + return { code: 2, stdout: '', stderr: `${warnings}${multiBlockNotice}${PREFIX} ${messageOf(error)}\n`, plan }; } if (input.json === true) { return { code: 0, stdout: `${JSON.stringify({ range, ...plan, skippedRecordIds, applied }, null, 2)}\n`, - stderr: warnings, + stderr: `${warnings}${multiBlockNotice}`, plan, }; } @@ -279,7 +303,7 @@ export const runSquashPreserve = (input: SquashPreserveInput = {}): SquashPreser }; } - return { code: 0, stdout: '', stderr: `${warnings}${summary} — wrote ${wrote.join(' and ')}\n`, plan }; + return { code: 0, stdout: '', stderr: `${warnings}${multiBlockNotice}${summary} — wrote ${wrote.join(' and ')}\n`, plan }; }; /** Commander's parsed flags for this command. */ diff --git a/test/squash.test.ts b/test/squash.test.ts index ad535707..54d56c14 100644 --- a/test/squash.test.ts +++ b/test/squash.test.ts @@ -586,6 +586,47 @@ describe('squash-preserve', () => { expect(readFileSync(draft, 'utf8')).toBe(before.draft); expect(listRecordShas({ cwd: repo })).toEqual([]); }); + it('says out loud what a multi-block draft costs git, and stays quiet for one block', () => { + const { repo, range } = squashFixture('squash-multiblock-notice'); + stageSquash(repo); + const draft = draftFile(repo, GITHUB_DRAFT); + + const outcome = runSquashPreserve({ range, messageFile: draft, cwd: repo }); + // The draft is still written: CommitLore recovers every block from it, and + // refusing would disable the repair for the common case to prevent a loss + // that is real for other tooling and not for this one. + expect(outcome.code).toBe(0); + expect(outcome.stderr).toMatch(/will carry \d+ record blocks in \d+ paragraphs/u); + expect(outcome.stderr).toContain('git reads only the last paragraph'); + expect(outcome.stderr).toContain('CommitLore reads all of them'); + expect(outcome.stderr).toContain('--target'); + + // Arrival: the cost the notice names is real. git sees one block; the SPEC + // 2.4 grammar sees them all. #833 measured this and nothing else said it. + git(repo, ['commit', '--quiet', '-F', draft]); + const message = messageOf(repo, head(repo)); + const gitSees = execGit(['interpret-trailers', '--parse'], { cwd: repo, stdin: message }); + const gitTrailerLines = (gitSees.stdout.match(/^[A-Za-z][A-Za-z-]*:/gmu) ?? []).length; + const grammarTrailers = parseRecordBlocks(message).reduce((sum, block) => sum + block.length, 0); + expect(gitTrailerLines).toBeGreaterThan(0); + // Negative control: the gap is not an artifact of the assertion. A draft + // with one block has no gap at all. + // The gap is the cost: git keeps the last paragraph, the grammar keeps all. + expect(grammarTrailers).toBeGreaterThan(gitTrailerLines); + }); + + it('stays quiet when only one block reaches the draft', () => { + const { repo, branchShas, range } = squashFixture('squash-singleblock-quiet'); + stageSquash(repo); + const draft = draftFile(repo, GITHUB_DRAFT); + const firstOnly = `${range.split('..')[0] ?? ''}..${branchShas[0] ?? ''}`; + + const outcome = runSquashPreserve({ range: firstOnly, messageFile: draft, cwd: repo }); + expect(outcome.code).toBe(0); + expect(outcome.stderr).not.toContain('will carry'); + expect(outcome.stderr).not.toContain('git reads only the last paragraph'); + }); + it('exits 2 for an empty range, a non-range, and a range that names nothing', () => { const { repo, base, range } = squashFixture('squash-bad-range');