Skip to content

Commit 5fd862c

Browse files
committed
use docopt struct instead of map since we already have a struct
1 parent e725773 commit 5fd862c

4 files changed

Lines changed: 78 additions & 64 deletions

File tree

auth.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ type Credentials struct {
1818
}
1919

2020
func GetCredentials(
21-
args map[string]interface{},
21+
flags Flags,
2222
config *Config,
2323
) (*Credentials, error) {
24+
var err error
25+
2426
var (
25-
username, _ = args["-u"].(string)
26-
password, _ = args["-p"].(string)
27-
targetURL, _ = args["-l"].(string)
27+
username = flags.Username
28+
password = flags.Password
29+
targetURL = flags.TargetURL
2830
)
2931

30-
var err error
31-
3232
if username == "" {
3333
username = config.Username
3434
if username == "" {
@@ -50,14 +50,15 @@ func GetCredentials(
5050
}
5151

5252
if password == "-" {
53-
b, err := ioutil.ReadAll(os.Stdin)
53+
stdin, err := ioutil.ReadAll(os.Stdin)
5454
if err != nil {
5555
return nil, karma.Format(
5656
err,
5757
"unable to read password from stdin",
5858
)
5959
}
60-
password = string(b)
60+
61+
password = string(stdin)
6162
}
6263

6364
url, err := url.Parse(targetURL)
@@ -71,16 +72,16 @@ func GetCredentials(
7172
baseURL := url.Scheme + "://" + url.Host
7273

7374
if url.Host == "" {
74-
var ok bool
75-
baseURL, ok = args["--base-url"].(string)
76-
if !ok {
75+
baseURL = flags.BaseURL
76+
if baseURL == "" {
7777
baseURL = config.BaseURL
78-
if baseURL == "" {
79-
return nil, errors.New(
80-
"Confluence base URL should be specified using -l " +
81-
"flag or be stored in configuration file",
82-
)
83-
}
78+
}
79+
80+
if baseURL == "" {
81+
return nil, errors.New(
82+
"Confluence base URL should be specified using -l " +
83+
"flag or be stored in configuration file",
84+
)
8485
}
8586
}
8687

main.go

Lines changed: 53 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,25 @@ import (
1818
"github.com/reconquest/pkg/log"
1919
)
2020

21-
type markFlags struct {
22-
fileGlobPatten string
23-
compileOnly bool
24-
dryRun bool
25-
editLock bool
26-
dropH1 bool
27-
minorEdit bool
28-
color string
21+
type Flags struct {
22+
FileGlobPatten string `docopt:"-f"`
23+
CompileOnly bool `docopt:"--compile-only"`
24+
DryRun bool `docopt:"--dry-run"`
25+
EditLock bool `docopt:"-k"`
26+
DropH1 bool `docopt:"--drop-h1"`
27+
MinorEdit bool `docopt:"--minor-edit"`
28+
Color string `docopt:"--color"`
29+
Debug bool `docopt:"--debug"`
30+
Trace bool `docopt:"--trace"`
31+
Username string `docopt:"-u"`
32+
Password string `docopt:"-p"`
33+
TargetURL string `docopt:"-l"`
34+
BaseURL string `docopt:"--base-url"`
2935
}
3036

3137
const (
32-
usage = `mark - a tool for updating Atlassian Confluence pages from markdown.
38+
version = "5.6"
39+
usage = `mark - a tool for updating Atlassian Confluence pages from markdown.
3340
3441
Docs: https://github.com/kovetskiy/mark
3542
@@ -65,30 +72,26 @@ Options:
6572
)
6673

6774
func main() {
68-
args, err := docopt.ParseArgs(usage, nil, "5.6")
75+
cmd, err := docopt.ParseArgs(usage, nil, version)
6976
if err != nil {
7077
panic(err)
7178
}
7279

73-
flags := &markFlags{
74-
fileGlobPatten: args["-f"].(string),
75-
compileOnly: args["--compile-only"].(bool),
76-
dryRun: args["--dry-run"].(bool),
77-
editLock: args["-k"].(bool),
78-
dropH1: args["--drop-h1"].(bool),
79-
minorEdit: args["--minor-edit"].(bool),
80-
color: args["--color"].(string),
80+
var flags Flags
81+
err = cmd.Bind(&flags)
82+
if err != nil {
83+
log.Fatal(err)
8184
}
8285

83-
if args["--debug"].(bool) {
86+
if flags.Debug {
8487
log.SetLevel(lorg.LevelDebug)
8588
}
8689

87-
if args["--trace"].(bool) {
90+
if flags.Trace {
8891
log.SetLevel(lorg.LevelTrace)
8992
}
9093

91-
if flags.color == "never" {
94+
if flags.Color == "never" {
9295
log.GetLogger().SetFormat(
9396
lorg.NewFormat(
9497
`${time:2006-01-02 15:04:05.000} ${level:%s:left:true} ${prefix}%s`,
@@ -102,26 +105,26 @@ func main() {
102105
log.Fatal(err)
103106
}
104107

105-
creds, err := GetCredentials(args, config)
108+
creds, err := GetCredentials(flags, config)
106109
if err != nil {
107110
log.Fatal(err)
108111
}
109112

110113
api := confluence.NewAPI(creds.BaseURL, creds.Username, creds.Password)
111114

112-
files, err := filepath.Glob(flags.fileGlobPatten)
115+
files, err := filepath.Glob(flags.FileGlobPatten)
113116
if err != nil {
114117
log.Fatal(err)
115118
}
116119
if len(files) == 0 {
117-
log.Fatal("No files matched.")
120+
log.Fatal("No files matched")
118121
}
119122

120123
// Loop through files matched by glob pattern
121124
for _, file := range files {
122125
log.Infof(
123126
nil,
124-
"Processing %s...",
127+
"processing %s",
125128
file,
126129
)
127130

@@ -133,13 +136,17 @@ func main() {
133136
creds.BaseURL+target.Links.Full,
134137
)
135138

136-
fmt.Println(
137-
"Page available at:", creds.BaseURL+target.Links.Full,
138-
)
139+
fmt.Println(creds.BaseURL + target.Links.Full)
139140
}
140141
}
141142

142-
func processFile(file string, api *confluence.API, flags *markFlags, pageID string, username string) *confluence.PageInfo {
143+
func processFile(
144+
file string,
145+
api *confluence.API,
146+
flags Flags,
147+
pageID string,
148+
username string,
149+
) *confluence.PageInfo {
143150
markdown, err := ioutil.ReadFile(file)
144151
if err != nil {
145152
log.Fatal(err)
@@ -194,16 +201,16 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
194201

195202
markdown = mark.SubstituteLinks(markdown, links)
196203

197-
if flags.dryRun {
198-
flags.compileOnly = true
204+
if flags.DryRun {
205+
flags.CompileOnly = true
199206

200-
_, _, err := mark.ResolvePage(flags.dryRun, api, meta)
207+
_, _, err := mark.ResolvePage(flags.DryRun, api, meta)
201208
if err != nil {
202209
log.Fatalf(err, "unable to resolve page location")
203210
}
204211
}
205212

206-
if flags.compileOnly {
213+
if flags.CompileOnly {
207214
fmt.Println(mark.CompileMarkdown(markdown, stdlib))
208215
os.Exit(0)
209216
}
@@ -228,7 +235,7 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
228235
var target *confluence.PageInfo
229236

230237
if meta != nil {
231-
parent, page, err := mark.ResolvePage(flags.dryRun, api, meta)
238+
parent, page, err := mark.ResolvePage(flags.DryRun, api, meta)
232239
if err != nil {
233240
log.Fatalf(
234241
karma.Describe("title", meta.Title).Reason(err),
@@ -238,7 +245,13 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
238245
}
239246

240247
if page == nil {
241-
page, err = api.CreatePage(meta.Space, meta.Type, parent, meta.Title, ``)
248+
page, err = api.CreatePage(
249+
meta.Space,
250+
meta.Type,
251+
parent,
252+
meta.Title,
253+
``,
254+
)
242255
if err != nil {
243256
log.Fatalf(
244257
err,
@@ -270,9 +283,9 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
270283

271284
markdown = mark.CompileAttachmentLinks(markdown, attaches)
272285

273-
if flags.dropH1 {
286+
if flags.DropH1 {
274287
log.Info(
275-
"Leading H1 heading will be excluded from the Confluence output",
288+
"the leading H1 heading will be excluded from the Confluence output",
276289
)
277290
markdown = mark.DropDocumentLeadingH1(markdown)
278291
}
@@ -300,23 +313,20 @@ func processFile(file string, api *confluence.API, flags *markFlags, pageID stri
300313
html = buffer.String()
301314
}
302315

303-
err = api.UpdatePage(target, html, flags.minorEdit, meta.Labels)
316+
err = api.UpdatePage(target, html, flags.MinorEdit, meta.Labels)
304317
if err != nil {
305318
log.Fatal(err)
306319
}
307320

308-
if flags.editLock {
321+
if flags.EditLock {
309322
log.Infof(
310323
nil,
311324
`edit locked on page %q by user %q to prevent manual edits`,
312325
target.Title,
313326
username,
314327
)
315328

316-
err := api.RestrictPageUpdates(
317-
target,
318-
username,
319-
)
329+
err := api.RestrictPageUpdates(target, username)
320330
if err != nil {
321331
log.Fatal(err)
322332
}

pkg/mark/macro/macro.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,17 @@ func ExtractMacros(
123123

124124
var (
125125
expr = regexputil.Subexp(reMacroDirective, groups, "expr")
126-
template = regexputil.Subexp(reMacroDirective, groups, "template")
127-
config = regexputil.Subexp(reMacroDirective, groups, "config")
126+
template = regexputil.Subexp(
127+
reMacroDirective,
128+
groups,
129+
"template",
130+
)
131+
config = regexputil.Subexp(reMacroDirective, groups, "config")
128132

129133
macro Macro
130134
)
131135

132136
macro.Template, err = includes.LoadTemplate(template, templates)
133-
134137
if err != nil {
135138
err = karma.Format(err, "unable to load template")
136139

pkg/mark/mark.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func ResolvePage(
2525
if meta.Type == "blogpost" {
2626
log.Infof(
2727
nil,
28-
"Blog post will be stored as: %s",
28+
"blog post will be stored as: %s",
2929
meta.Title,
3030
)
3131

0 commit comments

Comments
 (0)