A replace conflict cannot be settled from the command line (binary files and subrepo pins) issue #140 closed: completed andymccall opened this · 0 comments
andymccall set labels bug ·
closed by change 157d02e95586 ·
andymccall set labels bug ·
closed by change 157d02e95586 ·
Found 2026-10-25 in oxygenflow: its main has a replace conflict on the
deps/oxygenpin. fcc5bad0 replaced the pin twice in one change (a working copy thatcargo fmt --allhad reformatted, then back), leaving two live pin records beside 9036f0a9's.It cannot be settled locally. Only a hosted edit passes a
resolveset tobuild_from_entries_resolving(crates/oxy-core/src/repo/snapshot.rs;Repo::host_*in hosted.rs); a snapshot always passes an empty one. So for a conflicted opaque node a file (or pin) that is not one of the candidates is reported asmarkers("still contains conflict markers"), and every commit is refused, even one naming other paths: moving the subrepo to a new pin and committing fails the same way. Spec §9.3 says a snapshot never settles a replace conflict on its own and a tool that knows the user's choice builds the resolution; the CLI has no such tool (oxy resolveonly reports).Fix: say the choice, e.g.
oxy resolve PATH(oroxy commit --resolve PATH): the path's current content (the file, or the nested repository's pin) becomes the resolution, a Replace from each live candidate to it, depending on every contributor (as hosted edits do). Test with two concurrent replacements of a binary file and of a subrepo pin, settled from the CLI, then a clean status. Then settle oxygenflow'sdeps/oxygenwith it.