diff options
Diffstat (limited to 'doMake.go')
| -rw-r--r-- | doMake.go | 61 |
1 files changed, 61 insertions, 0 deletions
@@ -1,12 +1,20 @@ package main import ( + "crypto/md5" + "crypto/sha256" + "errors" + "fmt" + "io" "os" + "path/filepath" "strings" "go.wit.com/lib/debian" + "go.wit.com/lib/gui/shell" "go.wit.com/lib/protobuf/zoopb" "go.wit.com/log" + "google.golang.org/protobuf/types/known/timestamppb" ) // os.Chdir(me.mirrorsDir) @@ -48,3 +56,56 @@ func doMakePackagesFile(all *zoopb.Packages) string { } return pfile } + +func populateDebInfo(p *zoopb.Package) error { + // SIMPLE SANITY CHECKS + if p.DebInfo != nil { + // already added p.DebInfo + return nil + } + fullname := filepath.Join(me.pb.BaseDir, p.Filename) + cmd := []string{"dpkg", "-I", fullname} + r := shell.Run(cmd) + if r.Error != nil { + return r.Error + } + if r.Exit != 0 { + return errors.New("dpkg returned -1") + } + stat, err := os.Stat(fullname) + if err != nil { + return err + } + filedata, err := os.Open(fullname) + if err != nil { + return err + } + defer filedata.Close() + // SIMPLE SANITY CHECKS END + + // SHA256 HASH + p.DebInfo = new(zoopb.DebInfo) + + hSHA256 := sha256.New() + hMD5 := md5.New() // probably deprecate, but love md5sum too much + // hSHA1 := sha1.New() // deprecated + + // TeeReader allows writing to multiple hashers at once + // multiWriter := io.MultiWriter(hMD5, hSHA1, hSHA256) + multiWriter := io.MultiWriter(hSHA256, hMD5) + if _, err := io.Copy(multiWriter, filedata); err != nil { + return err + } + p.DebInfo.SHA256 = fmt.Sprintf("%x", hSHA256.Sum(nil)) // should be the standard now + p.DebInfo.MD5SUM = fmt.Sprintf("%x", hMD5.Sum(nil)) // probably deprecate + // p.DebInfo.SHA1 = fmt.Sprintf("%x", hSHA1.Sum(nil)) // deprecated + // SHA256 HASH END + + // set file create time + p.Ctime = timestamppb.New(stat.ModTime()) + + // PARSE "dpkg -I <p.Filename>", then exit as we are done + all := strings.Join(r.Stdout, "\n") + debian.ParseDpkgOutputIntoPB(p, all) + return nil +} |
