OXYGENHUB

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

Found 2026-10-25 in oxygenflow: its main has a replace conflict on the deps/oxygen pin. fcc5bad0 replaced the pin twice in one change (a working copy that cargo fmt --all had reformatted, then back), leaving two live pin records beside 9036f0a9's.

It cannot be settled locally. Only a hosted edit passes a resolve set to build_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 as markers ("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 resolve only reports).

Fix: say the choice, e.g. oxy resolve PATH (or oxy 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's deps/oxygen with it.

andymccall set labels bug ·

closed by change 157d02e95586 ·