allod patch receive: a forge-less VM's host-provided checkout cannot be relayed back to the host #273
Labels
No labels
blocked
bug
decision
duplicate
enhancement
help wanted
invalid
landed?
question
ready-to-merge
stale
wontfix
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
allod/tools#273
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
allod patch receive <vm>:<repo> <repo>cannot pull commits out of a host-provided checkout, which is every repository on a forge-less dev VM, the deployment the public install path produces first.How a host-provided checkout is made (allod/nexus
scripts/lib/host-provided-checkout.shandbootstrap-vm):git initin the VM, then the host pushes its clone into it over SSH. The VM checkout therefore has no remote and no upstream.What the relay does with that (
cmd/allod/patch.go):resolve_default_basefinds no upstream and nooriginref, so it exports from the root: every commit in the repository's history as a patch, after agit diff --checkover the whole tree.root export can only be applied to an empty destination history, exit 14. The host's clone always has history, since it is where the VM's copy came from.--base <host HEAD>makes the export one patch, but the apply side then refusesrepo identity mismatch, exit 13: the manifest's source remote is empty and the destination'soriginis the forge.So neither the plain line nor the
--baseform works; the operator's only way to get work out of a forge-less VM is by hand.Proposal:
receivepasses the destination'sHEADto the export as a fallback base. The export uses it only when its own resolution (upstream, same-named origin branch, origin default branch) finds nothing and the commit exists in the source; a forge-backed VM is unaffected.tests/allod-patch.shgains: a host-provided source (init, pushed into, no remote) with one new commit relays that one commit onto a destination clone that has an origin; a host-provided source whose history the destination lacks is refused naming the base; root export into an empty destination unchanged.Found on the public install walk while planning the forge step, 2026-10-11: the dev VM's work must come back to the host before
provision-vm --replace, andgetting-started.sh --forgerefuses the replace while it has not.Part of allod/strategy#65.
Landed on allod/tools master
01bf1da: receive passes the destination HEAD as the fallback base, an empty-remote source is accepted when the base commit is shared and the registry ids match. Pinned through the deploy template.