根据提交消息进行提交时,如何更改package.json版本?

时间:2019-03-30 01:09:09

标签: git typescript gulp githooks husky

我正在尝试在提交时修改package.json文件的版本,但前提是提交消息的前缀正确:MJ前缀触发补丁冲突,^前缀触发次要补丁颠簸。我写了一个gulp任务来做到这一点,并且它起作用了,唯一的问题是我无法获取当前提交的消息,无法执行任务,然后将package.json添加到提交中并继续。

我尝试在这两个git钩子上运行任务:

pre-commit

问题:

  • 我只能访问此挂钩中的上一条提交消息,而不能访问我们现在正在执行的消息。

有效的方法

  • 我可以修改版本,但只能基于上一个提交消息
  • 我可以上载package.json
  • 然后可以将
  • package.json与其余的一起添加到提交中

prepare-commit-msg

问题:

  • 暂存package.json不会将其添加到提交中

有效的方法

  • 我可以根据当前的提交消息修改版本
  • 我可以暂存package.json

这是我尝试过的两个勾手的任务。我删除了一些噪音以尽量减少噪音。

import * as fs from "fs";
import gulp from "gulp";
import * as shell from "shelljs";
import pkg from "./package.json";

const getCommitMsg = () => fs.readFileSync(".git/COMMIT_EDITMSG", "utf8");
gulp.task(
    BUMP_VERSION.task,
        (done) => {

            const message = getCommitMsg();
            const isMinor = message.startsWith(MINOR_PREFIX);
            const isPatch = message.startsWith(PATCH_PREFIX);

            if (!isMinor && !isPatch) {
                done();
                return exit(EC.NOT_VERSION);
            }

            const newPatch = isPatch ? parseInt(patch) + 1 : 0;
            const newMinor = isMinor ? parseInt(minor) + 1 : minor;

            const newVersion = `${major}.${newMinor}.${newPatch}`;
            const newPkg = Object.assign({}, pkg, { version: newVersion }); // update version
            fs.writeFileSync("./package.json", JSON.stringify(newPkg, null, 4));

            shell.exec("git add ./package.json");

            done();
        },
);

几乎所有内容都取决于提交消息,该提交消息是使用getCommitMsg函数获取的。也许fs.readFileSync(".git/COMMIT_EDITMSG", "utf8");没走吗?也许还有另一条命令我可以运行(使用shelljs)来获取pre-commit挂钩中的当前提交消息?否则,如果我使用prepare-commit-msg钩子,那么我可以获得正确的消息,但是如何将其与其他暂存文件一起添加到当前提交中呢?

1 个答案:

答案 0 :(得分:0)

您可以使用wrapper钩子来读取提交消息,基于该消息执行操作,暂存文件并提交

import * as React from 'react'; import { shallow } from 'enzyme'; const MyComponent = () => (<div title="SomeTitle">some text</div>); const checkProps = (name, obj, propName, expectedvalue) => { it(`${name} should have ${propName} equal to ${expectedvalue}`, () => { expect(obj.wrapper.prop(propName)).to.equal(expectedvalue); // Success! }); }; describe('Component', () => { const obj = {}; beforeEach(() => { obj.wrapper = shallow(<MyComponent />); }); describe('prop checking', () => { checkProps('MyComponent', obj, 'title', 'SomeTitle'); }); });

commit-msg

.git/hooks/commit-msg将增加package.json中的版本(类似于您的gulp任务)

COMMIT_MSG_FILE=$1 node bump.js git add package.json git commit -m "`cat $COMMIT_MSG_FILE`" --no-verify false 将登台修改过的文件

node bump.js猫$ COMMIT_MSG_FILE git add package.json将提交暂存的文件,但跳过钩子(预提交和commit-msg)

git commit -m "将停止原始提交,因为我们已经在最后一行提交了