Packages
mob_dev
0.5.16
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.37
0.3.35
0.3.34
0.3.33
0.3.28
0.3.26
0.3.23
0.3.21
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.18
0.2.17
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
Development tooling for the Mob mobile framework
Current section
Files
Jump to
Current section
Files
lib/mob_dev/source_watch.ex
defmodule MobDev.SourceWatch do
@moduledoc false
# Helpers shared by `mix mob.watch` and `MobDev.Server.WatchWorker` —
# both need a snapshot of `lib/**/*.ex` mtimes plus a diff against a
# previous snapshot. Each had its own copy until ex_dna flagged them.
@doc """
Take a snapshot of every `lib/**/*.ex` file's mtime (posix seconds).
Files that fail to stat get an mtime of 0.
"""
@spec snapshot() :: %{Path.t() => integer()}
def snapshot do
Map.new(Path.wildcard("lib/**/*.ex"), fn path ->
mtime =
case File.stat(path, time: :posix) do
{:ok, %{mtime: t}} -> t
_ -> 0
end
{path, mtime}
end)
end
@doc """
Return the file paths whose mtime in `current` differs from `old`.
"""
@spec diff(map(), map()) :: [Path.t()]
def diff(old, current) do
current
|> Enum.filter(fn {path, mtime} -> Map.get(old, path) != mtime end)
|> Enum.map(&elem(&1, 0))
end
end