add create file for sync
This commit is contained in:
parent
f26bc59e29
commit
aab0662fbc
@ -88,29 +88,3 @@ const task3 = {
|
|||||||
};
|
};
|
||||||
silkyCommand.addTask(task3);
|
silkyCommand.addTask(task3);
|
||||||
|
|
||||||
// ===========================
|
|
||||||
const testTask = {
|
|
||||||
description: '测试',
|
|
||||||
command: 'npm i -g nodemon --registry=https://registry.npmmirror.com',
|
|
||||||
type: 'npm-install',
|
|
||||||
before: 'nodemon -v',
|
|
||||||
beforeCheck: '.',
|
|
||||||
key: 'test-task',
|
|
||||||
};
|
|
||||||
silkyCommand.addTask(testTask);
|
|
||||||
|
|
||||||
const runTask1 = async () => {
|
|
||||||
const tasksCommand = new TasksCommand();
|
|
||||||
tasksCommand.addTask(init2);
|
|
||||||
const res = tasksCommand.runTask(init2.description);
|
|
||||||
console.log(res);
|
|
||||||
};
|
|
||||||
// runTask1();
|
|
||||||
const runTestTask = async () => {
|
|
||||||
const tasksCommand = new TasksCommand();
|
|
||||||
tasksCommand.addTask(testTask);
|
|
||||||
const res = tasksCommand.runTask(testTask);
|
|
||||||
console.log(res);
|
|
||||||
return res;
|
|
||||||
};
|
|
||||||
// runTestTask();
|
|
||||||
|
@ -47,6 +47,12 @@ export class SyncBase {
|
|||||||
return {} as Config;
|
return {} as Config;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
getRelativeFile(filename?: string) {
|
||||||
|
if (!filename) return false;
|
||||||
|
const dir = this.#dir;
|
||||||
|
const file = path.join(dir, filename);
|
||||||
|
return { relative: path.relative(dir, file), absolute: file };
|
||||||
|
}
|
||||||
async canDone(syncType: SyncConfigType, type?: SyncConfigType) {
|
async canDone(syncType: SyncConfigType, type?: SyncConfigType) {
|
||||||
if (syncType === 'sync') return true;
|
if (syncType === 'sync') return true;
|
||||||
return syncType === type;
|
return syncType === type;
|
||||||
|
@ -13,10 +13,12 @@ const command = new Command('sync')
|
|||||||
.action(() => {
|
.action(() => {
|
||||||
console.log('同步项目');
|
console.log('同步项目');
|
||||||
});
|
});
|
||||||
|
|
||||||
const syncUpload = new Command('upload')
|
const syncUpload = new Command('upload')
|
||||||
.option('-d --dir <dir>', '配置目录')
|
.option('-d --dir <dir>', '配置目录')
|
||||||
.option('-s --share <share>', '共享设置')
|
.option('-s --share <share>', '共享设置')
|
||||||
.option('-c --config <config>', '配置文件的名字', 'kevisual.json')
|
.option('-c --config <config>', '配置文件的名字', 'kevisual.json')
|
||||||
|
.option('-f --file <file>', '操作的对应的文件名')
|
||||||
.description('上传项目')
|
.description('上传项目')
|
||||||
.action(async (opts) => {
|
.action(async (opts) => {
|
||||||
console.log('上传项目');
|
console.log('上传项目');
|
||||||
@ -31,6 +33,7 @@ const syncUpload = new Command('upload')
|
|||||||
if (opts.share) {
|
if (opts.share) {
|
||||||
meta.share = opts.share;
|
meta.share = opts.share;
|
||||||
}
|
}
|
||||||
|
const filepath = sync.getRelativeFile(opts.file);
|
||||||
for (const item of syncList) {
|
for (const item of syncList) {
|
||||||
if (!item.auth || !item.exist) {
|
if (!item.auth || !item.exist) {
|
||||||
nodonwArr.push(item);
|
nodonwArr.push(item);
|
||||||
@ -40,6 +43,9 @@ const syncUpload = new Command('upload')
|
|||||||
nodonwArr.push(item);
|
nodonwArr.push(item);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (filepath && item.filepath !== filepath.absolute) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const res = await upload({
|
const res = await upload({
|
||||||
token,
|
token,
|
||||||
file: fs.readFileSync(item.filepath),
|
file: fs.readFileSync(item.filepath),
|
||||||
@ -59,24 +65,29 @@ const syncUpload = new Command('upload')
|
|||||||
}
|
}
|
||||||
logger.debug(res);
|
logger.debug(res);
|
||||||
}
|
}
|
||||||
if (nodonwArr.length) {
|
if (nodonwArr.length && !filepath) {
|
||||||
logger.warn('以下文件未上传\n', nodonwArr.map((item) => item.key).join(','));
|
logger.warn('以下文件未上传\n', nodonwArr.map((item) => item.key).join(','));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const syncDownload = new Command('download')
|
const syncDownload = new Command('download')
|
||||||
.option('-d --dir <dir>', '配置目录')
|
.option('-d --dir <dir>', '配置目录')
|
||||||
.option('-c --config <config>', '配置文件的名字', 'kevisual.json')
|
.option('-c --config <config>', '配置文件的名字', 'kevisual.json')
|
||||||
|
.option('-f --file <file>', '操作的对应的文件名')
|
||||||
.description('下载项目')
|
.description('下载项目')
|
||||||
.action(async (opts) => {
|
.action(async (opts) => {
|
||||||
const sync = new SyncBase({ dir: opts.dir, baseURL: baseURL, configFilename: opts.config });
|
const sync = new SyncBase({ dir: opts.dir, baseURL: baseURL, configFilename: opts.config });
|
||||||
const syncList = await sync.getSyncList();
|
const syncList = await sync.getSyncList();
|
||||||
logger.debug(syncList);
|
logger.debug(syncList);
|
||||||
const nodonwArr: (typeof syncList)[number][] = [];
|
const nodonwArr: (typeof syncList)[number][] = [];
|
||||||
|
const filepath = sync.getRelativeFile(opts.file);
|
||||||
for (const item of syncList) {
|
for (const item of syncList) {
|
||||||
if (!sync.canDone(item.type, 'download')) {
|
if (!sync.canDone(item.type, 'download')) {
|
||||||
nodonwArr.push(item);
|
nodonwArr.push(item);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (filepath && item.filepath !== filepath.absolute) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const hash = sync.getHash(item.filepath);
|
const hash = sync.getHash(item.filepath);
|
||||||
const { content, status } = await fetchLink(item.url, { setToken: item.auth, returnContent: true, hash });
|
const { content, status } = await fetchLink(item.url, { setToken: item.auth, returnContent: true, hash });
|
||||||
if (status === 200) {
|
if (status === 200) {
|
||||||
@ -89,7 +100,7 @@ const syncDownload = new Command('download')
|
|||||||
logger.error('下载失败', item.key, chalk.red(item.url));
|
logger.error('下载失败', item.key, chalk.red(item.url));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (nodonwArr.length) {
|
if (nodonwArr.length && !filepath) {
|
||||||
logger.warn('以下文件未下载', nodonwArr.map((item) => item.key).join(','));
|
logger.warn('以下文件未下载', nodonwArr.map((item) => item.key).join(','));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -106,9 +117,36 @@ const syncList = new Command('list')
|
|||||||
logger.info(chalk.blue(item.key), chalk.gray(item.type), chalk.green(item.url));
|
logger.info(chalk.blue(item.key), chalk.gray(item.type), chalk.green(item.url));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
const syncCreateList = new Command('create')
|
||||||
|
.option('-d --dir <dir>', '配置目录')
|
||||||
|
.option('-c --config <config>', '配置文件的名字', 'kevisual.json')
|
||||||
|
.option('-o --output <output>', '输出文件')
|
||||||
|
.description('创建文件')
|
||||||
|
.action(async (opts) => {
|
||||||
|
const sync = new SyncBase({ dir: opts.dir, baseURL: baseURL, configFilename: opts.config });
|
||||||
|
const syncList = await sync.getSyncList();
|
||||||
|
logger.debug(syncList);
|
||||||
|
logger.info('同步列表\n');
|
||||||
|
let newSync = {};
|
||||||
|
syncList.forEach((item) => {
|
||||||
|
logger.info(chalk.blue(item.key), chalk.gray(item.type), chalk.green(item.url));
|
||||||
|
newSync[item.key] = item.url;
|
||||||
|
});
|
||||||
|
const newJson = { ...sync.config };
|
||||||
|
newJson.sync = newSync;
|
||||||
|
const filepath = sync.getRelativeFile(opts.output);
|
||||||
|
if (filepath) {
|
||||||
|
logger.debug('输出文件', filepath);
|
||||||
|
fs.writeFileSync(filepath.absolute, JSON.stringify(newJson, null, 2));
|
||||||
|
} else {
|
||||||
|
logger.info('输出内容\n');
|
||||||
|
logger.info(newJson);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
command.addCommand(syncUpload);
|
command.addCommand(syncUpload);
|
||||||
command.addCommand(syncDownload);
|
command.addCommand(syncDownload);
|
||||||
command.addCommand(syncList);
|
command.addCommand(syncList);
|
||||||
|
command.addCommand(syncCreateList);
|
||||||
|
|
||||||
app.addCommand(command);
|
app.addCommand(command);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user