diff --git a/crates/socket-patch-core/src/crawlers/go_crawler.rs b/crates/socket-patch-core/src/crawlers/go_crawler.rs index b87773064..79784f1dc 100644 --- a/crates/socket-patch-core/src/crawlers/go_crawler.rs +++ b/crates/socket-patch-core/src/crawlers/go_crawler.rs @@ -1426,8 +1426,10 @@ mod tests { } std::fs::remove_file(f.project.join("go.work")).unwrap(); - // GOWORK naming a file elsewhere. - let _gowork = EnvGuard::set("GOWORK", "/elsewhere/go.work"); + // GOWORK naming a file elsewhere (absolute on every platform: + // `/x` has no drive on Windows, so go rejects it as relative). + let elsewhere = f.project.parent().unwrap().join("elsewhere/go.work"); + let _gowork = EnvGuard::set("GOWORK", &elsewhere.to_string_lossy()); assert_eq!(f.crawl().await, walked); } diff --git a/crates/socket-patch-core/src/vendor/go_workspace.rs b/crates/socket-patch-core/src/vendor/go_workspace.rs index 50e3baf86..402d51ded 100644 --- a/crates/socket-patch-core/src/vendor/go_workspace.rs +++ b/crates/socket-patch-core/src/vendor/go_workspace.rs @@ -1138,9 +1138,12 @@ mod tests { ); } assert_eq!(resolve_with(&project, Some("off")), GoWork::None); + // Absolute on this platform (`/x` has no drive on Windows, where go + // rejects it as relative too). + let elsewhere = tmp.path().join("elsewhere").join("go.work"); assert_eq!( - resolve_with(&project, Some("/elsewhere/go.work")), - GoWork::File(PathBuf::from("/elsewhere/go.work")) + resolve_with(&project, Some(&elsewhere.to_string_lossy())), + GoWork::File(elsewhere.clone()) ); for relative in ["go.work", "../go.work"] { assert!( @@ -1476,7 +1479,10 @@ mod tests { )); match ws.conflict(&root.join("a"), DEP, "v1.0.0", &ours) { Some(c @ WorkspaceConflict::MainModule { .. }) => { - assert!(c.consequence(DEP, "v1.0.0").contains("ws/dep"), "{c:?}"); + // Outside the project the member shows as a native path. + let member = Path::new("ws").join("dep"); + let member = member.to_string_lossy(); + assert!(c.consequence(DEP, "v1.0.0").contains(&*member), "{c:?}"); } other => panic!("{other:?}"), } diff --git a/crates/socket-patch-core/src/vex/discover/golang.rs b/crates/socket-patch-core/src/vex/discover/golang.rs index 2d763b8e9..7ab38e132 100644 --- a/crates/socket-patch-core/src/vex/discover/golang.rs +++ b/crates/socket-patch-core/src/vex/discover/golang.rs @@ -1836,9 +1836,13 @@ mod tests { ); } let elsewhere = p.root().join("a").join("go.work"); + // Outside the project and absolute on this platform (`/nonexistent` + // has no drive on Windows, so go rejects it as relative). + let outside = tempfile::tempdir().unwrap(); + let missing = outside.path().join("nonexistent").join("go.work"); for (gowork, why) in [ ("go.work".to_string(), "not an absolute path"), - ("/nonexistent/go.work".to_string(), "other than"), + (missing.to_string_lossy().into_owned(), "other than"), (elsewhere.to_string_lossy().into_owned(), "other than"), ] { let out = extract(Some(gowork.clone())).await;