diff --git a/lib/igniter/project/deps.ex b/lib/igniter/project/deps.ex index f5009d9..288f33b 100644 --- a/lib/igniter/project/deps.ex +++ b/lib/igniter/project/deps.ex @@ -312,7 +312,8 @@ defmodule Igniter.Project.Deps do "github:" <> requirement -> if String.contains?(requirement, "@") do - case String.split(requirement, ["/", "@"], trim: true) do + # adding parts will allow for branch names with forward slashes + case String.split(requirement, ["/", "@"], trim: true, parts: 3) do [org, project, ref] -> [github: "#{org}/#{project}", ref: ref, override: true] diff --git a/lib/mix/tasks/igniter.install.ex b/lib/mix/tasks/igniter.install.ex index 4aba3cf..c9949b1 100644 --- a/lib/mix/tasks/igniter.install.ex +++ b/lib/mix/tasks/igniter.install.ex @@ -13,8 +13,10 @@ defmodule Mix.Tasks.Igniter.Install do * `package@version` - The package will be installed at the specified version. If the version given is generic, like `3.0`, it will be pinned as described above. if it is specific, like `3.0.1`, it will be pinned at that *exact* version with `==`. - * `package@git:git_url` - The package will be installed from the specified git url. - * `package@github:project/repo` - The package will be installed from the specified github repo. + * `package@git:https://project/repo.git@git_ref` - The package will be installed from the + specified git url and `ref` option will be set to `git_ref`. `ref` can be a branch, tag or commit SHA. + * `package@github:project/repo@git_ref` - The package will be installed from the specified + github repo and `ref` option will be set to `git_ref`. `ref` can be a branch, tag or commit SHA. * `package@path:path/to/dep` - The package will be installed from the specified path. ## Switches diff --git a/test/igniter/project/deps_test.exs b/test/igniter/project/deps_test.exs index f6c8808..0aa74ce 100644 --- a/test/igniter/project/deps_test.exs +++ b/test/igniter/project/deps_test.exs @@ -43,4 +43,39 @@ defmodule Igniter.Project.DepsTest do """) end end + + describe "determine_dep_type_and_version" do + test "package" do + {package, version_info} = Igniter.Project.Deps.determine_dep_type_and_version("ash") + assert package == :ash + assert String.contains?(version_info, "~>") == true + end + + test "package@version" do + assert Igniter.Project.Deps.determine_dep_type_and_version("ash@2") == {:ash, "~> 2.0"} + end + + test "package@git" do + assert Igniter.Project.Deps.determine_dep_type_and_version( + "package@git:https://project/repo.git@git_ref" + ) == {:package, [git: "https://project/repo.git", ref: "git_ref", override: true]} + end + + test "package@github" do + assert Igniter.Project.Deps.determine_dep_type_and_version( + "package@github:project/repo@git_ref" + ) == {:package, [github: "project/repo", ref: "git_ref", override: true]} + + assert Igniter.Project.Deps.determine_dep_type_and_version( + "package@github:project/repo@git/ref/with/slashes/work" + ) == + {:package, + [github: "project/repo", ref: "git/ref/with/slashes/work", override: true]} + end + + test "package@path" do + assert Igniter.Project.Deps.determine_dep_type_and_version("package@path:path/to/dep") == + {:package, [path: "path/to/dep", override: true]} + end + end end