       set_compiler_opts(project, opts, [])
     end)
 
+    # The Mix.Deps.Lock keeps all the project dependencies. Since Elixir
+    # is a dependency itself, we need to touch the lock so the current
+    # Elixir version, used to compile the files above, is properly stored.
     unless result == :noop, do: Mix.Deps.Lock.touch
     result
   end

      cond do
        stale != [] ->
          on_start.()
          { :ok, pid } = :gen_server.start_link(__MODULE__, entries, [])

          try do

    def files_to_path(manifest, stale, all, compile_path, on_start) do
      all_entries = read_manifest(manifest)

      # Each manifest entry that is not in all must be removed
      entries = lc { beam, _m, source, _d } = entry inlist all_entries,
                   is_in_list_or_remove(source, all, beam),
                   do: entry

      stale =
        if Enum.any?(stale, &not(&1 in all)) do
          # Any stale file not in all triggers whole compilation
          # It means a file was removed
          all
        else
          # Otherwise compile only stale. Each entry in all
          # that's not in the manifest is also considered stale
          stale ++ lc i inlist all,
                      not Enum.any?(entries, fn { _b, _m, s, _d } -> s == i end),
                      do: i
