dwyl / dwyl/elixir-pre-commit

"Not a git repository: '.git'" when using git dependent versioning

Open
#29 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Elixir
Stars
46
Forks
11
PR merge metrics
No merged PRs in 30d

Description

This is may not be directly related to the project, but I figure others could wind up in a similar pickle, and I haven't been able to find a solution to this yet, so I thought I'd reach out here.

For [this umbrella-project](https://github.com/BuddyGG/buddy_matching/tree/umbrella_conversion) using edeliver for deployment, I've had to implement auto revisioning inside each app's `mix.exs`. This is done as shown by the edeliver project [here](https://github.com/edeliver/edeliver/wiki/Umbrella-Projects#autoversioning).

My pre_commit hook is configured to run `test`, `format --check-formatted` and `credo`,
and this works fine when I call `mix pre_commit`, however when the pre_commit is triggered by actually using `git commit`,
the following happens:

```
...
fatal: Not a git repository: '.git'
fatal: Not a git repository: '.git'
fatal: Not a git repository: '.git'
fatal: Not a git repository: '.git'
...
```
This basically causes the code:
```elixir
def auto_version() do
{rev, _} = System.cmd("git", ["rev-parse", "--short", "HEAD"])
"1.0.0+#{String.trim_trailing(rev)}"
end
```

To cause an error, resulting in a bad formatting of the SemVer version, causing mix to throw the error:
`** (Mix) Expected :version to be a SemVer version, got: "1.0.0+"`.
and for the pre_commit to fail.

Now the bit which I cannot wrap my head around, is that when I add an `IO.inspect(File.cwd!())` to the auto_version/0 function, it returns the folder of the individual `mix.exs`-files, all of which should be under the git directory, and from which I can open IEx and call the function without error myself.

Similarly, if i manually run the hook `sh .git/hooks/pre-commit` from the directory from which I invoke the git commit, it also works.

Any ideas for a solution to this?

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the auto_version/0 code in each app's mix.exs and the .git/hooks/pre-commit entry point. Compare the working mix pre_commit and manually invoked hook with an actual git commit, checking the working directory and Git context. Done means the hook runs without the '.git' errors and produces a valid SemVer revision.

Written by the indexing model from the issue text.

Assessment

Tech stack
elixir, git
Domain
developer-experience, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.