Loading tools/compliance/noticeindex.go +30 −10 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import ( "fmt" "io" "io/fs" "net/url" "path/filepath" "regexp" "sort" Loading Loading @@ -93,13 +94,14 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic } hashes := make(map[hash]struct{}) for _, text := range tn.LicenseTexts() { if _, ok := ni.hash[text]; !ok { err := ni.addText(text) fname := strings.SplitN(text, ":", 2)[0] if _, ok := ni.hash[fname]; !ok { err := ni.addText(fname) if err != nil { return nil, err } } hash := ni.hash[text] hash := ni.hash[fname] if _, ok := hashes[hash]; !ok { hashes[hash] = struct{}{} } Loading @@ -108,11 +110,12 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic return hashes, nil } link := func(libName string, hashes map[hash]struct{}, installPaths []string) { link := func(tn *TargetNode, hashes map[hash]struct{}, installPaths []string) { for h := range hashes { libName := ni.getLibName(tn, h) if _, ok := ni.libHash[libName]; !ok { ni.libHash[libName] = make(map[hash]struct{}) } for h := range hashes { if _, ok := ni.hashLibInstall[h]; !ok { ni.hashLibInstall[h] = make(map[string]map[string]struct{}) } Loading Loading @@ -160,7 +163,7 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic if err != nil { return false } link(ni.getLibName(tn), hashes, installPaths) link(tn, hashes, installPaths) if tn.IsContainer() { return true } Loading @@ -170,7 +173,7 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic if err != nil { return false } link(ni.getLibName(r.actsOn), hashes, installPaths) link(r.actsOn, hashes, installPaths) } return false }) Loading Loading @@ -305,7 +308,24 @@ func (ni *NoticeIndex) HashText(h hash) []byte { } // getLibName returns the name of the library associated with `noticeFor`. func (ni *NoticeIndex) getLibName(noticeFor *TargetNode) string { func (ni *NoticeIndex) getLibName(noticeFor *TargetNode, h hash) string { for _, text := range noticeFor.LicenseTexts() { if !strings.Contains(text, ":") { continue } fields := strings.SplitN(text, ":", 2) fname, pname := fields[0], fields[1] if ni.hash[fname].key != h.key { continue } ln, err := url.QueryUnescape(pname) if err != nil { continue } return ln } // use name from METADATA if available ln := ni.checkMetadata(noticeFor) if len(ln) > 0 { Loading Loading
tools/compliance/noticeindex.go +30 −10 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import ( "fmt" "io" "io/fs" "net/url" "path/filepath" "regexp" "sort" Loading Loading @@ -93,13 +94,14 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic } hashes := make(map[hash]struct{}) for _, text := range tn.LicenseTexts() { if _, ok := ni.hash[text]; !ok { err := ni.addText(text) fname := strings.SplitN(text, ":", 2)[0] if _, ok := ni.hash[fname]; !ok { err := ni.addText(fname) if err != nil { return nil, err } } hash := ni.hash[text] hash := ni.hash[fname] if _, ok := hashes[hash]; !ok { hashes[hash] = struct{}{} } Loading @@ -108,11 +110,12 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic return hashes, nil } link := func(libName string, hashes map[hash]struct{}, installPaths []string) { link := func(tn *TargetNode, hashes map[hash]struct{}, installPaths []string) { for h := range hashes { libName := ni.getLibName(tn, h) if _, ok := ni.libHash[libName]; !ok { ni.libHash[libName] = make(map[hash]struct{}) } for h := range hashes { if _, ok := ni.hashLibInstall[h]; !ok { ni.hashLibInstall[h] = make(map[string]map[string]struct{}) } Loading Loading @@ -160,7 +163,7 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic if err != nil { return false } link(ni.getLibName(tn), hashes, installPaths) link(tn, hashes, installPaths) if tn.IsContainer() { return true } Loading @@ -170,7 +173,7 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic if err != nil { return false } link(ni.getLibName(r.actsOn), hashes, installPaths) link(r.actsOn, hashes, installPaths) } return false }) Loading Loading @@ -305,7 +308,24 @@ func (ni *NoticeIndex) HashText(h hash) []byte { } // getLibName returns the name of the library associated with `noticeFor`. func (ni *NoticeIndex) getLibName(noticeFor *TargetNode) string { func (ni *NoticeIndex) getLibName(noticeFor *TargetNode, h hash) string { for _, text := range noticeFor.LicenseTexts() { if !strings.Contains(text, ":") { continue } fields := strings.SplitN(text, ":", 2) fname, pname := fields[0], fields[1] if ni.hash[fname].key != h.key { continue } ln, err := url.QueryUnescape(pname) if err != nil { continue } return ln } // use name from METADATA if available ln := ni.checkMetadata(noticeFor) if len(ln) > 0 { Loading