Merge pull request #4 from brnv/master

change page title
This commit is contained in:
Egor Kovetskiy 2019-03-26 14:03:14 +03:00 committed by GitHub
commit 1a69a00422
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 18 deletions

View File

@ -30,15 +30,16 @@ Confluence instance and update it accordingly.
File in extended format should follow specification File in extended format should follow specification
```markdown ```markdown
[]:# (X-Space: <space key>) []:# (Space: <space key>)
[]:# (X-Parent: <parent 1>) []:# (Parent: <parent 1>)
[]:# (X-Parent: <parent 2>) []:# (Parent: <parent 2>)
[]:# (X-Title: <title>) []:# (Title: <rename title>)
[]:# (Title: <title>)
<page contents> <page contents>
``` ```
There can be any number of 'X-Parent' headers, if mark can't find specified There can be any number of 'Parent' headers, if mark can't find specified
parent by title, it will be created. parent by title, it will be created.
## Usage: ## Usage:

60
main.go
View File

@ -5,7 +5,7 @@ import (
"bytes" "bytes"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/url" netURL "net/url"
"os" "os"
"path/filepath" "path/filepath"
"regexp" "regexp"
@ -117,7 +117,7 @@ const (
type Meta struct { type Meta struct {
Parents []string Parents []string
Space string Space string
Title string Title []string
Layout string Layout string
} }
@ -237,7 +237,7 @@ func main() {
} }
} }
url, err := url.Parse(targetURL) url, err := netURL.Parse(targetURL)
if err != nil { if err != nil {
logger.Fatal(err) logger.Fatal(err)
} }
@ -283,9 +283,43 @@ func main() {
) )
} }
var target *PageInfo var (
target *PageInfo
rename *PageInfo
)
if meta != nil { if len(meta.Title) > 1 {
page, _ := api.findPage(meta.Space, meta.Title[0])
if page == nil {
for i := len(meta.Title) - 1; i >= 0; i-- {
page, _ := api.findPage(meta.Space, meta.Title[i])
if page != nil {
rename = page
break
}
}
}
}
if rename != nil && meta.Title[0] != "" {
logger.Tracef(
"renaming page '%s' to '%s'", rename.Title,
meta.Title[0],
)
page, err := api.getPageByID(rename.ID)
if err != nil {
logger.Fatal(err)
}
page.Links.Full = strings.Replace(
page.Links.Full,
netURL.QueryEscape(page.Title),
netURL.QueryEscape(meta.Title[0]), 1,
)
page.Title = meta.Title[0]
target = page
} else if meta != nil {
page, err := resolvePage(api, meta) page, err := resolvePage(api, meta)
if err != nil { if err != nil {
logger.Fatal(err) logger.Fatal(err)
@ -381,12 +415,12 @@ func compileMarkdown(markdown []byte) []byte {
} }
func resolvePage(api *API, meta *Meta) (*PageInfo, error) { func resolvePage(api *API, meta *Meta) (*PageInfo, error) {
page, err := api.findPage(meta.Space, meta.Title) page, err := api.findPage(meta.Space, meta.Title[0])
if err != nil { if err != nil {
return nil, ser.Errorf( return nil, ser.Errorf(
err, err,
"error during finding page '%s': %s", "error during finding page '%s': %s",
meta.Title, meta.Title[0],
) )
} }
@ -413,7 +447,7 @@ func resolvePage(api *API, meta *Meta) (*PageInfo, error) {
} }
path := meta.Parents path := meta.Parents
path = append(path, meta.Title) path = append(path, meta.Title[0])
logger.Debugf( logger.Debugf(
"resolving page path: ??? > %s", "resolving page path: ??? > %s",
@ -444,16 +478,16 @@ func resolvePage(api *API, meta *Meta) (*PageInfo, error) {
logger.Infof( logger.Infof(
"page will be stored under path: %s > %s", "page will be stored under path: %s > %s",
strings.Join(titles, ` > `), strings.Join(titles, ` > `),
meta.Title, meta.Title[0],
) )
if page == nil { if page == nil {
page, err := api.createPage(meta.Space, parent, meta.Title, ``) page, err := api.createPage(meta.Space, parent, meta.Title[0], ``)
if err != nil { if err != nil {
return nil, ser.Errorf( return nil, ser.Errorf(
err, err,
"can't create page '%s': %s", "can't create page '%s': %s",
meta.Title, meta.Title[0],
) )
} }
@ -623,7 +657,7 @@ func extractMeta(data []byte) (*Meta, error) {
meta.Space = strings.ToUpper(matches[2]) meta.Space = strings.ToUpper(matches[2])
case HeaderTitle: case HeaderTitle:
meta.Title = strings.TrimSpace(matches[2]) meta.Title = append(meta.Title, matches[2])
case HeaderLayout: case HeaderLayout:
meta.Layout = strings.TrimSpace(matches[2]) meta.Layout = strings.TrimSpace(matches[2])
@ -650,7 +684,7 @@ func extractMeta(data []byte) (*Meta, error) {
) )
} }
if meta.Title == "" { if meta.Title[0] == "" {
return nil, fmt.Errorf( return nil, fmt.Errorf(
"page title is not set (%s header is not set)", "page title is not set (%s header is not set)",
HeaderTitle, HeaderTitle,