@@ -63,6 +63,10 @@ defmodule Mix.Dep.Fetcher do
6363
6464 # If the dependency is not available or we have a lock mismatch
6565 out_of_date? ( dep ) ->
66+ # Mark the dependency as fetched upfront, in case updating
67+ # fails, get interrupted, or corrupted.
68+ mark_as_fetched ( [ dep ] )
69+
6670 new =
6771 if scm . checked_out? ( opts ) do
6872 Mix . shell ( ) . info ( "* Updating #{ format_dep ( dep ) } " )
@@ -73,7 +77,6 @@ defmodule Mix.Dep.Fetcher do
7377 end
7478
7579 if new do
76- mark_as_fetched ( [ dep ] )
7780 dep = put_in ( dep . opts [ :lock ] , new )
7881 { dep , [ app | acc ] , Map . put ( lock , app , new ) }
7982 else
@@ -108,11 +111,13 @@ defmodule Mix.Dep.Fetcher do
108111 [ ]
109112 end
110113
114+ # Mark parents as fetched before we write the lock file.
115+ mark_as_fetched ( parent_deps )
116+
111117 # Merge the new lock on top of the old to guarantee we don't
112118 # leave out things that could not be fetched and save it.
113119 lock = Map . merge ( old_lock , new_lock )
114120 Mix.Dep.Lock . write ( lock , opts )
115- mark_as_fetched ( parent_deps )
116121
117122 # See if any of the deps diverged and abort.
118123 show_diverged! ( Enum . filter ( all_deps , & Mix.Dep . diverged? / 1 ) )
0 commit comments