UNPKG

gchcg-cli-dev

Version:
1 lines 2.88 kB
const Command=require("./command"),log=require("./log"),inquirer=require("inquirer").default,SimpleGit=require("simple-git"),path=require("path"),fs=require("fs"),fse=require("fs-extra");class PushCommand extends Command{async init(){this.type=this._cmd.type,this.message=this._cmd.message}async exec(){const e=(new Date).getTime();try{let e;if(this.prepare(),this.git=SimpleGit(this.projectInfo.dir),log.info("代码冲突检查"),e=await this.git.status(),e.conflicted.length>0)throw new Error("当前代码存在冲突,请手动处理合并后再试!");if(log.success("代码冲突检查通过"),e=await this.git.status(),e.not_added.length>0||e.created.length>0||e.deleted.length>0||e.modified.length>0||e.renamed.length>0){await this.git.add(e.not_added),await this.git.add(e.created),await this.git.add(e.deleted),await this.git.add(e.modified),await this.git.add(e.renamed);const t=require("child_process").execSync("git config user.name").toString().trim();if(!t)throw new Error('git用户名不存在,请先执行git config --global user.name "Your Name"');let i=["feat","fix","docs","style","refactor","perf","test","build","ci","chore","revert"].includes(this.type)?this.type:"",s=this.message;const a={type:"list",name:"type",message:"请选择commit类型",default:i||"fix",choices:[{name:"新功能(feat)",value:"feat"},{name:"修复bug(fix)",value:"fix"},{name:"文档变更(docs)",value:"docs"},{name:"无关代码的格式(style)",value:"style"},{name:"重构(refactor)",value:"refactor"},{name:"优化性能(perf)",value:"perf"},{name:"增加或更新测试(test)",value:"test"},{name:"构建系统或外部依赖更改(build)",value:"build"},{name:"CI配置或脚本变动(ci)",value:"ci"},{name:"不影响代码的其余变动(chore)",value:"chore"},{name:"回滚(revert)",value:"revert"}]},r={type:"text",name:"message",message:"请输入commit信息:"},n=[];if(i||n.push(a),s||n.push(r),s&&1===n.length)i=(await inquirer.prompt(n)).type;else for(;!s;){const e=await inquirer.prompt(n);i=e.type,i&&n.shift(),s=e.message}await this.git.commit(`${i}(${t}):${s}`),log.success("本次commit提交成功");const o=await this.git.branch();await this.git.push("origin",o.current),log.success("本次push推送成功")}else log.success("本次没有需要commit的文件")}catch(e){log.error(e.message)}log.verbose("本次执行指令耗时:"+((new Date).getTime()-e)/1e3+"秒")}prepare(){const e=process.cwd(),t=path.resolve(e,"package.json");if(!fs.existsSync(t))throw new Error("package.json不存在!");const i=fse.readJsonSync(t),{name:s,version:a}=i;if(log.verbose("package.json 检查必填信息 name, version"),!s||!a)throw new Error("package.json信息不全,请检查是否存在name、version!");this.projectInfo={name:s,version:a,dir:e}}}function init(e){return new PushCommand(e)}module.exports=init,module.exports.PushCommand=PushCommand;