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") }