X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=cmd%2Fsgblog-comment-add%2Fmain.go;h=837666c3b8dd12a1f71b713dbefbc36c29666da4;hb=15c432b49be7c1f2b81ab393be8a90a68442f6d8;hp=31b3d01a377781cc3e8e4383a3057c943fdb432b;hpb=6b3dbfabbea052c7a70831703a08df7b7c929684;p=sgblog.git diff --git a/cmd/sgblog-comment-add/main.go b/cmd/sgblog-comment-add/main.go index 31b3d01..837666c 100644 --- a/cmd/sgblog-comment-add/main.go +++ b/cmd/sgblog-comment-add/main.go @@ -39,6 +39,37 @@ import ( "go.stargrave.org/sgblog" ) +// Remove various whitespaces and excess lines, because git-notes-add +// will remove and we have to know exact bytes count +func cleanupBody(body string) string { + lines := strings.Split(string(body), "\n") + for i, line := range lines { + line = strings.ReplaceAll(line, " ", " ") + line = strings.TrimRight(line, " \r") + lines[i] = line + } + for lines[0] == "" { + lines = lines[1:] + } + for lines[len(lines)-1] == "" { + lines = lines[:len(lines)-1] + } + withoutDups := make([]string, 0, len(lines)) + emptyMet := false + for _, line := range lines { + if line == "" { + if emptyMet { + continue + } + emptyMet = true + } else { + emptyMet = false + } + withoutDups = append(withoutDups, line) + } + return strings.Join(withoutDups, "\n") +} + func main() { gitCmd := flag.String("git-cmd", "/usr/local/bin/git", "Path to git executable") gitDir := flag.String("git-dir", "", "Path to .git repository") @@ -105,29 +136,13 @@ func main() { note, _ := cmd.Output() note = bytes.TrimRight(note, "\r\n") - // Remove trailing whitespaces, because git-notes-add will remove - // them anyway, and we have to know exact bytes count. Also convert - // all tabs into spaces - lines := strings.Split(string(body), "\n") - for i, line := range lines { - line = strings.ReplaceAll(line, " ", " ") - line = strings.TrimRight(line, " \r") - lines[i] = line - } - for lines[0] == "" { - lines = lines[1:] - } - for lines[len(lines)-1] == "" { - lines = lines[:len(lines)-1] - } - buf := bytes.NewBuffer(note) w := netstring.NewWriter(buf) w.WriteChunk([]byte(fmt.Sprintf( "From: %s\nDate: %s\n\n%s", from, time.Now().UTC().Format(sgblog.WhenFmt), - strings.Join(lines, "\n"), + cleanupBody(string(body)), ))) if *dryRun {