From: Sergey Matveev Date: Mon, 1 Jun 2020 09:06:49 +0000 (+0300) Subject: Yet another duplicate lines removing X-Git-Tag: v0.6.4^0 X-Git-Url: http://www.git.stargrave.org/?p=sgblog.git;a=commitdiff_plain;h=15c432b49be7c1f2b81ab393be8a90a68442f6d8 Yet another duplicate lines removing --- 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 { diff --git a/common.go b/common.go index 57419d0..db523a6 100644 --- a/common.go +++ b/common.go @@ -2,6 +2,6 @@ package sgblog const ( - Version = "0.6.3" + Version = "0.6.4" WhenFmt = "2006-01-02 15:04:05Z07:00" )