1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #!/usr/bin/env node
- // Usage: autoFixConflicts.js | sh
- import { createInterface as readLines } from 'node:readline'
- import { spawn } from 'node:child_process'
- const VERSION_URL = /(?<=https:\/\/\S+\/v)\d+\.\d+\.\d+(?:-(?:alpha|beta)(?:[.-]\d+)?)?(?=\/)/
- const gitStatus = spawn('git', ['status', '--porcelain'])
- for await (const line of readLines(gitStatus.stdout)) {
- // eslint-disable-next-line no-continue
- if (!line.startsWith('UU ')) continue
- const file = line.slice(3)
- if (file === 'yarn.lock') {
- console.log('corepack yarn install')
- console.log('git add yarn.lock')
- // eslint-disable-next-line no-continue
- continue
- }
- if (file.endsWith('/package.json')) {
- console.log(`git checkout --ours ${file}`)
- console.log(`git add ${file}`)
- // eslint-disable-next-line no-continue
- continue
- }
- const gitDiff = spawn('git', ['--no-pager', 'diff', '--', file])
- let conflictHasStarted = false
- let containsCDNChanges = true
- let currentConflictContainsCDNChanges = false
- // eslint-disable-next-line no-shadow
- for await (const line of readLines(gitDiff.stdout)) {
- if (conflictHasStarted) {
- if (line.startsWith('++>>>>>>>')) {
- conflictHasStarted = false
- containsCDNChanges &&= currentConflictContainsCDNChanges
- currentConflictContainsCDNChanges = false
- } else {
- currentConflictContainsCDNChanges ||= VERSION_URL.test(line)
- }
- } else if (line === '++<<<<<<< HEAD') {
- conflictHasStarted = true
- }
- }
- if (containsCDNChanges) {
- console.log(`git checkout --ours ${file}`)
- console.log(`git add ${file}`)
- // eslint-disable-next-line no-continue
- continue
- }
- }
|