fireproofsocks

fireproofsocks

Mix hangs when mix.exs contains a git+branch dependency

I’m posting this here for some visibility (and hopefully some solutions) for a strange behavior I encountered.

Running any mix command, including mix help from a certain directory causes mix to hang indefinitely (or at least for 5 or 10 minutes after which I killed it). The culprit turns out to be a particular dependency that references a git branch:

{:mongodb_driver, git: "git@github.com:zookzook/elixir-mongodb-driver.git", branch: "master"}

As soon as I change to specify a regular hex version OR to a specific Git commit, all is well – mix help et al all work so long as my mix.exs looks like this:

{:mongodb_driver, "0.9.1"}
{:mongodb_driver, git: "git@github.com:zookzook/elixir-mongodb-driver.git", ref: "d7c8652b4e66a0031e1a7fe36bc2af5c85cef408"}

Other repos that rely on git repos (e.g. private packages) download fine. I would not have expected mix help to care about what was in the mix.exs file, let along some subtle difference in how a dependency was referenced, but that seems to be what’s happening. Renaming mix.exs makes mix help work, for example.

It looks like maybe the head of the git repo is problematic somehow – if I specify the latest commit from the git log, everything hangs again

{:mongodb_driver,
        git: "git@github.com:zookzook/elixir-mongodb-driver.git", ref: "59aa841cc619f77979cc3027c76e918373685723"},

Can anyone shed light on this?

Most Liked

derek-zhou

derek-zhou

The problem has nothing to do with git but everything to do with the code. Apparently, this commit is bad:

in mix.exs, project/0 calls docs/0, which in turn calls project/0 again, it is an infinite recursion. Did they test their code before the push?

dimitarvp

dimitarvp

It’s very likely your SSH software is waiting for you to confirm you want to add an IP to list of trusted hosts (in the spawned shell when fetching dependencies).

Happened to me many times in Docker deployments.

Suggestion: don’t use the GIT URL that’s usually used for push access. Use the https:// URL variant.

Bonus points: just use the github: "user/library" syntax in mix.exs and forget about this nonsense.

fireproofsocks

fireproofsocks

I’m becoming more and more convinced that this is something to do with the commit that’s on the head of the master branch on the mongodb_driver repo. Is it a merge commit? Why should that be problematic?

Using the HTTP scheme for the URL had no effect. The following still hangs:

# Fails. (mix hangs)
{:mongodb_driver, git: "https://github.com/zookzook/elixir-mongodb-driver.git", branch: "master"}

Using the github syntax fails:

# Fails. (mix hangs)
{:mongodb_driver, github: "zookzook/elixir-mongodb-driver", branch: "master"}

Avoiding the problematic commit by specifying a ref works with the HTTP URL scheme:

# Ok!
{:mongodb_driver, git: "https://github.com/zookzook/elixir-mongodb-driver.git", ref: "d7c8652b4e66a0031e1a7fe36bc2af5c85cef408"}

Likewise, it works with the github syntax:

# Ok!
{:mongodb_driver, github: "zookzook/elixir-mongodb-driver", ref: "d7c8652b4e66a0031e1a7fe36bc2af5c85cef408"}

So something is weird with the 59aa841cc619f77979cc3027c76e918373685723 that’s at the HEAD of the master branch. Somebody with more git foo than me will have to clarify what the problem is. It’s still surprising that this one thing is preventing ALL mix tasks from running.

fireproofsocks

fireproofsocks

I’m willing to give the benefit of the doubt there – we’ve all had days with bad commits :man_shrugging:

I’m still surprised that this entry inside mix.exs effectively shuts down all mix operations. I wouldn’t expect mix.exs to be parsed, let alone the dependencies checked, let alone code in that dependency evaluated. This has proven very educational!

Where Next?

Popular in Questions Top

dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
Kagamiiiii
Student & New to elixir. Nice language. I want to convert a english character, e.g. “a”, which is stored in a variable, to it’s asci...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
mgjohns61585
Could someone help me? I'm making my first elixir program, number guessing game. I can't figure out how to convert the user's guess from ...
New
Fl4m3Ph03n1x
Background Let’s assume I have a typical GenServer that receives messages as requests, does some operation in a DB and returns responses....
New
beno
I will often find my self writing things similar to: case some_value do nil -> something() "" -> something() _ -> someth...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
Mooodi
Given a string, how can I get access to its character by index? Enum.at("my_string", 2) doesn't work. Or rather, not char, but a substr...
New
jc00ke
Expanding on this topic: https://forum.elixirforum.net/t/map-typespec-question/19217 Let’s say I have a map with required and optional k...
New

Other popular topics Top

Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 45766 226
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 49522 488
New
polypush135
As many of you may have realized by now (sorry for all the posts here) I’ve been working on a db problem where I’m trying to aggregate a ...
New
lk-geimfari
What is most correct way to open, read and parse JSON file with poison? For example if we have example.json file in root of some projec...
New
mgjohns61585
Could someone help me? I'm making my first elixir program, number guessing game. I can't figure out how to convert the user's guess from ...
New
danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 27727 240
New
beno
I will often find my self writing things similar to: case some_value do nil -> something() "" -> something() _ -> someth...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New

We're in Beta

About us Mission Statement