Packages
dagger
0.21.2
0.21.7
0.21.6
0.21.5
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.8
0.20.7
0.20.6
0.20.5
0.20.4
0.20.3
0.20.2
0.20.1
0.20.0
0.19.11
0.19.10
0.19.9
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.19
0.18.18
0.18.17
0.18.16
0.18.15
0.18.14
0.18.13
0.18.12
0.18.11
0.18.10
0.18.9
0.18.8
0.18.7
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.2
0.17.1
0.17.0
0.16.3
0.16.2
0.16.1
0.16.0
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.0
0.13.7
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.9
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.2
0.0.0
retired
Dagger SDK for Elixir
Current section
Files
Jump to
Current section
Files
lib/dagger/gen/changeset.ex
# This file generated by `dagger_codegen`. Please DO NOT EDIT.
defmodule Dagger.Changeset do
@moduledoc """
A comparison between two directories representing changes that can be applied.
"""
use Dagger.Core.Base, kind: :object, name: "Changeset"
alias Dagger.Core.Client
alias Dagger.Core.QueryBuilder, as: QB
@derive Dagger.ID
@derive Dagger.Sync
defstruct [:query_builder, :client]
@type t() :: %__MODULE__{}
@doc """
Files and directories that were added in the newer directory.
"""
@spec added_paths(t()) :: {:ok, [String.t()]} | {:error, term()}
def added_paths(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("addedPaths")
Client.execute(changeset.client, query_builder)
end
@doc """
The newer/upper snapshot.
"""
@spec after_(t()) :: Dagger.Directory.t()
def after_(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("after")
%Dagger.Directory{
query_builder: query_builder,
client: changeset.client
}
end
@doc """
Return a Git-compatible patch of the changes
"""
@spec as_patch(t()) :: Dagger.File.t()
def as_patch(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("asPatch")
%Dagger.File{
query_builder: query_builder,
client: changeset.client
}
end
@doc """
The older/lower snapshot to compare against.
"""
@spec before(t()) :: Dagger.Directory.t()
def before(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("before")
%Dagger.Directory{
query_builder: query_builder,
client: changeset.client
}
end
@doc """
Structured per-path diff statistics (kind and line counts) for this changeset.
"""
@spec diff_stats(t()) :: {:ok, [Dagger.DiffStat.t()]} | {:error, term()}
def diff_stats(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("diffStats") |> QB.select("id")
with {:ok, items} <- Client.execute(changeset.client, query_builder) do
{:ok,
for %{"id" => id} <- items do
%Dagger.DiffStat{
query_builder:
QB.query()
|> QB.select("node")
|> QB.put_arg("id", id)
|> QB.inline_fragment("DiffStat"),
client: changeset.client
}
end}
end
end
@doc """
Applies the diff represented by this changeset to a path on the host.
"""
@spec export(t(), String.t()) :: {:ok, String.t()} | {:error, term()}
def export(%__MODULE__{} = changeset, path) do
query_builder =
changeset.query_builder |> QB.select("export") |> QB.put_arg("path", path)
Client.execute(changeset.client, query_builder)
end
@doc """
A unique identifier for this Changeset.
"""
@spec id(t()) :: {:ok, String.t()} | {:error, term()}
def id(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("id")
Client.execute(changeset.client, query_builder)
end
@doc """
Returns true if the changeset is empty (i.e. there are no changes).
"""
@spec empty?(t()) :: {:ok, boolean()} | {:error, term()}
def empty?(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("isEmpty")
Client.execute(changeset.client, query_builder)
end
@doc """
Return a snapshot containing only the created and modified files
"""
@spec layer(t()) :: Dagger.Directory.t()
def layer(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("layer")
%Dagger.Directory{
query_builder: query_builder,
client: changeset.client
}
end
@doc """
Files and directories that existed before and were updated in the newer directory.
"""
@spec modified_paths(t()) :: {:ok, [String.t()]} | {:error, term()}
def modified_paths(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("modifiedPaths")
Client.execute(changeset.client, query_builder)
end
@doc """
Files and directories that were removed. Directories are indicated by a trailing slash, and their child paths are not included.
"""
@spec removed_paths(t()) :: {:ok, [String.t()]} | {:error, term()}
def removed_paths(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("removedPaths")
Client.execute(changeset.client, query_builder)
end
@doc """
Force evaluation in the engine.
"""
@spec sync(t()) :: {:ok, Dagger.Changeset.t()} | {:error, term()}
def sync(%__MODULE__{} = changeset) do
query_builder =
changeset.query_builder |> QB.select("sync")
with {:ok, id} <- Client.execute(changeset.client, query_builder) do
{:ok,
%Dagger.Changeset{
query_builder:
QB.query()
|> QB.select("node")
|> QB.put_arg("id", id)
|> QB.inline_fragment("Changeset"),
client: changeset.client
}}
end
end
@doc """
Add changes to an existing changeset
By default the operation will fail in case of conflicts, for instance a file modified in both changesets. The behavior can be adjusted using onConflict argument
"""
@spec with_changeset(t(), Dagger.Changeset.t(), [
{:on_conflict, Dagger.ChangesetMergeConflict.t() | nil}
]) :: Dagger.Changeset.t()
def with_changeset(%__MODULE__{} = changeset, changes, optional_args \\ []) do
query_builder =
changeset.query_builder
|> QB.select("withChangeset")
|> QB.put_arg("changes", Dagger.ID.id!(changes))
|> QB.maybe_put_arg("onConflict", optional_args[:on_conflict])
%Dagger.Changeset{
query_builder: query_builder,
client: changeset.client
}
end
@doc """
Add changes from multiple changesets using git octopus merge strategy
This is more efficient than chaining multiple withChangeset calls when merging many changesets.
Only FAIL and FAIL_EARLY conflict strategies are supported (octopus merge cannot use -X ours/theirs).
"""
@spec with_changesets(t(), [String.t()], [
{:on_conflict, Dagger.ChangesetsMergeConflict.t() | nil}
]) :: Dagger.Changeset.t()
def with_changesets(%__MODULE__{} = changeset, changes, optional_args \\ []) do
query_builder =
changeset.query_builder
|> QB.select("withChangesets")
|> QB.put_arg("changes", changes)
|> QB.maybe_put_arg("onConflict", optional_args[:on_conflict])
%Dagger.Changeset{
query_builder: query_builder,
client: changeset.client
}
end
end
defimpl Jason.Encoder, for: Dagger.Changeset do
def encode(changeset, opts) do
{:ok, id} = Dagger.Changeset.id(changeset)
Jason.Encode.string(id, opts)
end
end
defimpl Nestru.Decoder, for: Dagger.Changeset do
def decode_fields_hint(_struct, _context, id) do
alias Dagger.Core.QueryBuilder, as: QB
dag = Dagger.Global.dag()
{:ok,
%Dagger.Changeset{
query_builder:
dag.query_builder
|> QB.select("node")
|> QB.put_arg("id", id)
|> QB.inline_fragment("Changeset"),
client: dag.client
}}
end
end