Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 21 additions & 18 deletions lib/mix/lib/mix/scm/git.ex
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@ defmodule Mix.SCM.Git do
case opts[:lock] do
{ :git, lock_repo, lock_rev, lock_opts } ->
File.cd!(opts[:dest], fn ->
rev_info = get_rev_info
cond do
lock_repo != opts[:git] -> :outdated
lock_repo != opts[:git] -> :outdated
lock_opts != get_lock_opts(opts) -> :outdated
lock_rev != get_rev -> :mismatch
lock_rev != rev_info[:rev] -> :mismatch
lock_repo != rev_info[:origin] -> :outdated
true -> :ok
end
end)
Expand All @@ -58,6 +60,10 @@ defmodule Mix.SCM.Git do

def update(opts) do
File.cd! opts[:dest], fn ->
# Ensures origin is set the lock repo
location = location(opts[:git])
update_origin(location)

command = "git fetch --force --progress"
if opts[:tag] do
command = command <> " --tags"
Expand Down Expand Up @@ -92,7 +98,12 @@ defmodule Mix.SCM.Git do
end

defp get_lock(opts, fresh) do
lock = if fresh, do: get_rev, else: get_lock_rev(opts[:lock])
lock = if fresh do
rev_info = get_rev_info
rev_info[:rev]
else
get_lock_rev(opts[:lock])
end
{ :git, opts[:git], lock, get_lock_opts(opts) }
end

Expand All @@ -117,23 +128,15 @@ defmodule Mix.SCM.Git do
end
end

defp get_rev do
check_rev System.cmd('git rev-parse --verify --quiet HEAD')
end

defp check_rev([]), do: nil
defp check_rev(list), do: check_rev(list, [])

defp check_rev([h|t], acc) when h in ?a..?f or h in ?0..?9 do
check_rev(t, [h|acc])
end

defp check_rev(fin, acc) when fin == [?\n] or fin == [] do
Enum.reverse(acc) |> iolist_to_binary
defp get_rev_info do
[origin, rev] = System.cmd('git config remote.origin.url && git rev-parse --verify --quiet HEAD')
|> iolist_to_binary
|> String.split("\n", trim: true)
[ origin: origin, rev: rev ]
end

defp check_rev(_, _) do
nil
defp update_origin(location) do
System.cmd('git config remote.origin.url #{location}')
end

defp run_cmd_or_raise(command) do
Expand Down