branch-commit-compare
Version:
Git branch comparison tool
77 lines (66 loc) • 1.98 kB
JavaScript
const os = require("os");
const path = require("path");
const fs = require("fs");
function resolveAppDataDir() {
const appName = "branch-commit-compare";
if (process.platform === "darwin") {
return path.join(
os.homedir(),
"Library",
"Application Support",
appName
);
}
if (process.platform === "win32") {
const appData =
process.env.APPDATA ||
path.join(os.homedir(), "AppData", "Roaming");
return path.join(appData, appName);
}
return path.join(
process.env.XDG_CONFIG_HOME || path.join(os.homedir(), ".config"),
appName
);
}
// 定义应用数据目录 - 使用用户级应用目录,避免污染当前仓库
const APP_DATA_DIR = resolveAppDataDir();
// 确保数据目录存在
function ensureDataDir() {
try {
if (!fs.existsSync(APP_DATA_DIR)) {
fs.mkdirSync(APP_DATA_DIR, { recursive: true, mode: 0o755 });
console.log(`Created data directory: ${APP_DATA_DIR}`);
}
// 确保目录有正确的权限
fs.chmodSync(APP_DATA_DIR, 0o755);
// 初始化必要的文件
const files = ["commit-ignore.json", "commit-remarks.json"];
files.forEach((file) => {
const filePath = path.join(APP_DATA_DIR, file);
if (!fs.existsSync(filePath)) {
// 对于commit-ignore.json,初始化为对象格式以保持兼容性
const initialData =
file === "commit-ignore.json"
? { ignoredCommits: [] }
: { commitRemarks: [] };
fs.writeFileSync(filePath, JSON.stringify(initialData, null, 2), {
mode: 0o644,
});
console.log(`Initialized ${file}`);
}
});
} catch (error) {
console.error(`Error ensuring data directory: ${error.message}`);
throw error;
}
}
// 获取数据文件路径
function getDataFilePath(filename) {
ensureDataDir();
return path.join(APP_DATA_DIR, filename);
}
module.exports = {
APP_DATA_DIR,
getDataFilePath,
ensureDataDir,
};