Commitlint: no such file or directory COMMIT_EDITMSG on new checkout

Created on 3 Mar 2019  路  6Comments  路  Source: conventional-changelog/commitlint

When checking out a repo, there is no COMMIT_EDITMSG file until a new commit is made. In the case of elastic-apm-node, we trigger the commit lint automatically, as part of the test process. This currently means a fresh checkout can't run the tests because @commitling/cli will crash due to being unable to find that file.

Expected Behavior

There was no commit to have a failing message on, so it should not be a failure.

Current Behavior

It crashes with this output:

/home/stephenbelanger/Code/elastic-apm-node/node_modules/@commitlint/cli/lib/cli.js:113
    throw err;
    ^

Error: ENOENT: no such file or directory, open '/home/stephenbelanger/Code/elastic-apm-node/.git/COMMIT_EDITMSG'
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] lint-commit: `test/lint-commits.sh`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] lint-commit script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/stephenbelanger/.npm/_logs/2019-03-03T19_30_57_446Z-debug.log

Affected packages

  • [x] cli
  • [ ] core
  • [ ] prompt
  • [ ] config-angular

Possible Solution

Consider it a "pass" if the file is not found.

Steps to Reproduce (for bugs)

  1. Checkout _any_ repo for the first time, which uses @commitlint/cli
  2. Trigger @commitlint/cli
  3. ???
  4. :cry:

Context

Currently this makes the contributing process painful, as new contributors will always run into this the first time they try to run our tests.

question triage

All 6 comments

Hey @Qard ,
I tried to reproducing your issue by doing:

  1. git clone [email protected]:elastic/apm-agent-nodejs.git (cd in)
  2. npm i
  3. ./node_modules/@commitlint/cli/lib/cli.js

Result:

@commitlint/[email protected] - Lint your commit messages

  [input] reads from stdin if --edit, --env, --from and --to are omitted
  ...

No error. I don't think this is what you mean. Can you provide more info to be able to recreate your issue? Thanks.

Try npm run lint-commit or just commitlint --edit.

The issue here is the unconditional usage of the --edit flag.

An excerpt from commitlint --help reveals the flag triggers commitlint to read from fs instead of stdin or the commit history:

--edit, -e   read last commit message from the specified file or fallbacks to ./.git/COMMIT_EDITMSG

Based on the comment in your linting script you want to call commitlint like this:

commitlint --from=HEAD^1

Let me know if this works for you.

No, that's not exactly what we want, because we specifically want to look at if there is a _new_ commit added locally. If there is, we want to lint it. If there is not, we want to skip it.

Regardless of that behavior though, it seems at least confusing that commitlint --edit just throws a missing file error when it's unable to find that file, leaking implementation details, rather than outputting something more useful, if an error is really the behavior you want there. 馃

Regardless of that behavior though, it seems at least confusing that commitlint --edit just throws a missing file error [...]

You are right, we should add handling for cases where commitlint --edit is called without an edit file being present and communicate clearly what we expect the user to do.

No, that's not exactly what we want, because we specifically want to look at if there is a new commit added locally. If there is, we want to lint it. If there is not, we want to skip it.

Ok - understood. I'd prefer keeping the behaviour of --edit.
I'd consider something like --edit-skip-pristine (very open to name suggestions) which would signal commitlint to back of if the --edit file is not present. Thoughts?

Maybe a separate flag that augments the --edit flag like --edit --skip-empty and then change the default to produce a more _useful_ error when the file is not found?

Was this page helpful?
0 / 5 - 0 ratings