refactor(lib): 開啟目標專案 git repo 的那幾行收進 lib
「路徑不是 repo 就報 NOT_A_GIT_REPO」加上「把 cwd 綁進 runGit」原本在 branch-prep 與 commit-split 各寫一份。錯誤碼要一致,而這件事寫第三遍就該收起來了。
This commit is contained in:
@@ -23,9 +23,7 @@
|
|||||||
* node scripts/branch-prep.js --source <來源分支> --slug <英文-kebab>
|
* node scripts/branch-prep.js --source <來源分支> --slug <英文-kebab>
|
||||||
* [--type feat] [--path <目標專案>] [--dry-run]
|
* [--type feat] [--path <目標專案>] [--dry-run]
|
||||||
*/
|
*/
|
||||||
import { existsSync } from 'node:fs';
|
import { ScriptError, main, openGitRepo, parseFlags } from './lib.js';
|
||||||
import { join } from 'node:path';
|
|
||||||
import { ScriptError, main, parseFlags, runGit } from './lib.js';
|
|
||||||
|
|
||||||
/** 需求描述的長度上限。超過就換一個短的說法,不要靠截斷。 */
|
/** 需求描述的長度上限。超過就換一個短的說法,不要靠截斷。 */
|
||||||
const SLUG_MAX = 40;
|
const SLUG_MAX = 40;
|
||||||
@@ -43,11 +41,7 @@ main(async () => {
|
|||||||
const source = flags.source;
|
const source = flags.source;
|
||||||
const branch = buildBranchName(source, flags.slug, flags.type);
|
const branch = buildBranchName(source, flags.slug, flags.type);
|
||||||
|
|
||||||
if (!existsSync(join(path, '.git'))) {
|
const git = openGitRepo(path);
|
||||||
throw new ScriptError('NOT_A_GIT_REPO', `${path} 不是 git repo;請用 --path 指向目標專案的根目錄`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const git = (...args) => runGit(args, { cwd: path });
|
|
||||||
checkClean(git, path);
|
checkClean(git, path);
|
||||||
|
|
||||||
const hasOrigin = git('remote').split('\n').includes('origin');
|
const hasOrigin = git('remote').split('\n').includes('origin');
|
||||||
|
|||||||
@@ -379,6 +379,22 @@ export function runGit(args, { cwd } = {}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 開一個目標專案的 git repo,回傳綁在它身上的執行器。
|
||||||
|
*
|
||||||
|
* 碰目標專案 git 的腳本都從這裡進去:路徑不是 repo 時的錯誤碼要一致,
|
||||||
|
* 而「把 cwd 綁進 runGit」這件事寫第三遍就該收起來了。
|
||||||
|
*
|
||||||
|
* @param {string} path 目標專案的根目錄
|
||||||
|
* @returns {(...args: string[]) => string} 綁定 cwd 的 git 執行器
|
||||||
|
*/
|
||||||
|
export function openGitRepo(path) {
|
||||||
|
if (!existsSync(join(path, '.git'))) {
|
||||||
|
throw new ScriptError('NOT_A_GIT_REPO', `${path} 不是 git repo;請用 --path 指向目標專案的根目錄`);
|
||||||
|
}
|
||||||
|
return (...args) => runGit(args, { cwd: path });
|
||||||
|
}
|
||||||
|
|
||||||
// ── 四層前置檢查 ───────────────────────────────────────────────────
|
// ── 四層前置檢查 ───────────────────────────────────────────────────
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user