Packages
livebook
0.18.0
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/compile.livebook_priv.ex
defmodule Mix.Tasks.Compile.LivebookPriv do
@moduledoc false
use Mix.Task
@gzippable_exts ~w(.js .css .txt .text .html .json .svg .eot .ttf)
@impl true
def run(_args) do
app_path = Mix.Project.app_path()
manifest_path = Path.join(app_path, "compile.livebook_priv")
prev_mtime =
case File.read(manifest_path) do
{:ok, binary} -> :erlang.binary_to_term(binary)
{:error, _error} -> nil
end
mtime1 =
compress_and_copy(
"static",
Path.join(app_path, "priv/static"),
prev_mtime
)
mtime2 =
compress_and_copy(
"iframe/priv/static/iframe",
Path.join(app_path, "priv/iframe_static"),
prev_mtime
)
mtime = max(mtime1, mtime2)
File.write!(manifest_path, :erlang.term_to_binary(mtime))
:ok
end
defp compress_and_copy(source_dir, target_dir, prev_mtime) do
source_paths = Path.wildcard(Path.join(source_dir, "**/*"))
mtime = paths_mtime(source_paths)
changed? = prev_mtime == nil or mtime > prev_mtime
if changed? do
File.rm_rf!(target_dir)
for source_path <- source_paths, File.regular?(source_path) do
target_path = Path.join(target_dir, Path.relative_to(source_path, source_dir))
File.mkdir_p!(Path.dirname(target_path))
if Path.extname(source_path) in @gzippable_exts do
content = source_path |> File.read!() |> :zlib.gzip()
File.write!(target_path <> ".gz", content)
else
File.cp!(source_path, target_path)
end
end
Mix.shell().info("Generated #{target_dir} with compressed files from #{source_dir}")
end
mtime
end
defp paths_mtime(paths) do
paths
|> Enum.map(fn path -> File.stat!(path).mtime end)
|> Enum.max()
end
end