magus v0.4.3 is out. See what's new
¶ View markdown source · ✎ Suggest an edit
1 min read

inline-alias

A deny rule by default: it refuses a VCS alias defined inline (git -c alias.x=...), which hides the command it runs, and names what to run instead.

What it catches

A VCS alias defined inline (git -c alias.x=...), which hides the command it runs.

Why

git expands git -c alias.x='reset --hard' x into git reset --hard, so the word every git rule reads as the subcommand names nothing, and a reset, clean or push would pass unjudged. The guard refuses the line rather than judging it as every destructive verb at once: the arguments those rules read come from the alias body too, and --config-env or an inline include.path, which loads a file that may define aliases, keeps the body off the line altogether. The other backends are held to the same bar: hg's and sl's --config alias.x=..., jj's --config aliases.x=..., and the options that load config from a file or a TOML string (--config-file, sl's --configfile, jj's --config-toml). Spell out the command the alias stands for. Any other config setting is untouched, and each tool's global options (git -C, hg -R, jj --at-op, --no-pager) are read past the way the tool reads them.

Default and override

By default this rule takes the decision deny. A workspace sets it by name, in its root magusfile, to deny, advise or off:

magus\guard.builtins({"inline-alias": "advise"})

A loosening takes effect once it is committed; a tightening applies at once.

Seeing it

A verdict names its rule in brackets, which is how you got here:

deny [inline-alias]: ...

magus describe rule inline-alias prints the same entry at a terminal, and magus describe rules lists every rule this workspace enforces.

See also

guardrulesinline-aliasdeny
Last updated (1a76274f)
Earlier changes on this page (1)

Full history ↗ · Blame source ↗

Glossary

Workspace

The magus root directory that owns a set of projects and shared config; the unit magus operates over. See workspace.

Magusfile

The magusfile.buzz that declares a project's targets (as export funs) and binds its spells. See targets.

Op

A single tool-native command a target composes (long form: operation); the middle of the work hierarchy (Spell to Op to Target). See operations.

Spell

A language/runtime adapter (e.g. go, md) that maps generic targets onto a toolchain's real commands. See spells.

Buzz

The language magusfiles are written in (the .buzz engine). See engines.

CI

An ordinary magusfile-defined target you compose yourself with magus\needs: magus does not hardcode its stages. Magus.RunCI treats it specially only in that it strips the rw charm, it is the anchor magus affected ci keys off, and a selected scope with no project declaring it is a load error rather than a silent no-op. See targets.

Run

One target executing under one magus invocation, such as magus run test web or magus affected ci. A run keeps its captured output behind an output reference. Every magus run is a run whether or not any job asked for it; see Job for how the two relate.

Conventions

This page uses none of the site's convention markers. The full set is on the conventions page.