package main import ( "bufio" "compress/gzip" "d1pkgweb/deb822" "fmt" "net/http" "os" ) func processSuite(suiteCfg SuiteCfg, relCfg ReleaseCfg, baseDir string, result chan error) { relName := relCfg.Release suiteName := suiteCfg.Name for _, component := range suiteCfg.Components { // For each component in the suite fullURL := fmt.Sprintf("%s/%s", relCfg.RepoURL, component.URL) fmt.Fprintf(os.Stderr, "Processing: %s\n", fullURL) f, err := http.Get(fullURL) if err != nil { fmt.Fprintf(os.Stderr, "...Ignoring %s\n", fullURL) } else { uncompressed, err := gzip.NewReader(f.Body) if err != nil { fmt.Fprintf(os.Stderr, "error uncompressing %s\n", fullURL) continue } r := bufio.NewScanner(uncompressed) for s, err := deb822.ScanStanza(r); s["Package"] != ""; s, err = deb822.ScanStanza(r) { if err == nil { deb822.Stanza2HtmlPage(s, pkgTempl, baseDir, relName, suiteName, component.Name) } else { fmt.Printf("error: %s\n", err) } } } } result <- nil } func processRelease(relCfg ReleaseCfg, baseDir string, result chan error) { children := make(chan error) numWorkers := 0 for _, suiteCfg := range relCfg.Suites { // For each suite in the release, run a processSuite numWorkers++ go processSuite(suiteCfg, relCfg, baseDir, children) } for { <-children numWorkers-- if numWorkers == 0 { break } } result <- nil return } func main() { args := os.Args if len(args) < 2 { fmt.Printf("Usage: %s \n", args[0]) return } confFile := args[1] conf := readConfig(confFile) children := make(chan error) numWorkers := 0 for _, relCfg := range conf.PkgSets { // For each release, run a new processRelease... numWorkers++ go processRelease(relCfg, ".", children) } for { <-children numWorkers-- if numWorkers == 0 { fmt.Fprintf(os.Stderr, "Exiting from main....") break } } }