ww build: honor output directories
This commit is contained in:
29
docs/spec.md
29
docs/spec.md
@@ -310,6 +310,35 @@ ImportPath = ident { "." ident } .
|
||||
`fn main`; path and directory spelling do not classify commands. An ordinary
|
||||
import of a package declared `main` is rejected, except for the toolchain's
|
||||
colocated external-test wiring.
|
||||
- For `ww build`, an explicit `-o` names an output directory when ordinary
|
||||
`stat` reports an existing directory (following symlinks) or its spelling
|
||||
ends in `/`. This classification is independent of whether one or many
|
||||
package roots were requested. Each selected command is published beneath
|
||||
that directory using the final component of its requested contextual import
|
||||
name, with the selected local directory leaf as the fallback when no such
|
||||
identity exists. Independently selected non-main roots load but do not enter
|
||||
the action list; non-main command dependencies retain ordinary actions, and
|
||||
a selection containing no command rejects before tools or output creation.
|
||||
A raw command-line `.ww` source uses its source basename without `.ww`, and
|
||||
a raw non-main source is the same no-command rejection. Missing
|
||||
trailing-slash hierarchies are created transactionally from `0777`, filtered
|
||||
by the caller's umask.
|
||||
Loading and package/import diagnostics precede no-main, derived-path,
|
||||
duplicate-destination, implicit-default, and other output preflight; all of
|
||||
those checks precede creation. Producer failure or interruption preserves
|
||||
existing directory contents and removes only request-created prefixes and
|
||||
stages. A non-directory output retains the single-product file/archive rule.
|
||||
If a lone
|
||||
command's synthesized default basename already names a directory, loading
|
||||
and graph validation complete and the build rejects before tools without
|
||||
changing that directory; a non-main package synthesizes no default public
|
||||
output. Output paths and directory metadata never become package, import,
|
||||
graph, action,
|
||||
symbol, artifact, `.wwi`, or persistence identity.
|
||||
Assembly-only `-S` retains the directory form's command-action selection and
|
||||
no-main rejection, but it reaches no install action: destination length,
|
||||
duplicate publication names, implicit destination collision, and output
|
||||
parent creation are therefore inapplicable.
|
||||
- A newly published `ww build` command is created with permission `0777`
|
||||
filtered by the invoking process's umask. A newly published non-command
|
||||
archive, and the adjacent WW interface required to consume it, use `0666`
|
||||
|
||||
Reference in New Issue
Block a user