Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions src/commands/diff/__snapshots__/diff.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,37 @@ DevCycle Variable Changes:
"
`;

exports[`diff runs against a test file and linkifies the output for a gitlab MR 1`] = `
"
DevCycle Variable Changes:

🟢 6 Variables Added
🔴 1 Variable Removed

🟢 Added

1. simple-case
Location: [test-utils/fixtures/diff/sampleDiff.js:L1](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af)
2. duplicate-case
Locations:
- [test-utils/fixtures/diff/sampleDiff.js:L2](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af)
- [test-utils/fixtures/diff/sampleDiff.js:L3](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af)
3. single-quotes
Location: [test-utils/fixtures/diff/sampleDiff.js:L5](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af)
4. multi-line
Location: [test-utils/fixtures/diff/sampleDiff.js:L11](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af)
5. multi-line-comment
Location: [test-utils/fixtures/diff/sampleDiff.js:L21](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af)
6. duplicate-same-line
Location: [test-utils/fixtures/diff/sampleDiff.js:L26](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af)

🔴 Removed

1. simple-case
Location: [test-utils/fixtures/diff/sampleDiff.js:L1](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af)
"
`;

exports[`diff runs against a test file with a custom matcher 1`] = `
"
DevCycle Variable Changes:
Expand Down
10 changes: 10 additions & 0 deletions src/commands/diff/diff.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,16 @@ describe('diff', () => {
expect(ctx.stdout).toMatchSnapshot()
})

test
.stdout()
.command([
'diff', '--file', './test-utils/fixtures/diff/e2e', '--no-api',
'--pr-link', 'https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6'
])
.it('runs against a test file and linkifies the output for a gitlab MR', (ctx) => {
expect(ctx.stdout).toMatchSnapshot()
})

test
.nock(AUTH_URL, (api) => {
api.post('/oauth/token', {
Expand Down
14 changes: 11 additions & 3 deletions src/commands/diff/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { parseFiles } from '../../utils/diff/parse'
import { VariableDiffMatch } from '../../utils/parsers/types'
import Base from '../base'
import { sha256 } from 'js-sha256'
import { createHash } from 'node:crypto'
import { fetchVariableByKey } from '../../api/variables'
import ClientNameFlag, { getClientNames } from '../../flags/client-name'
import MatchPatternFlag, { getMatchPatterns } from '../../flags/match-pattern'
Expand Down Expand Up @@ -327,9 +328,16 @@ export default class Diff extends Base {
private logLocations(matches: VariableDiffMatch[], mode: 'add' | 'remove', prLink?: string) {
const formatPrLink = (fileName: string, line: number) => {
const displayName = `${fileName}:L${line}`
const link = prLink?.includes('bitbucket')
? `${prLink}#L${fileName}${mode === 'add' ? 'T' : 'F'}${line}`
: `${prLink}/files#diff-${sha256(fileName)}${mode === 'add' ? 'R' : 'L'}${line}`
let link = ''
if (prLink?.includes('bitbucket')) {
link = `${prLink}#L${fileName}${mode === 'add' ? 'T' : 'F'}${line}`
} else if (prLink?.includes('gitlab')) {
// TODO: include line number in link if possible
const sha1Hash = createHash('sha1').update(fileName).digest('hex')
link = `${prLink}/diffs#diff-content-${sha1Hash}`
} else {
link = `${prLink}/files#diff-${sha256(fileName)}${mode === 'add' ? 'R' : 'L'}${line}`
}

return `[${displayName}](${link})`
}
Expand Down