summaryrefslogtreecommitdiff
path: root/doMake.go
diff options
context:
space:
mode:
Diffstat (limited to 'doMake.go')
-rw-r--r--doMake.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/doMake.go b/doMake.go
index 76ba16e..cc4c963 100644
--- a/doMake.go
+++ b/doMake.go
@@ -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
+}