diff options
author | Gabriel Arakaki Giovanini <mail@gabrielgio.me> | 2023-08-26 17:32:58 +0200 |
---|---|---|
committer | Gabriel Arakaki Giovanini <mail@gabrielgio.me> | 2023-08-26 17:36:15 +0200 |
commit | dd2a1c38a5a9f561d58b58da56d3230fd715fcde (patch) | |
tree | d4161e5f1c0e9718ef739745f6a9619c10701f8e /main.go | |
download | apkdoc-dd2a1c38a5a9f561d58b58da56d3230fd715fcde.tar.gz apkdoc-dd2a1c38a5a9f561d58b58da56d3230fd715fcde.tar.bz2 apkdoc-dd2a1c38a5a9f561d58b58da56d3230fd715fcde.zip |
Initial commit
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 75 |
1 files changed, 75 insertions, 0 deletions
@@ -0,0 +1,75 @@ +package main + +import ( + "archive/tar" + "bufio" + "compress/gzip" + "errors" + "flag" + "fmt" + "io" + "net/http" +) + +func fechIndex(url string) (io.ReadCloser, error) { + resp, err := http.Get(url) + if err != nil { + return nil, err + } + + if resp.StatusCode != 200 { + return nil, errors.New("Invlid response") + } + + return resp.Body, nil +} + +func main() { + url := flag.String("url", "", "Url to the APKINDEX.tar.gz") + flag.Parse() + + tarStream, err := fechIndex(*url) + if err != nil { + panic("Error fecthing the index: " + err.Error()) + } + + defer tarStream.Close() + + archive, err := gzip.NewReader(tarStream) + if err != nil { + panic("Error creating gzip reader: " + err.Error()) + } + + tr := tar.NewReader(archive) + + for { + h, err := tr.Next() + if err != nil { + panic("Error reading next tar entry: " + err.Error()) + } + + if h.FileInfo().Name() == "APKINDEX" { + break + } + } + + s := bufio.NewScanner(tr) + + entries := make([]*Entry, 0) + lines := make([]string, 0) + + for s.Scan() { + l := s.Text() + if l == "" { + entry := Parse(lines) + entries = append(entries, entry) + lines = make([]string, 0) + } else { + lines = append(lines, l) + } + } + + for _, e := range entries { + fmt.Printf("%+v\n", e) + } +} |