Git diff в HTML

Я пишу webhook в Go, который отправляет мне электронное письмо с diff для каждого коммита в определенный репозиторий. Прямо сейчас я отправляю diff как текст:

https://github.com/ee92/go-lambda/commit/ac56fc2cfe86c50e9d73ecb0f8db74c672e205cd.diff

Я хочу отправить его в формате HTML с красивым форматом, как вы видите на github или bitbucket, чтобы было легче прочитать, что изменилось. Действительно в тупик о том, как идти об этом. Ценю любые советы. Благодарю.

1 ответ

Вы могли бы использовать stdlib html/template библиотека для создания красивого HTML-шаблона и передачи вашей необработанной строки в качестве параметра:

https://golang.org/pkg/html/template/

import "text/template"
...
t, err := template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
err = t.ExecuteTemplate(out, "T", "<script>alert('you have been pwned')</script>")

будет производить это:

Hello, <script>alert('you have been pwned')</script>!

Итак, в вашем случае определите шаблон в отдельном файле, прочитайте его, а затем вызовите

t, err := template.ParseFiles("./path/to/template.html")
if err != nil {
    log.Fatal(err)
}

err = t.ExecuteTemplate(out, "T", rawDiffString)
if err != nil {
    log.Fatal(err)
}

который возьмет вашу строку сравнения и вставит ее в шаблон везде, где вы определили переменную шаблона.

Вам нужно будет прочитать спецификацию того, как Go анализирует HTML-шаблон, чтобы правильно отформатировать HTML-файл.

Другие вопросы по тегам