Files
mark/page/page.go

106 lines
2.0 KiB
Go
Raw Permalink Normal View History

2024-09-26 15:24:39 +02:00
package page
2019-04-08 22:44:27 +03:00
import (
"fmt"
2019-04-08 22:44:27 +03:00
"strings"
"github.com/kovetskiy/mark/v16/confluence"
"github.com/kovetskiy/mark/v16/metadata"
2026-03-28 09:55:58 +01:00
"github.com/rs/zerolog/log"
2019-04-08 22:44:27 +03:00
)
func ResolvePage(
dryRun bool,
2019-04-08 22:44:27 +03:00
api *confluence.API,
2024-09-26 15:24:39 +02:00
meta *metadata.Meta,
) (*confluence.PageInfo, *confluence.PageInfo, error) {
2025-09-15 18:48:53 +02:00
if meta == nil {
return nil, nil, fmt.Errorf("metadata is empty")
2025-09-15 18:48:53 +02:00
}
page, err := api.FindPage(meta.Space, meta.Title, meta.Type)
2019-04-08 22:44:27 +03:00
if err != nil {
return nil, nil, fmt.Errorf("error while finding page %q: %w", meta.Title, err)
2019-04-08 22:44:27 +03:00
}
if meta.Type == "blogpost" {
2026-03-28 09:55:58 +01:00
log.Info().
Msgf(
"blog post will be stored as: %s",
meta.Title,
)
return nil, page, nil
}
// check to see if home page is in Parents
homepage, err := api.FindHomePage(meta.Space)
if err != nil {
return nil, nil, fmt.Errorf("can't obtain home page from space %q: %w", meta.Space, err)
}
skipHomeAncestry := false
if len(meta.Parents) > 0 {
if homepage.Title == meta.Parents[0] {
skipHomeAncestry = true
}
}
2019-04-08 22:44:27 +03:00
ancestry := meta.Parents
if page != nil && !skipHomeAncestry {
2019-04-08 22:44:27 +03:00
ancestry = append(ancestry, page.Title)
}
if len(ancestry) > 0 {
page, err := ValidateAncestry(
api,
meta.Space,
ancestry,
)
if err != nil {
return nil, nil, err
2019-04-08 22:44:27 +03:00
}
if page == nil {
2026-03-28 09:55:58 +01:00
log.Warn().
Msgf(
"page %q is not found ",
ancestry[len(ancestry)-1],
)
2019-04-08 22:44:27 +03:00
}
path := meta.Parents
path = append(path, meta.Title)
2026-03-28 09:55:58 +01:00
log.Debug().
Msgf(
"resolving page path: ??? > %s",
strings.Join(path, ` > `),
)
2019-04-08 22:44:27 +03:00
}
parent, err := EnsureAncestry(
dryRun,
2019-04-08 22:44:27 +03:00
api,
meta.Space,
meta.Parents,
)
if err != nil {
return nil, nil, fmt.Errorf("can't create ancestry tree %q: %w", strings.Join(meta.Parents, ` > `), err)
2019-04-08 22:44:27 +03:00
}
titles := []string{}
for _, page := range parent.Ancestors {
titles = append(titles, page.Title)
}
titles = append(titles, parent.Title)
2026-03-28 09:55:58 +01:00
log.Info().Msgf(
2019-04-08 22:44:27 +03:00
"page will be stored under path: %s > %s",
strings.Join(titles, ` > `),
meta.Title,
)
return parent, page, nil
2019-04-08 22:44:27 +03:00
}