package deb822
import (
"fmt"
"html/template"
"io"
"log"
"os"
"regexp"
"strings"
)
type Package struct {
Name string
Version string
Description string
LongDescription string
Depends []string
Recommends []string
Maintainer string
Filename string
Suite string
Component string
Section string
Priority string
}
var regexpRemove = regexp.MustCompile("(DEVUAN/|DEBIAN/|[0-9]+:)")
var regexpDots = regexp.MustCompilePOSIX("(^[[:blank:]]+.[[:blank:]]*$)")
func NewPackage(s Stanza) (Package, error) {
var p Package
if s["Package"] == "" || s["Version"] == "" {
return p, fmt.Errorf("empty package")
}
p.Name = s["Package"]
p.Version = regexpRemove.ReplaceAllString(s["Version"], "")
descr := strings.SplitN(s["Description"], "\n", 2)
p.Description = descr[0]
if len(descr) > 1 {
p.LongDescription = regexpDots.ReplaceAllString(descr[1], "")
}
p.Maintainer = s["Maintainer"]
p.Depends = strings.Split(s["Depends"], ",")
if len(p.Depends) == 0 {
p.Depends = nil
}
p.Recommends = strings.Split(s["Recommends"], ",")
if len(p.Recommends) == 0 {
p.Recommends = nil
}
p.Section = s["Section"]
p.Priority = s["Priority"]
return p, nil
}
func PrintPackage(p Package, templ string, out io.Writer) {
t, err := template.New("webpage").Parse(templ)
if err != nil {
log.Fatal("Error in template")
}
t.Execute(out, p)
}
/*Stanza2HtmlPage Render the html webpage of a package and save it in the
/* corresponding "pool" directory.
*/
func Stanza2HtmlPage(s Stanza, templ string, baseDir string, suite string, component string) error {
fname := s["Filename"]
if fname == "" {
return fmt.Errorf("No Filename provided")
}
p, err := NewPackage(s)
p.Suite = suite
p.Component = component
if err != nil {
log.Fatal("empty package!!!")
}
nameVersion := fmt.Sprintf("%s_%s", p.Name, p.Version)
fmt.Printf(" nameVersion: %s\n", nameVersion)
fmt.Printf(" baseDir: %s\n", baseDir)
fname = regexpRemove.ReplaceAllString(fname, "")
fmt.Printf(" fname: %s\n", fname)
/// FIXME!!!! ERROR IN DETECTION OF PACKAGE NAME!!!!
dirName := fmt.Sprintf("%s/%s", baseDir, strings.Split(fname, nameVersion)[0])
err = os.MkdirAll(dirName, 0755)
if err == nil {
fmt.Printf(" dirName: %s\n Package: %s\n Version: %s\n", dirName, p.Name, p.Version)
htmlFile := fmt.Sprintf("%s%s_%s.html", dirName, p.Name, p.Version)
fmt.Printf("Creating file: %s\n---------\n", htmlFile)
if f, err := os.Open(htmlFile); err == nil {
f.Close()
fmt.Printf("File %s exists -- skipping\n", htmlFile)
return err
}
file, err := os.Create(htmlFile)
if err != nil {
err = fmt.Errorf("Error creating file: %s", err)
return err
} else {
PrintPackage(p, templ, file)
file.Close()
return nil
}
} else {
err = fmt.Errorf("Error creating path: %s", err)
return err
}
return nil
}