From 7fe4542c0a5e926c3f432360df7396173f1e42bb Mon Sep 17 00:00:00 2001 From: Egor Kovetskiy Date: Mon, 8 Apr 2019 22:12:00 +0300 Subject: [PATCH] remove options mode --- README.md | 8 --- main.go | 146 +++++++----------------------------------------------- meta.go | 92 ++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 136 deletions(-) create mode 100644 meta.go diff --git a/README.md b/README.md index bc3d1e7..fed4902 100644 --- a/README.md +++ b/README.md @@ -16,14 +16,6 @@ password = "matrixishere" base_url = "http://confluence.local" ``` -Mark can read Confluence page URL and markdown file path from another specified -configuration file, which you can specify using -c flag. It is very -usable for git hooks. That file should have following format: -```toml -url = "http://confluence.local/pages/viewpage.action?pageId=123456" -file = "docs/README.md" -``` - Mark understands extended file format, which, still being valid markdown, contains several metadata headers, which can be used to locate page inside Confluence instance and update it accordingly. diff --git a/main.go b/main.go index 274ae51..c3f6ab7 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,6 @@ package main import ( - "bufio" - "bytes" "fmt" "io/ioutil" "net/url" @@ -81,8 +79,6 @@ Options: -b --base-url Base URL for Confluence. Alternative option for base_url config field. -f Use specified markdown file for converting to html. - -c Specify configuration file which should be used for reading - Confluence page URL and markdown file path. -k Lock page editing to current user only to prevent accidental manual edits over Confluence Web UI. --dry-run Show resulting HTML and don't update Confluence page content. @@ -110,24 +106,27 @@ type PageInfo struct { } `json:"_links"` } -const ( - HeaderParent string = `Parent` - HeaderSpace = `Space` - HeaderTitle = `Title` - HeaderLayout = `Layout` -) - -type Meta struct { - Parents []string - Space string - Title string - Layout string -} - var ( logger = lorg.NewLog() ) +func initLogger(trace bool) { + if trace { + logger.SetLevel(lorg.LevelTrace) + } + + logFormat := `${time} ${level:[%s]:right:true} %s` + + if format := os.Getenv("LOG_FORMAT"); format != "" { + logFormat = format + } + + logger.SetFormat(colorgful.MustApplyDefaultTheme( + logFormat, + colorgful.Default, + )) +} + func main() { args, err := godocs.Parse(usage, "mark 1.0", godocs.UsePager) if err != nil { @@ -142,55 +141,15 @@ func main() { dryRun = args["--dry-run"].(bool) editLock = args["-k"].(bool) trace = args["--trace"].(bool) - - optionsFile, shouldReadOptions = args["-c"].(string) ) - if trace { - logger.SetLevel(lorg.LevelTrace) - } - - logFormat := `${time} ${level:[%s]:right:true} %s` - - if format := os.Getenv("LOG_FORMAT"); format != "" { - logFormat = format - } - - logger.SetFormat(colorgful.MustApplyDefaultTheme( - logFormat, - colorgful.Default, - )) + initLogger(trace) config, err := getConfig(filepath.Join(os.Getenv("HOME"), ".config/mark")) if err != nil && !os.IsNotExist(err) { logger.Fatal(err) } - if shouldReadOptions { - optionsConfig, err := getConfig(optionsFile) - if err != nil { - logger.Fatalf( - "can't read options config '%s': %s", optionsFile, err, - ) - } - - targetURL, err = optionsConfig.GetString("url") - if err != nil { - logger.Fatal( - "can't read `url` value from options file (%s): %s", - optionsFile, err, - ) - } - - targetFile, err = optionsConfig.GetString("file") - if err != nil { - logger.Fatal( - "can't read `file` value from options file (%s): %s", - optionsFile, err, - ) - } - } - markdownData, err := ioutil.ReadFile(targetFile) if err != nil { logger.Fatal(err) @@ -597,72 +556,3 @@ func getConfig(path string) (zhash.Hash, error) { return zhash.HashFromMap(configData), nil } - -func extractMeta(data []byte) (*Meta, error) { - headerPattern := regexp.MustCompile(`\[\]:\s*#\s*\(([^:]+):\s*(.*)\)`) - - var meta *Meta - - scanner := bufio.NewScanner(bytes.NewBuffer(data)) - for scanner.Scan() { - line := scanner.Text() - - if err := scanner.Err(); err != nil { - return nil, err - } - - matches := headerPattern.FindStringSubmatch(line) - if matches == nil { - break - } - - if meta == nil { - meta = &Meta{} - } - - header := strings.Title(matches[1]) - - switch header { - case HeaderParent: - meta.Parents = append(meta.Parents, matches[2]) - - case HeaderSpace: - meta.Space = strings.ToUpper(matches[2]) - - case HeaderTitle: - meta.Title = strings.TrimSpace(matches[2]) - - case HeaderLayout: - meta.Layout = strings.TrimSpace(matches[2]) - - default: - logger.Errorf( - `encountered unknown header '%s' line: %#v`, - header, - line, - ) - - continue - } - } - - if meta == nil { - return nil, nil - } - - if meta.Space == "" { - return nil, fmt.Errorf( - "space key is not set (%s header is not set)", - HeaderSpace, - ) - } - - if meta.Title == "" { - return nil, fmt.Errorf( - "page title is not set (%s header is not set)", - HeaderTitle, - ) - } - - return meta, nil -} diff --git a/meta.go b/meta.go new file mode 100644 index 0000000..d7c446a --- /dev/null +++ b/meta.go @@ -0,0 +1,92 @@ +package main + +import ( + "bufio" + "bytes" + "fmt" + "regexp" + "strings" +) + +const ( + HeaderParent string = `Parent` + HeaderSpace = `Space` + HeaderTitle = `Title` + HeaderLayout = `Layout` +) + +type Meta struct { + Parents []string + Space string + Title string + Layout string +} + +func extractMeta(data []byte) (*Meta, error) { + headerPattern := regexp.MustCompile(`\[\]:\s*#\s*\(([^:]+):\s*(.*)\)`) + + var meta *Meta + + scanner := bufio.NewScanner(bytes.NewBuffer(data)) + for scanner.Scan() { + line := scanner.Text() + + if err := scanner.Err(); err != nil { + return nil, err + } + + matches := headerPattern.FindStringSubmatch(line) + if matches == nil { + break + } + + if meta == nil { + meta = &Meta{} + } + + header := strings.Title(matches[1]) + + switch header { + case HeaderParent: + meta.Parents = append(meta.Parents, matches[2]) + + case HeaderSpace: + meta.Space = strings.ToUpper(matches[2]) + + case HeaderTitle: + meta.Title = strings.TrimSpace(matches[2]) + + case HeaderLayout: + meta.Layout = strings.TrimSpace(matches[2]) + + default: + logger.Errorf( + `encountered unknown header '%s' line: %#v`, + header, + line, + ) + + continue + } + } + + if meta == nil { + return nil, nil + } + + if meta.Space == "" { + return nil, fmt.Errorf( + "space key is not set (%s header is not set)", + HeaderSpace, + ) + } + + if meta.Title == "" { + return nil, fmt.Errorf( + "page title is not set (%s header is not set)", + HeaderTitle, + ) + } + + return meta, nil +}