Packages
igniter
0.7.2
0.8.2
0.8.1
0.8.0
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.30
0.6.29
0.6.28
0.6.27
0.6.26
0.6.25
0.6.24
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.52
0.5.51
0.5.50
0.5.49
0.5.48
0.5.47
0.5.46
0.5.45
0.5.44
0.5.43
0.5.42
0.5.41
0.5.40
0.5.39
0.5.38
0.5.37
0.5.36
0.5.35
0.5.34
0.5.33
0.5.32
0.5.31
0.5.30
0.5.29
0.5.28
0.5.27
0.5.26
0.5.25
0.5.24
0.5.23
0.5.22
0.5.21
0.5.20
0.5.19
0.5.18
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.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.78
0.3.77
0.3.76
0.3.75
0.3.74
0.3.73
0.3.72
0.3.71
0.3.70
0.3.69
0.3.68
0.3.67
0.3.66
0.3.65
0.3.64
0.3.63
0.3.62
0.3.61
0.3.60
0.3.59
0.3.58
0.3.57
0.3.56
0.3.55
0.3.54
0.3.53
0.3.52
0.3.51
0.3.50
0.3.49
0.3.48
0.3.47
0.3.46
0.3.45
0.3.44
0.3.43
0.3.42
0.3.41
0.3.40
0.3.39
0.3.38
0.3.37
0.3.36
0.3.35
0.3.34
0.3.33
0.3.32
0.3.31
0.3.30
0.3.29
0.3.28
0.3.27
0.3.26
0.3.25
0.3.24
0.3.23
0.3.22
0.3.21
0.3.20
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.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.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A code generation and project patching framework
Current section
Files
Jump to
Current section
Files
lib/igniter/copied_tasks.ex
# SPDX-FileCopyrightText: 2024 igniter contributors <https://github.com/ash-project/igniter/graphs.contributors>
#
# SPDX-License-Identifier: MIT
defmodule Igniter.CopiedTasks do
@moduledoc false
def upgrade_switches do
[
yes: :boolean,
yes_to_deps: :boolean,
all: :boolean,
only: :string,
target: :string,
verbose: :boolean,
no_archives_check: :boolean,
git_ci: :boolean
]
end
def upgrade(original_argv) do
{argv, positional} = extract_positional_args(original_argv)
{opts, _} = OptionParser.parse!(argv, switches: upgrade_switches(), aliases: [])
Igniter.new()
|> Map.put(:args, %Igniter.Mix.Task.Args{
positional: %{packages: positional},
argv: original_argv,
argv_flags: argv,
options: opts
})
|> Igniter.Upgrades.upgrade()
end
def apply_upgrades(original_argv) do
{argv, positional} = extract_positional_args(original_argv)
{opts, _} = OptionParser.parse!(argv, switches: [yes: :boolean], aliases: [])
Igniter.new()
|> Map.put(:args, %Igniter.Mix.Task.Args{
positional: %{packages: positional},
argv: original_argv,
argv_flags: argv,
options: opts
})
|> do_apply_upgrades()
end
def do_apply_upgrades(igniter) do
packages = igniter.args.positional.packages
Enum.reduce(packages, igniter, fn package, igniter ->
case String.split(package, ":", parts: 3, trim: true) do
[name, from, to] ->
task_name =
if name == "igniter" do
"igniter.upgrade_igniter"
else
"#{name}.upgrade"
end
Igniter.compose_task(igniter, task_name, [from, to] ++ igniter.args.argv_flags)
_ ->
Mix.raise("Invalid package format: #{package}")
end
end)
end
def add(argv) do
{argv, positional} = extract_positional_args(argv)
packages =
positional
|> Enum.join(",")
|> String.split(",", trim: true)
if Enum.empty?(packages) do
raise ArgumentError, "must provide at least one package to install"
end
opts = opts(argv)
igniter = Igniter.new()
packages
|> Enum.join(",")
|> String.split(",")
|> Enum.reduce(igniter, fn dep, igniter ->
{name, version} = Igniter.Project.Deps.determine_dep_type_and_version!(dep)
Igniter.Project.Deps.add_dep(igniter, {name, version}, yes?: igniter.args.options[:yes])
end)
|> Igniter.add_task("deps.get")
|> Igniter.do_or_dry_run(opts)
end
def remove(argv) do
{argv, positional} = extract_positional_args(argv)
packages =
positional
|> Enum.join(",")
|> String.split(",", trim: true)
if Enum.empty?(packages) do
raise ArgumentError, "must provide at least one package to remove"
end
opts = opts(argv)
igniter = Igniter.new()
packages
|> Enum.join(",")
|> String.split(",")
|> Enum.map(&String.to_atom/1)
|> Enum.reduce(igniter, fn name, igniter ->
Igniter.Project.Deps.remove_dep(igniter, name)
end)
|> Igniter.add_task("deps.clean", ["--unlock", "--unused"])
|> Igniter.do_or_dry_run(opts)
end
@doc false
def install(argv) do
{argv, positional} = extract_positional_args(argv)
packages =
positional
|> Enum.join(",")
|> String.split(",", trim: true)
if Enum.empty?(packages) do
raise ArgumentError, "must provide at least one package to install"
end
Igniter.Util.Install.install(packages, argv)
end
defp opts(argv) do
yes = "--yes" in argv
[yes: yes, yes_to_deps: yes]
end
@doc false
defp extract_positional_args(argv) do
do_extract_positional_args(argv, [], [])
end
defp do_extract_positional_args([], argv, positional), do: {argv, positional}
defp do_extract_positional_args(argv, got_argv, positional) do
case OptionParser.next(argv, switches: []) do
{_, _key, true, rest} ->
do_extract_positional_args(
rest,
got_argv ++ [Enum.at(argv, 0)],
positional
)
{_, _key, _value, rest} ->
count_consumed = Enum.count(argv) - Enum.count(rest)
do_extract_positional_args(
rest,
got_argv ++ Enum.take(argv, count_consumed),
positional
)
{:error, rest} ->
[first | rest] = rest
do_extract_positional_args(rest, got_argv, positional ++ [first])
end
end
end