Add source for ppp (pika package processor)

This commit is contained in:
ferrreo 2023-08-24 19:05:08 +01:00
parent 8dec3de438
commit d659f8bed4
3 changed files with 81 additions and 0 deletions

5
src/go.mod Normal file
View File

@ -0,0 +1,5 @@
module ppp/v2
go 1.21.0
require github.com/ulikunitz/xz v0.5.11

2
src/go.sum Normal file
View File

@ -0,0 +1,2 @@
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=

74
src/main.go Normal file
View File

@ -0,0 +1,74 @@
package main
import (
"bufio"
"io"
"log"
"net/http"
"os"
"strings"
"github.com/ulikunitz/xz"
)
func main() {
base := os.Args[1]
target := os.Args[2]
basePackages := processFile(base)
targetPackages := processFile(target)
compare(basePackages, targetPackages)
}
func processFile(url string) map[string]string {
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
rdr := io.Reader(resp.Body)
if strings.HasSuffix(url, ".xz") {
r, err := xz.NewReader(resp.Body)
if err != nil {
log.Fatalf("xz error %s", err)
}
rdr = r
}
packages := make(map[string]string)
var currentPackage string
scanner := bufio.NewScanner(rdr)
for scanner.Scan() {
line := scanner.Text()
if line == "" {
currentPackage = ""
}
if currentPackage == "" {
if strings.HasPrefix(line, "Package: ") {
currentPackage = strings.TrimPrefix(line, "Package: ")
}
} else {
if strings.HasPrefix(line, "Version: ") {
packages[currentPackage] = strings.TrimPrefix(line, "Version: ")
}
}
}
return packages
}
func compare(basePackages map[string]string, targetPackages map[string]string) {
for pack, version := range targetPackages {
if baseVersion, ok := basePackages[pack]; ok {
if baseVersion != version {
println(pack)
}
} else {
println(pack)
}
}
}