lifecycle: fetch into checked-out main with --update-head-ok
setup_applied does `git init --initial-branch=main` then `git fetch <proposed> main:refs/heads/main` to seed the applied repo with proposed's initial commit. git's default safeguard refuses to fetch into the currently-checked-out branch, even though the working tree is empty (we just init'd). add --update-head-ok to bypass — the read-tree-reset immediately after fetches the right state, so the safeguard the flag bypasses isn't relevant here anyway. repro from the user: spawn of 'dmatrix' failed with fatal: refusing to fetch into branch 'refs/heads/main' checked out at '/var/lib/hyperhive/applied/dmatrix'
This commit is contained in:
parent
6f1b664c85
commit
c92108a11c
1 changed files with 12 additions and 1 deletions
|
|
@ -428,7 +428,18 @@ pub async fn setup_applied(
|
||||||
let proposed_str = proposed.display().to_string();
|
let proposed_str = proposed.display().to_string();
|
||||||
git(
|
git(
|
||||||
applied_dir,
|
applied_dir,
|
||||||
&["fetch", "--no-tags", &proposed_str, "main:refs/heads/main"],
|
// --update-head-ok lets us fetch into refs/heads/main while
|
||||||
|
// HEAD still points there. git's default safeguard refuses
|
||||||
|
// to avoid index/working-tree desync, but the working tree
|
||||||
|
// is empty (we just `init`'d) and we read-tree-reset right
|
||||||
|
// after, so the safeguard is moot here.
|
||||||
|
&[
|
||||||
|
"fetch",
|
||||||
|
"--no-tags",
|
||||||
|
"--update-head-ok",
|
||||||
|
&proposed_str,
|
||||||
|
"main:refs/heads/main",
|
||||||
|
],
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
git_read_tree_reset(applied_dir, "refs/heads/main").await?;
|
git_read_tree_reset(applied_dir, "refs/heads/main").await?;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue