func SourceFromDsc(dsc *control.DSC, directory string) (*Source, error) { pkg := Source{} paragraph := dsc.Paragraph paragraph.Set("Directory", directory) // paragraph.Set("Filename", debFile.Path) return &pkg, control.UnpackFromParagraph(paragraph, &pkg) }
// Create a Package entry from a deb.Deb file. This will copy the binary // .deb Control file into the Package entry, and set information as to // the location of the file, the size of the file, and hash the file. func PackageFromDeb(debFile deb.Deb) (*Package, error) { pkg := Package{} paragraph := debFile.Control.Paragraph paragraph.Set("Filename", debFile.Path) /* Now, let's do some magic */ fd, err := os.Open(debFile.Path) if err != nil { return nil, err } stat, err := fd.Stat() if err != nil { return nil, err } paragraph.Set("Size", strconv.Itoa(int(stat.Size()))) /* Right, now, in addition, we ought to hash the crap out of the file */ md5sum := md5.New() sha1 := sha1.New() sha256 := sha256.New() writer := io.MultiWriter(md5sum, sha256, sha1) if _, err := io.Copy(writer, fd); err != nil { return nil, err } for key, hasher := range map[string]hash.Hash{ "MD5sum": md5sum, "SHA1": sha1, "SHA256": sha256, } { paragraph.Set(key, fmt.Sprintf("%x", hasher.Sum(nil))) } return &pkg, control.UnpackFromParagraph(debFile.Control.Paragraph, &pkg) }