2024-09-26 15:24:39 +02:00
|
|
|
package page
|
2019-04-08 22:44:27 +03:00
|
|
|
|
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
|
2024-09-26 15:24:39 +02:00
|
|
|
"github.com/kovetskiy/mark/confluence"
|
|
|
|
"github.com/kovetskiy/mark/metadata"
|
2019-04-08 22:44:27 +03:00
|
|
|
"github.com/reconquest/karma-go"
|
2020-11-03 17:12:51 +03:00
|
|
|
"github.com/reconquest/pkg/log"
|
2019-04-08 22:44:27 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
func ResolvePage(
|
2020-01-03 23:05:14 +03:00
|
|
|
dryRun bool,
|
2019-04-08 22:44:27 +03:00
|
|
|
api *confluence.API,
|
2024-09-26 15:24:39 +02:00
|
|
|
meta *metadata.Meta,
|
2020-01-03 23:05:14 +03:00
|
|
|
) (*confluence.PageInfo, *confluence.PageInfo, error) {
|
2021-03-31 17:49:01 +01:00
|
|
|
page, err := api.FindPage(meta.Space, meta.Title, meta.Type)
|
2019-04-08 22:44:27 +03:00
|
|
|
if err != nil {
|
2020-01-03 23:05:14 +03:00
|
|
|
return nil, nil, karma.Format(
|
2019-04-08 22:44:27 +03:00
|
|
|
err,
|
2019-04-19 10:31:41 +03:00
|
|
|
"error while finding page %q",
|
2019-04-08 22:44:27 +03:00
|
|
|
meta.Title,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2021-03-31 17:49:01 +01:00
|
|
|
if meta.Type == "blogpost" {
|
|
|
|
log.Infof(
|
|
|
|
nil,
|
2021-04-05 07:56:25 +03:00
|
|
|
"blog post will be stored as: %s",
|
2021-03-31 17:49:01 +01:00
|
|
|
meta.Title,
|
|
|
|
)
|
|
|
|
|
|
|
|
return nil, page, nil
|
|
|
|
}
|
|
|
|
|
2021-08-23 03:42:31 -03:00
|
|
|
// check to see if home page is in Parents
|
|
|
|
homepage, err := api.FindHomePage(meta.Space)
|
|
|
|
if err != nil {
|
|
|
|
return nil, nil, karma.Format(
|
|
|
|
err,
|
|
|
|
"can't obtain home page from space %q",
|
|
|
|
meta.Space,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
2021-08-23 03:42:31 -03:00
|
|
|
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 {
|
2020-01-03 23:05:14 +03:00
|
|
|
return nil, nil, err
|
2019-04-08 22:44:27 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
if page == nil {
|
2019-04-19 10:31:41 +03:00
|
|
|
log.Warningf(
|
|
|
|
nil,
|
|
|
|
"page %q is not found ",
|
2019-04-08 22:44:27 +03:00
|
|
|
meta.Parents[len(ancestry)-1],
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
path := meta.Parents
|
|
|
|
path = append(path, meta.Title)
|
|
|
|
|
2019-08-02 22:58:08 +03:00
|
|
|
log.Debugf(
|
2019-08-20 19:05:37 +03:00
|
|
|
nil,
|
2019-04-08 22:44:27 +03:00
|
|
|
"resolving page path: ??? > %s",
|
|
|
|
strings.Join(path, ` > `),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
parent, err := EnsureAncestry(
|
2020-01-03 23:05:14 +03:00
|
|
|
dryRun,
|
2019-04-08 22:44:27 +03:00
|
|
|
api,
|
|
|
|
meta.Space,
|
|
|
|
meta.Parents,
|
|
|
|
)
|
|
|
|
if err != nil {
|
2020-01-03 23:05:14 +03:00
|
|
|
return nil, nil, karma.Format(
|
2019-04-08 22:44:27 +03:00
|
|
|
err,
|
2019-04-19 10:31:41 +03:00
|
|
|
"can't create ancestry tree: %s",
|
2019-04-08 22:44:27 +03:00
|
|
|
strings.Join(meta.Parents, ` > `),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
titles := []string{}
|
|
|
|
for _, page := range parent.Ancestors {
|
|
|
|
titles = append(titles, page.Title)
|
|
|
|
}
|
|
|
|
|
|
|
|
titles = append(titles, parent.Title)
|
|
|
|
|
2019-04-19 10:31:41 +03:00
|
|
|
log.Infof(
|
2019-08-02 22:58:08 +03:00
|
|
|
nil,
|
2019-04-08 22:44:27 +03:00
|
|
|
"page will be stored under path: %s > %s",
|
|
|
|
strings.Join(titles, ` > `),
|
|
|
|
meta.Title,
|
|
|
|
)
|
|
|
|
|
2020-01-03 23:05:14 +03:00
|
|
|
return parent, page, nil
|
2019-04-08 22:44:27 +03:00
|
|
|
}
|