@cliz/gpm
Version:
Git Project Manager
82 lines (81 loc) • 3.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const cli_1 = require("@cliz/cli");
const core_1 = require("../core");
exports.default = (0, cli_1.defineSubCommand)((createCommand) => {
return createCommand('Sync a project')
.argument('[repo]', 'The Git Project')
.action(async ({ args }) => {
try {
const repo = args.repo;
//
await core_1.default.prepare();
// sync local project
if (!repo) {
return await core_1.default.devtools.sync();
}
const projectConfig = core_1.default.config.get('project');
if (!(projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.workdir)) {
await setupConfig(core_1.default);
}
await core_1.default.project.prepare();
//
const projects = await core_1.default.project.search(repo);
let project = projects[0];
if (projects.length > 1) {
const answers = await cli_1.inquirer.prompt([
{
name: 'projectId',
type: 'list',
message: 'Select project ?',
choices: projects.map((e) => ({ name: e.id, value: e.id })),
validate: (t) => !!t,
},
]);
project = projects.find((e) => answers.projectId === e.id);
}
if (!project) {
return console.error(`project ${repo} not found`);
}
const answers = await cli_1.inquirer.prompt([
{
name: 'ok',
type: 'confirm',
message: `Confirm to sync ${cli_1.api.color.success(project.id)}?`,
required: true,
default: true,
},
]);
if (answers.ok) {
console.info(`Syncing repository: ${cli_1.api.color.success(project.id)}`);
await core_1.default.project.sync(project.provider, project.owner, project.name);
console.info(`Success to sync ${cli_1.api.color.success(project.id)} at ${cli_1.api.color.success(project.path)}`);
await cli_1.api.clipboard
.copy(project.path)
.then(() => console.info(`Copied (${cli_1.api.color.success(project.path)}) to clipboard`))
.catch(() => console.error(`Failed to copied (${cli_1.api.color.success(project.path)}) to clipboard`));
}
}
catch (error) {
console.error(error);
}
});
});
async function setupConfig(gpm) {
const answers = await cli_1.inquirer.prompt([
{
name: 'workdir',
type: 'text',
message: 'Input Your Work Directory ?',
default: cli_1.api.path.homedir('code'),
validate: (t) => !!t,
},
]);
let workdir = answers.workdir;
if (!workdir.startsWith('/')) {
workdir = cli_1.api.path.homedir(workdir);
}
gpm.config.set('project', {
workdir,
});
}