ludic remove <module> and ludic get --json (R9)
remove is the inverse of add: the require line leaves package.ludic; the lock keeps exactly what the
remaining requires still reach, read from the store's copy of each locked package.ludic (no
network), so a package another still requires stays locked and what only the removed one brought in
leaves with it; each leaving package loses the ludic_modules/ symlink add made, never the shared
store entry. Refused (exit 1) when package.ludic does not require the module; source still
importing a removed package is a warning. With no store copy to read, only the named module leaves.
get --json diffs the lock before and after in memory and prints {added, removed, changed,
unchanged} on stdout (an entry as the lock records it: name, version, hash, kind, provides; a change
as name, from, to, from_hash, to_hash), the resolver's lines on stderr. Cases added to test-pkg,
not run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
047bdf4189
commit
320ce42626
10 changed files with 341 additions and 10 deletions
|
|
@ -19,7 +19,8 @@ This is the v1 implementation of the direction decided in issue #63.
|
|||
|
||||
```
|
||||
ludic add <module>[@version] add a dependency to package.ludic, then resolve + fetch + link
|
||||
ludic get resolve every dependency in package.ludic, link them, write the lock
|
||||
ludic remove <module> the inverse of add: drop the require, what only it locked, its links
|
||||
ludic get [--json] resolve every dependency in package.ludic, link them, write the lock
|
||||
ludic update [module] bump a dependency (or all) to its latest published version, then relock
|
||||
ludic verify check every locked package against the store by content hash
|
||||
ludic vendor copy the resolved packages into ./vendor for hermetic/offline builds
|
||||
|
|
@ -29,6 +30,23 @@ ludic vendor copy the resolved packages into ./vendor for herm
|
|||
minimum. All the install commands print the resolved build list and write
|
||||
`package.lock.ludic`.
|
||||
|
||||
`ludic get --json` prints what the run changed in the lock as one JSON object on stdout (the
|
||||
resolver's lines go to stderr): `{"added": [...], "removed": [...], "changed": [...], "unchanged": n}`,
|
||||
an added or removed entry being the lock's line - `{"name", "version", "hash", "kind", "provides"}` -
|
||||
and a changed one `{"name", "from", "to", "from_hash", "to_hash"}` (the versions, and the content
|
||||
hashes beside them). The lock is compared before and after, in memory.
|
||||
|
||||
`ludic remove <module>` takes the `require` line out of `package.ludic` and re-reads the dependency
|
||||
graph from the store's own copy of each locked package's manifest - no network - so the lock keeps
|
||||
exactly what the remaining requires still reach: a package another one still requires stays locked
|
||||
(at the version it had; `ludic get` settles versions), and what only the removed one brought in
|
||||
leaves the lock with it. Each package leaving the lock loses its `ludic_modules/` link - the link
|
||||
`add` made, never the store entry it points at, which other projects share; anything there that is
|
||||
not such a link is left and reported, as is a copy under `vendor/`. A module `package.ludic` does
|
||||
not require is refused (exit 1). Source that still imports a removed package is a warning, not a
|
||||
failure - the caller may be about to delete it. If the store has no copy of a locked package, only
|
||||
the named module leaves the lock, and it says so.
|
||||
|
||||
## The manifest — `package.ludic`
|
||||
|
||||
A line-oriented manifest. `#` starts a comment; strings are double-quoted.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue