51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
import type { ExecSyncOptions } from 'child_process'
|
|
|
|
import { execSync } from 'child_process'
|
|
|
|
import { warning } from './log.js'
|
|
|
|
export function tryInitRepoAndCommit(args: { cwd: string }): void {
|
|
const execOpts: ExecSyncOptions = { cwd: args.cwd, stdio: 'ignore' }
|
|
try {
|
|
// Check if git is available
|
|
execSync('git -v', execOpts)
|
|
|
|
// Do nothing if already in a git repo
|
|
if (isGitRepo(execOpts)) {
|
|
return
|
|
}
|
|
|
|
// Initialize
|
|
execSync('git init', execOpts)
|
|
if (!ensureHasDefaultBranch(execOpts)) {
|
|
execSync('git checkout -b main', execOpts)
|
|
}
|
|
|
|
// Add and commit files
|
|
execSync('git add -A', execOpts)
|
|
execSync('git commit -m "feat: initial commit"', execOpts)
|
|
} catch (_) {
|
|
warning('Failed to initialize git repository.')
|
|
}
|
|
}
|
|
|
|
function isGitRepo(opts: ExecSyncOptions): boolean {
|
|
try {
|
|
execSync('git rev-parse --is-inside-work-tree', opts)
|
|
return true
|
|
} catch (_) {
|
|
// Ignore errors
|
|
}
|
|
return false
|
|
}
|
|
|
|
function ensureHasDefaultBranch(opts: ExecSyncOptions): boolean {
|
|
try {
|
|
execSync(`git config init.defaultBranch`, opts)
|
|
return true
|
|
} catch (_) {
|
|
// Ignore errros
|
|
}
|
|
return false
|
|
}
|