mirror of
https://github.com/kovetskiy/mark.git
synced 2025-04-23 05:12:41 +08:00
use docopt struct instead of map since we already have a struct
This commit is contained in:
parent
e72577327c
commit
5fd862c450
37
auth.go
37
auth.go
@ -18,17 +18,17 @@ type Credentials struct {
|
||||
}
|
||||
|
||||
func GetCredentials(
|
||||
args map[string]interface{},
|
||||
flags Flags,
|
||||
config *Config,
|
||||
) (*Credentials, error) {
|
||||
var (
|
||||
username, _ = args["-u"].(string)
|
||||
password, _ = args["-p"].(string)
|
||||
targetURL, _ = args["-l"].(string)
|
||||
)
|
||||
|
||||
var err error
|
||||
|
||||
var (
|
||||
username = flags.Username
|
||||
password = flags.Password
|
||||
targetURL = flags.TargetURL
|
||||
)
|
||||
|
||||
if username == "" {
|
||||
username = config.Username
|
||||
if username == "" {
|
||||
@ -50,14 +50,15 @@ func GetCredentials(
|
||||
}
|
||||
|
||||
if password == "-" {
|
||||
b, err := ioutil.ReadAll(os.Stdin)
|
||||
stdin, err := ioutil.ReadAll(os.Stdin)
|
||||
if err != nil {
|
||||
return nil, karma.Format(
|
||||
err,
|
||||
"unable to read password from stdin",
|
||||
)
|
||||
}
|
||||
password = string(b)
|
||||
|
||||
password = string(stdin)
|
||||
}
|
||||
|
||||
url, err := url.Parse(targetURL)
|
||||
@ -71,16 +72,16 @@ func GetCredentials(
|
||||
baseURL := url.Scheme + "://" + url.Host
|
||||
|
||||
if url.Host == "" {
|
||||
var ok bool
|
||||
baseURL, ok = args["--base-url"].(string)
|
||||
if !ok {
|
||||
baseURL = flags.BaseURL
|
||||
if baseURL == "" {
|
||||
baseURL = config.BaseURL
|
||||
if baseURL == "" {
|
||||
return nil, errors.New(
|
||||
"Confluence base URL should be specified using -l " +
|
||||
"flag or be stored in configuration file",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if baseURL == "" {
|
||||
return nil, errors.New(
|
||||
"Confluence base URL should be specified using -l " +
|
||||
"flag or be stored in configuration file",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
96
main.go
96
main.go
@ -18,18 +18,25 @@ import (
|
||||
"github.com/reconquest/pkg/log"
|
||||
)
|
||||
|
||||
type markFlags struct {
|
||||
fileGlobPatten string
|
||||
compileOnly bool
|
||||
dryRun bool
|
||||
editLock bool
|
||||
dropH1 bool
|
||||
minorEdit bool
|
||||
color string
|
||||
type Flags struct {
|
||||
FileGlobPatten string `docopt:"-f"`
|
||||
CompileOnly bool `docopt:"--compile-only"`
|
||||
DryRun bool `docopt:"--dry-run"`
|
||||
EditLock bool `docopt:"-k"`
|
||||
DropH1 bool `docopt:"--drop-h1"`
|
||||
MinorEdit bool `docopt:"--minor-edit"`
|
||||
Color string `docopt:"--color"`
|
||||
Debug bool `docopt:"--debug"`
|
||||
Trace bool `docopt:"--trace"`
|
||||
Username string `docopt:"-u"`
|
||||
Password string `docopt:"-p"`
|
||||
TargetURL string `docopt:"-l"`
|
||||
BaseURL string `docopt:"--base-url"`
|
||||
}
|
||||
|
||||
const (
|
||||
usage = `mark - a tool for updating Atlassian Confluence pages from markdown.
|
||||
version = "5.6"
|
||||
usage = `mark - a tool for updating Atlassian Confluence pages from markdown.
|
||||
|
||||
Docs: https://github.com/kovetskiy/mark
|
||||
|
||||
@ -65,30 +72,26 @@ Options:
|
||||
)
|
||||
|
||||
func main() {
|
||||
args, err := docopt.ParseArgs(usage, nil, "5.6")
|
||||
cmd, err := docopt.ParseArgs(usage, nil, version)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
flags := &markFlags{
|
||||
fileGlobPatten: args["-f"].(string),
|
||||
compileOnly: args["--compile-only"].(bool),
|
||||
dryRun: args["--dry-run"].(bool),
|
||||
editLock: args["-k"].(bool),
|
||||
dropH1: args["--drop-h1"].(bool),
|
||||
minorEdit: args["--minor-edit"].(bool),
|
||||
color: args["--color"].(string),
|
||||
var flags Flags
|
||||
err = cmd.Bind(&flags)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if args["--debug"].(bool) {
|
||||
if flags.Debug {
|
||||
log.SetLevel(lorg.LevelDebug)
|
||||
}
|
||||
|
||||
if args["--trace"].(bool) {
|
||||
if flags.Trace {
|
||||
log.SetLevel(lorg.LevelTrace)
|
||||
}
|
||||
|
||||
if flags.color == "never" {
|
||||
if flags.Color == "never" {
|
||||
log.GetLogger().SetFormat(
|
||||
lorg.NewFormat(
|
||||
`${time:2006-01-02 15:04:05.000} ${level:%s:left:true} ${prefix}%s`,
|
||||
@ -102,26 +105,26 @@ func main() {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
creds, err := GetCredentials(args, config)
|
||||
creds, err := GetCredentials(flags, config)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
api := confluence.NewAPI(creds.BaseURL, creds.Username, creds.Password)
|
||||
|
||||
files, err := filepath.Glob(flags.fileGlobPatten)
|
||||
files, err := filepath.Glob(flags.FileGlobPatten)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if len(files) == 0 {
|
||||
log.Fatal("No files matched.")
|
||||
log.Fatal("No files matched")
|
||||
}
|
||||
|
||||
// Loop through files matched by glob pattern
|
||||
for _, file := range files {
|
||||
log.Infof(
|
||||
nil,
|
||||
"Processing %s...",
|
||||
"processing %s",
|
||||
file,
|
||||
)
|
||||
|
||||
@ -133,13 +136,17 @@ func main() {
|
||||
creds.BaseURL+target.Links.Full,
|
||||
)
|
||||
|
||||
fmt.Println(
|
||||
"Page available at:", creds.BaseURL+target.Links.Full,
|
||||
)
|
||||
fmt.Println(creds.BaseURL + target.Links.Full)
|
||||
}
|
||||
}
|
||||
|
||||
func processFile(file string, api *confluence.API, flags *markFlags, pageID string, username string) *confluence.PageInfo {
|
||||
func processFile(
|
||||
file string,
|
||||
api *confluence.API,
|
||||
flags Flags,
|
||||
pageID string,
|
||||
username string,
|
||||
) *confluence.PageInfo {
|
||||
markdown, err := ioutil.ReadFile(file)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@ -194,16 +201,16 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
|
||||
|
||||
markdown = mark.SubstituteLinks(markdown, links)
|
||||
|
||||
if flags.dryRun {
|
||||
flags.compileOnly = true
|
||||
if flags.DryRun {
|
||||
flags.CompileOnly = true
|
||||
|
||||
_, _, err := mark.ResolvePage(flags.dryRun, api, meta)
|
||||
_, _, err := mark.ResolvePage(flags.DryRun, api, meta)
|
||||
if err != nil {
|
||||
log.Fatalf(err, "unable to resolve page location")
|
||||
}
|
||||
}
|
||||
|
||||
if flags.compileOnly {
|
||||
if flags.CompileOnly {
|
||||
fmt.Println(mark.CompileMarkdown(markdown, stdlib))
|
||||
os.Exit(0)
|
||||
}
|
||||
@ -228,7 +235,7 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
|
||||
var target *confluence.PageInfo
|
||||
|
||||
if meta != nil {
|
||||
parent, page, err := mark.ResolvePage(flags.dryRun, api, meta)
|
||||
parent, page, err := mark.ResolvePage(flags.DryRun, api, meta)
|
||||
if err != nil {
|
||||
log.Fatalf(
|
||||
karma.Describe("title", meta.Title).Reason(err),
|
||||
@ -238,7 +245,13 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
|
||||
}
|
||||
|
||||
if page == nil {
|
||||
page, err = api.CreatePage(meta.Space, meta.Type, parent, meta.Title, ``)
|
||||
page, err = api.CreatePage(
|
||||
meta.Space,
|
||||
meta.Type,
|
||||
parent,
|
||||
meta.Title,
|
||||
``,
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf(
|
||||
err,
|
||||
@ -270,9 +283,9 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
|
||||
|
||||
markdown = mark.CompileAttachmentLinks(markdown, attaches)
|
||||
|
||||
if flags.dropH1 {
|
||||
if flags.DropH1 {
|
||||
log.Info(
|
||||
"Leading H1 heading will be excluded from the Confluence output",
|
||||
"the leading H1 heading will be excluded from the Confluence output",
|
||||
)
|
||||
markdown = mark.DropDocumentLeadingH1(markdown)
|
||||
}
|
||||
@ -300,12 +313,12 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
|
||||
html = buffer.String()
|
||||
}
|
||||
|
||||
err = api.UpdatePage(target, html, flags.minorEdit, meta.Labels)
|
||||
err = api.UpdatePage(target, html, flags.MinorEdit, meta.Labels)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if flags.editLock {
|
||||
if flags.EditLock {
|
||||
log.Infof(
|
||||
nil,
|
||||
`edit locked on page %q by user %q to prevent manual edits`,
|
||||
@ -313,10 +326,7 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
|
||||
username,
|
||||
)
|
||||
|
||||
err := api.RestrictPageUpdates(
|
||||
target,
|
||||
username,
|
||||
)
|
||||
err := api.RestrictPageUpdates(target, username)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
@ -123,14 +123,17 @@ func ExtractMacros(
|
||||
|
||||
var (
|
||||
expr = regexputil.Subexp(reMacroDirective, groups, "expr")
|
||||
template = regexputil.Subexp(reMacroDirective, groups, "template")
|
||||
config = regexputil.Subexp(reMacroDirective, groups, "config")
|
||||
template = regexputil.Subexp(
|
||||
reMacroDirective,
|
||||
groups,
|
||||
"template",
|
||||
)
|
||||
config = regexputil.Subexp(reMacroDirective, groups, "config")
|
||||
|
||||
macro Macro
|
||||
)
|
||||
|
||||
macro.Template, err = includes.LoadTemplate(template, templates)
|
||||
|
||||
if err != nil {
|
||||
err = karma.Format(err, "unable to load template")
|
||||
|
||||
|
@ -25,7 +25,7 @@ func ResolvePage(
|
||||
if meta.Type == "blogpost" {
|
||||
log.Infof(
|
||||
nil,
|
||||
"Blog post will be stored as: %s",
|
||||
"blog post will be stored as: %s",
|
||||
meta.Title,
|
||||
)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user