Resolve module paths consistently through symlinks
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user