Skip to content

Commit 4b1c236

Browse files
committed
fixup! feat!: parse trailers using git if available
1 parent 44673d5 commit 4b1c236

3 files changed

Lines changed: 11 additions & 6 deletions

File tree

lib/gitlint-parser.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,27 @@ export default class Parser extends Base {
3737
'interpret-trailers', '--only-trailers', '--only-input', '--no-divider'
3838
], {
3939
encoding: 'utf-8',
40-
input: `${commitMessage}\n`
40+
input: `'dummy subject\n\n${commitMessage.join('\n')}\n`
4141
}).stdout
4242

4343
let originalTrailers
4444
try {
45-
originalTrailers = interpretTrailers(body.join('\n')).trim()
45+
originalTrailers = interpretTrailers(body).trim()
4646
} catch (err) {
4747
console.warn('git is not available, trailers detection might be a bit ' +
4848
'off which is acceptable in most cases', err)
4949
return body
5050
}
5151
const trailerFreeBody = body.slice(1) // clone, and remove the first empty line
5252
const stillInTrailers = () => {
53-
const result = interpretTrailers(trailerFreeBody.join('\n'))
53+
const result = interpretTrailers(trailerFreeBody)
5454
return result.length && originalTrailers.startsWith(result.trim())
5555
}
5656
for (let i = trailerFreeBody.length - 1; stillInTrailers(); i--) {
5757
// Remove last line until git no longer detects any trailers
5858
trailerFreeBody.pop()
5959
}
60-
this._metaStart = trailerFreeBody.length + 1
60+
this._metaStart = trailerFreeBody.length + 1 // the subject line needs to be counted
6161
for (let i = trailerFreeBody.length - 1; trailerFreeBody[i] === ''; i--) {
6262
// Remove additional empty line(s)
6363
trailerFreeBody.pop()

lib/rules/line-length.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default {
4545
message: `Line should be <= ${len} columns.`,
4646
string: line,
4747
maxLength: len,
48-
line: i,
48+
line: i + parsed.body.length - body.length,
4949
column: len,
5050
level: 'fail'
5151
})

test/rules/line-length.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ Trailer: value
205205
})
206206

207207
t.test('Signed-off-by and Assisted-by non-trailers', (tt) => {
208+
tt.plan(8)
208209
const v = new Validator()
209210

210211
const context = new Commit({
@@ -224,10 +225,14 @@ Trailer: value
224225
].join('\n')
225226
}, v)
226227

228+
let called = 0
227229
context.report = (opts) => {
228230
tt.pass('called report')
229231
tt.equal(opts.id, 'line-length', 'id')
230-
tt.equal(opts.string, 'Assisted-by: The Longest-Named Code Agent In The World <[email protected]>', 'string')
232+
tt.equal(opts.string,
233+
called++
234+
? 'Assisted-by: The Longest-Named Code Agent In The World <[email protected]>'
235+
: 'Signed-off-by: John Connor <[email protected]>', 'string')
231236
tt.equal(opts.level, 'fail', 'level')
232237
}
233238

0 commit comments

Comments
 (0)