Repository navigation
Release 0.4.0: catch-up pull, root confinement, typed outcomes - #15
Merged
Merged
Conversation
- Overwrite::IfUnchanged (pull --if-unchanged) replaces or removes only
files still as the .dvc's base records them, re-hashing each just
before; any other differing file is PullConflict. Never falls back to
Force.
- PushOptions::root / PullOptions::root: paths relative to a root, plain
names only, no symlink or reparse point from the root to the output,
at the output or at its .dvc (Refusal::OutsideRoot,
SymlinkedComponent).
- PushReport::outcome: Pushed::{AlreadyLatest, Published, Forked}
replaces history_record/forked_with; PushReport is #[must_use]. The
CLI exits non-zero after a fork.
- folder::Error::{CredentialsMissing, RemoteUnusable, TooManyHeads,
NoHead} replace untyped errors. Messages name no CLI flag; the CLI adds
a hint line.
IfUnchanged replaced or removed a base file once its manifest was on the remote, but objects can be gone behind a manifest. Each file it would discard must now have its object on the remote at its local size, else Refusal::BaseNotOnRemote, before anything is written.
From the Fable review of #15: - A base file whose name matches a target's but for case or Unicode normalization is the target itself on macOS and Windows; removing it removed the pulled file. Refused on every OS as CaseCollision. - A base file deleted locally that the version still has was written again, undoing the deletion; it is now PullConflict. Pulling the very version the output is based on is a restore and behaves as Refuse. - CredentialsMissing names no env vars (Static reaches it too); the CLI adds that hint. - Document that Windows confinement refuses every reparse point, placeholders and compressed files included.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Folder-mode changes asked for by its first consumer, asset-store's dataset backup. CHANGELOG has the details.
Overwrite::IfUnchanged(pull --if-unchanged) replaces only files that still match the.dvc's base. It also removes base files that are unchanged locally and that the new version dropped. Every file is re-hashed just before it is replaced or removed. Any other difference is aPullConflict, and there is never a fallback toForce.PushOptions::root/PullOptions::rootrefuse a symlink or reparse point anywhere from the root down to the output, at the output itself, and at its.dvc(Refusal::SymlinkedComponent). They also refuse a path that is not plain names (Refusal::OutsideRoot).PushReport::outcome: Pushed::{AlreadyLatest, Published, Forked}, and the report is#[must_use]. The CLI exits non-zero after a fork.CredentialsMissing,RemoteUnusable,TooManyHeads,NoHead. Messages no longer name CLI flags; the CLI adds ahint:line instead.0.4.0 rather than 0.3.1 because of the breaking changes:
Pushedreplaceshistory_record/forked_with,Overwrite,PushReportandPullReportare now#[non_exhaustive], and both option structs gain arootfield.Tests cover catch-up, a refused local change (including a file the new version removed), a file written mid-pull, symlinks at every level on unix and a junction on Windows, and each new typed error. Locally: the full suite with
--include-ignored(pinned DVC 3.67.1, rclone), clippy, the feature matrix, deny, and llvm-cov at 86.9% of lines.