| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import path from 'node:path'
- import os from 'node:os'
- import { promises as fs } from 'node:fs'
- import { execFile } from 'node:child_process'
- import { promisify } from 'node:util'
- import { CacheManager } from '../../src/cache/index.js'
- const execFileAsync = promisify(execFile)
- /**
- * 造 git 书仓库 + 缓存。files={相对路径:内容}。commits=[{message,files}] 逐个额外提交(用于造 ch(N) 历史)。
- */
- export async function makeGitBook(files, { commits = [] } = {}) {
- const root = await fs.mkdtemp(path.join(os.tmpdir(), 'wnw-sm-'))
- const git = (a) => execFileAsync('git', a, { cwd: root })
- await git(['init', '-q'])
- await git(['config', 'user.email', 't@example.com'])
- await git(['config', 'user.name', 'test'])
- await fs.writeFile(path.join(root, '.gitignore'), '.cache/\n工作区/\n', 'utf8')
- await writeAll(root, files)
- await git(['add', '-A'])
- await git(['commit', '-q', '-m', 'init'])
- for (const c of commits) {
- await writeAll(root, c.files)
- await git(['add', '-A'])
- await git(['commit', '-q', '-m', c.message])
- }
- const dbDir = await fs.mkdtemp(path.join(os.tmpdir(), 'wnw-sm-db-'))
- const cache = new CacheManager(path.join(dbDir, 'index.db'))
- await cache.ensureReady(root)
- return {
- root,
- git,
- ctx: { repoPath: root, cache },
- cleanup: async () => {
- await cache.close()
- await fs.rm(root, { recursive: true, force: true })
- await fs.rm(dbDir, { recursive: true, force: true })
- },
- }
- }
- async function writeAll(root, files = {}) {
- for (const [rel, content] of Object.entries(files)) {
- const full = path.join(root, rel)
- await fs.mkdir(path.dirname(full), { recursive: true })
- await fs.writeFile(full, content, 'utf8')
- }
- }
- export const chapter = (n, body = '正文。', vol = 1) =>
- `---\n章号: ${n}\n标题: 第${n}章\n卷: ${vol}\n字数: 100\n章定位: 推进\n钩子: 危机钩-强\n情绪定位: 铺垫\n---\n${body}`
|