136 lines
3.1 KiB
Go
136 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"text/template"
|
|
|
|
"os/exec"
|
|
|
|
"src.dualinventive.com/go/common/version/version"
|
|
)
|
|
|
|
var (
|
|
reviewHeaderTex = `% select the document template
|
|
\documentclass[a4paper]{di/codereview}
|
|
\title{@.PROJECT_NAME@}
|
|
\author{@.USER@}
|
|
\productowner{Dual Inventive Techology Centre B.V.}
|
|
\releasedate{\DIdate\today}
|
|
\documentstatus{Concept}
|
|
\documentversion{@.VERSION@}
|
|
\begin{document}
|
|
\maketitle
|
|
`
|
|
reviewFooterTex = `
|
|
\end{document}`
|
|
|
|
reviewFile = `
|
|
\newpage
|
|
\rhead{\detokenize{@.FILENAME@}}
|
|
\inputminted[fontsize=\footnotesize,tabsize=8,linenos=true,numberblanklines=true,showspaces=false,breaklines=true]{@.FILETYPE@}{@.FILENAME@}
|
|
`
|
|
)
|
|
|
|
func main() {
|
|
var sourcefiles []string
|
|
var crMatches []string
|
|
crtxt, err := ioutil.ReadFile("codereview.txt")
|
|
if err == nil {
|
|
crMatches = strings.Split(string(crtxt), "\n")
|
|
}
|
|
|
|
filepath.Walk(".", func(path string, f os.FileInfo, err error) error {
|
|
if strings.HasPrefix(path, "vendor") || f.IsDir() {
|
|
return nil
|
|
}
|
|
include := true
|
|
if len(crMatches) > 0 {
|
|
include = false
|
|
for _, match := range crMatches {
|
|
if strings.HasPrefix(path, match) {
|
|
include = true
|
|
}
|
|
}
|
|
}
|
|
if include && strings.HasSuffix(path, ".go") {
|
|
sourcefiles = append(sourcefiles, path)
|
|
}
|
|
return nil
|
|
})
|
|
|
|
crfile, err := ioutil.TempFile(".", "codereview")
|
|
defer func() {
|
|
name := crfile.Name()
|
|
crfile.Close()
|
|
os.Remove(name)
|
|
}()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
t, err := template.New("tex").Delims("@", "@").Parse(reviewHeaderTex)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
user := os.Getenv("USER")
|
|
if len(user) == 0 {
|
|
user = os.Getenv("USERNAME")
|
|
}
|
|
|
|
ver := version.GetVersion()
|
|
|
|
tmplData := map[string]string{
|
|
"VERSION": ver,
|
|
"PROJECT_NAME": os.Getenv("PROJECT_NAME"),
|
|
"USER": user,
|
|
}
|
|
|
|
if err := t.Execute(crfile, tmplData); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
for _, file := range sourcefiles {
|
|
rt, err := template.New("tex").Delims("@", "@").Parse(reviewFile)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
tmplData := map[string]string{
|
|
"FILENAME": file,
|
|
"FILETYPE": "go",
|
|
}
|
|
if err := rt.Execute(crfile, tmplData); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
crfile.WriteString(reviewFooterTex)
|
|
|
|
fmt.Println("PDF-Latex (pass 1)")
|
|
c := exec.Command("/usr/local/texlive/2016/bin/x86_64-linux/pdflatex", "-interaction=batchmode", "-shell-escape", crfile.Name())
|
|
if err := c.Run(); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Println("PDF-Latex (pass 2)")
|
|
c = exec.Command("/usr/local/texlive/2016/bin/x86_64-linux/pdflatex", "-interaction=batchmode", "-shell-escape", crfile.Name())
|
|
if err := c.Run(); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Println("PDF-Latex (pass 3)")
|
|
c = exec.Command("/usr/local/texlive/2016/bin/x86_64-linux/pdflatex", "-interaction=batchmode", "-shell-escape", crfile.Name())
|
|
if err := c.Run(); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Println("Codereview is present in codereview-" + ver + ".pdf")
|
|
os.Remove(crfile.Name() + ".aux")
|
|
os.Remove(crfile.Name() + ".log")
|
|
os.Remove(crfile.Name() + ".out")
|
|
os.Rename(crfile.Name()+".pdf", os.Getenv("PROJECT_NAME")+"-"+ver+".pdf")
|
|
}
|