@cliz/gpm
Version:
Git Project Manager
79 lines (78 loc) • 2.95 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, { api }) => {
return createCommand('Add an project')
.argument('<url>', 'The Git Project Url')
.option('-d, --depth <depth>', 'Specify git repo clone depth', {
validator: (value) => {
if (!value) {
throw new Error(`depth is required in -d, --depth <depth>`);
}
if (!/\d+/.test(value)) {
throw new Error(`depth must be a number`);
}
return +value;
},
})
.action(async ({ args, options }) => {
try {
const url = args.url;
console.info(`Adding repository: ${api.color.success(url)}`);
//
await core_1.default.prepare();
const projectConfig = core_1.default.config.get('project');
if (!(projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.workdir)) {
await setupConfig(core_1.default, api);
}
await core_1.default.project.prepare();
//
const project = core_1.default.project.get(url);
// console.info(`Cloning into: ${api.color.success(project.path)}`);
if (!(await core_1.default.project.validate(url))) {
console.error(`Failed to add: ${api.color.error(url)} is not a valid project`);
return;
}
try {
await core_1.default.project.add(url, options);
console.info(`Project at path: ${api.color.success(project.path)}`);
}
catch (error) {
if (/found/i.test(error.message)) {
console.error(`Found at path: ${api.color.error(project.path)}`);
}
else {
throw error;
}
}
finally {
await api.clipboard
.copy(project.path)
.then(() => console.info(`Copied (${api.color.success(project.path)}) to clipboard`))
.catch(() => console.error(`Failed to copied (${api.color.success(project.path)}) to clipboard`));
}
}
catch (error) {
console.error(error);
}
});
});
async function setupConfig(gpm, api) {
const answers = await cli_1.inquirer.prompt([
{
name: 'workdir',
type: 'text',
message: 'Input Your Work Directory ?',
default: api.path.homedir('code'),
validate: (t) => !!t,
},
]);
let workdir = answers.workdir;
if (!workdir.startsWith('/')) {
workdir = api.path.homedir(workdir);
}
gpm.config.set('project', {
workdir,
});
}