//go:build integration package buildstep import ( "context" "os" "os/exec" "path/filepath" "strings" "testing" "git.novox.be/novox/mesh-sdk/go/forgekey" ) func gitIn(t *testing.T, dir string, args ...string) string { t.Helper() cmd := exec.Command("git", append([]string{"-C", dir, "-c", "user.name=t", "-c", "user.email=t@example.invalid"}, args...)...) out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("git %v: %v\n%s", args, err, out) } return strings.TrimSpace(string(out)) } // 1474/AC5: a local bare repository with a commit only under refs/pull/1/head (a file:// remote, allowed by the // test-only option): the workspace's HEAD is the commit. The forge itself is proven live after the build // modules' delivery (ADR 0466 ยง5). func TestFetchCommitFromAPullRefOnly(t *testing.T) { root := t.TempDir() bare := filepath.Join(root, "r.git") work := filepath.Join(root, "work") for _, d := range []string{bare, work} { if err := os.MkdirAll(d, 0o755); err != nil { t.Fatal(err) } } gitIn(t, bare, "init", "-q", "--bare") gitIn(t, work, "init", "-q") if err := os.WriteFile(filepath.Join(work, "f"), []byte("x"), 0o644); err != nil { t.Fatal(err) } gitIn(t, work, "add", "f") gitIn(t, work, "commit", "-q", "-m", "pull request head") commit := gitIn(t, work, "rev-parse", "HEAD") gitIn(t, work, "push", "-q", bare, "HEAD:refs/pull/1/head") ws := filepath.Join(root, "ws") if err := os.MkdirAll(ws, 0o755); err != nil { t.Fatal(err) } err := FetchCommit(context.Background(), forgekey.ExecRunner, ws, "file://"+bare, commit, "refs/pull/1/head", AllowFileRemote()) if err != nil { t.Fatal(err) } if head := gitIn(t, ws, "rev-parse", "HEAD"); head != commit { t.Errorf("HEAD = %s, want %s", head, commit) } }