diff options
author | KatolaZ <katolaz@freaknet.org> | 2018-01-17 10:40:57 +0000 |
---|---|---|
committer | KatolaZ <katolaz@freaknet.org> | 2018-01-17 10:40:57 +0000 |
commit | 28255b5f4d41d0fface2d60ab49c29998e004e56 (patch) | |
tree | 30fc6e794e1b32cb6c09800223b0b267b9fb5b91 /d1pkgweb.go | |
parent | 91a0ea7f4fa5befa4b491bfd9380e5b8c1f0f7e7 (diff) |
first parallel version
Diffstat (limited to 'd1pkgweb.go')
-rw-r--r-- | d1pkgweb.go | 91 |
1 files changed, 65 insertions, 26 deletions
diff --git a/d1pkgweb.go b/d1pkgweb.go index b8b048f..d78f004 100644 --- a/d1pkgweb.go +++ b/d1pkgweb.go @@ -9,6 +9,57 @@ import ( "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) { + + c := make(chan error) + numWorkers := 0 + + for _, suiteCfg := range relCfg.Suites { // For each suite of the release + numWorkers++ + go processSuite(suiteCfg, relCfg, baseDir, c) + } + + select { + case e := <-c: + numWorkers-- + if numWorkers == 0 { + result <- e + return + } + } + result <- nil + return +} + func main() { args := os.Args @@ -21,34 +72,22 @@ func main() { confFile := args[1] conf := readConfig(confFile) - //fmt.Printf("Got config: %s\n", *conf) + c := make(chan error) + numWorkers := 0 for _, relCfg := range conf.PkgSets { // For each release... - relName := relCfg.Release - for _, suiteCfg := range relCfg.Suites { // For each suite of the 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, ".", relName, suiteName, component.Name) - } else { - fmt.Printf("error: %s\n", err) - } - } - } - } + numWorkers++ + go processRelease(relCfg, ".", c) + } + var err = make([]error, numWorkers) + + select { + case e := <-c: + numWorkers-- + err[numWorkers] = e + if numWorkers == 0 { + fmt.Fprintf(os.Stderr, "Exiting from main....") + os.Exit(0) } } } |