@@ -29,11 +29,12 @@ defmodule Mix.SCM.Git do
2929 case opts [ :lock ] do
3030 { :git , lock_repo , lock_rev , lock_opts } ->
3131 File . cd! ( opts [ :dest ] , fn ->
32+ rev_info = get_rev_info
3233 cond do
33- lock_repo != opts [ :git ] -> :outdated
34+ lock_repo != opts [ :git ] -> :outdated
3435 lock_opts != get_lock_opts ( opts ) -> :outdated
35- lock_rev != get_rev -> :mismatch
36- lock_repo != get_origin -> :outdated
36+ lock_rev != rev_info [ :rev ] -> :mismatch
37+ lock_repo != rev_info [ :origin ] -> :outdated
3738 true -> :ok
3839 end
3940 end )
@@ -97,7 +98,12 @@ defmodule Mix.SCM.Git do
9798 end
9899
99100 defp get_lock( opts, fresh) do
100- lock = if fresh, do: get_rev , else: get_lock_rev ( opts [ :lock ] )
101+ lock = if fresh do
102+ rev_info = get_rev_info
103+ rev_info [ :rev ]
104+ else
105+ get_lock_rev ( opts [ :lock ] )
106+ end
101107 { :git , opts [ :git ] , lock , get_lock_opts ( opts ) }
102108 end
103109
@@ -122,29 +128,11 @@ defmodule Mix.SCM.Git do
122128 end
123129 end
124130
125- defp get_rev do
126- check_rev System . cmd ( 'git rev-parse --verify --quiet HEAD' )
127- end
128-
129- defp check_rev ( [ ] ) , do: nil
130- defp check_rev ( list ) , do: check_rev ( list , [ ] )
131-
132- defp check_rev ( [ h | t ] , acc ) when h in ?a .. ?f or h in ?0 .. ?9 do
133- check_rev ( t , [ h | acc ] )
134- end
135-
136- defp check_rev ( fin , acc ) when fin == [ ?\n ] or fin == [ ] do
137- Enum . reverse ( acc ) |> iolist_to_binary
138- end
139-
140- defp check_rev ( _ , _ ) do
141- nil
142- end
143-
144- defp get_origin do
145- System . cmd ( 'git config remote.origin.url' )
146- |> :string . strip ( :right , ?\n )
147- |> iolist_to_binary
131+ defp get_rev_info do
132+ [ origin, rev] = System . cmd ( 'git config remote.origin.url && git rev-parse --verify --quiet HEAD' )
133+ |> iolist_to_binary
134+ |> String . split ( "\n " , trim: true )
135+ [ origin: origin , rev: rev ]
148136 end
149137
150138 defp update_origin ( location ) do
0 commit comments