Resolve module paths consistently through symlinks

This commit is contained in:
2026-10-10 15:13:00 +00:00
parent 7216fb5f98
commit c0a3f55f12
4 changed files with 70 additions and 16 deletions

View File

@@ -10,6 +10,46 @@ import (
releasekit "gitea.maximumdirect.net/eric/ReleaseKit"
)
func TestModuleSelectionFollowsSymlinkBeforeParentAcrossOperations(t *testing.T) {
repository := newTaggedDeliveryConsumer(t)
const version = "v1.2.3"
const modulePath = "example.com/nested"
const note = "# Fixture v1.2.3\n\nNested release.\n"
addNestedReleaseModule(t, repository, "nested", modulePath, version)
writeFile(t, repository, "nested/docs/releases/"+version+".md", note)
writeFile(t, repository, "nested/deep/placeholder", "tracked directory\n")
if err := os.Symlink("nested/deep", filepath.Join(repository, "link")); err != nil {
t.Fatal(err)
}
buildGit(t, repository, "add", ".")
buildGit(t, repository, "commit", "-m", "Add linked nested module")
wantDir := filepath.Join(repository, "nested")
wantTag := "nested/" + version
built, err := releasekit.Build(t.Context(), releasekit.BuildRequest{
RepositoryDir: repository, ModuleDir: "link/..", Version: version,
})
if err != nil || built.ModuleDir != wantDir || built.ModulePath != modulePath || built.Tag != wantTag {
t.Fatalf("build = %#v, error = %v", built, err)
}
checked, err := releasekit.Check(t.Context(), releasekit.ReleaseRequest{
RepositoryDir: repository, ModuleDir: "link/..", Product: "Fixture", Version: version,
})
if err != nil || checked.ModuleDir != wantDir || checked.ModulePath != modulePath || checked.Tag != built.Tag {
t.Fatalf("check = %#v, error = %v", checked, err)
}
buildGit(t, repository, "tag", wantTag)
server, remote := newFacadeDeliveryServer(t, repository)
defer server.Close()
remote.tag, remote.noteBody = wantTag, note
delivered, err := releasekit.Deliver(t.Context(), releasekit.DeliveryRequest{
RepositoryDir: repository, ModuleDir: "link/..", Product: "Fixture", Version: version,
ExpectedTag: wantTag, Destination: facadeDeliveryDestination(server.URL),
})
if err != nil || delivered.State != releasekit.DeliveryComplete || delivered.ModuleDir != wantDir || delivered.ModulePath != modulePath || delivered.Tag != built.Tag {
t.Fatalf("delivery = %#v, error = %v", delivered, err)
}
}
func TestSourceOperationsResolveContainingRepository(t *testing.T) {
repo := newPublishFixture(t)
const module = "apps/widget"