feat(composer): replicate WorkBuddy branch label and context usage (TODO 21)

This commit is contained in:
xiaohan.yuan committed 2026-10-17 08:15:19 +08:00
1 parent cb8a7e6466
commit bde041c12d
21 files changed
+1350 -12

No files matched your search

+115
View File
@@ -0,0 +1,115 @@
const assert = require('node:assert/strict')
const { execFileSync } = require('node:child_process')
const fs = require('node:fs/promises')
const os = require('node:os')
const path = require('node:path')
const { build } = require('esbuild')
const failures = []
function runGit(cwd, ...args) {
return execFileSync('git', ['-C', cwd, ...args], {
windowsHide: true,
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'pipe']
}).trim()
}
async function check(name, verify) {
try {
await verify()
console.log(`PASS ${name}`)
} catch (error) {
failures.push({ name, error })
console.error(`FAIL ${name}: ${error instanceof Error ? error.message : String(error)}`)
}
}
async function main() {
const repositoryRoot = path.resolve(__dirname, '..')
const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'ycode-git-branch-'))
const bundlePath = path.join(repositoryRoot, '.tmp', 'git-branch.cjs')
try {
await fs.mkdir(path.dirname(bundlePath), { recursive: true })
await build({
entryPoints: [path.join(repositoryRoot, 'src/main/git.ts')],
bundle: true,
platform: 'node',
format: 'cjs',
outfile: bundlePath,
logLevel: 'silent'
})
const { readGitBranch } = require(bundlePath)
const repoPath = path.join(tempRoot, 'repo')
const emptyRepoPath = path.join(tempRoot, 'empty-repo')
const emptyPath = path.join(tempRoot, 'empty')
const missingPath = path.join(tempRoot, 'missing')
await Promise.all([
fs.mkdir(repoPath),
fs.mkdir(emptyRepoPath),
fs.mkdir(emptyPath)
])
runGit(repoPath, 'init', '-b', 'master')
runGit(repoPath, 'config', 'user.name', 'YCode Test')
runGit(repoPath, 'config', 'user.email', 'ycode-test@example.invalid')
await fs.writeFile(path.join(repoPath, 'README.md'), 'git branch verification\n', 'utf8')
runGit(repoPath, 'add', 'README.md')
runGit(repoPath, 'commit', '-m', 'initial commit')
await check('initialized master branch', async () => {
const result = await readGitBranch(repoPath)
assert.deepEqual(result, { repo: true, branch: 'master', detached: false, head: null })
})
runGit(repoPath, 'checkout', '-b', 'feature/x')
await check('feature branch name', async () => {
const result = await readGitBranch(repoPath)
assert.equal(result.repo, true)
assert.equal(result.branch, 'feature/x')
assert.equal(result.detached, false)
assert.equal(result.head, null)
})
runGit(repoPath, 'checkout', '--detach')
const expectedHead = runGit(repoPath, 'rev-parse', '--short', 'HEAD')
await check('detached HEAD short SHA', async () => {
const result = await readGitBranch(repoPath)
assert.deepEqual(result, { repo: true, branch: null, detached: true, head: expectedHead })
})
await check('empty directory is outside Git', async () => {
const result = await readGitBranch(emptyPath)
assert.deepEqual(result, { repo: false, branch: null, detached: false, head: null })
})
await check('missing path is outside Git', async () => {
const result = await readGitBranch(missingPath)
assert.deepEqual(result, { repo: false, branch: null, detached: false, head: null })
})
runGit(emptyRepoPath, 'init', '-b', 'master')
await check('initialized repository without commits', async () => {
const result = await readGitBranch(emptyRepoPath)
// An unborn HEAD still resolves through symbolic-ref to the initialized branch.
assert.deepEqual(result, { repo: true, branch: 'master', detached: false, head: null })
})
} finally {
await fs.rm(tempRoot, { recursive: true, force: true })
}
if (failures.length) {
console.error(`GIT_BRANCH_FAIL (${failures.length})`)
for (const { name } of failures) console.error(`- ${name}`)
process.exitCode = 1
} else {
console.log('GIT_BRANCH_PASS')
}
}
main().catch((error) => {
console.error(`GIT_BRANCH_FAIL: ${error instanceof Error ? error.stack ?? error.message : String(error)}`)
process.exitCode = 1
})