From 5028abccb508007a60ef80f9bb9d722f45b6ac5d Mon Sep 17 00:00:00 2001 From: Bob Badour Date: Wed, 9 Feb 2022 11:56:58 -0800 Subject: [PATCH] Support multiple library names per target. The prior interface to make supported only a single package name per target; although, a target might have multiple licenses each with its own package name. Bug: 151177513 Bug: 210912771 Test: m all dist Test: flash; About Phone -> Legal Information -> Third-party licenses Change-Id: I5cf1964ec18af91ec7e258a1c6722527e3596cf3 --- tools/compliance/noticeindex.go | 40 ++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/tools/compliance/noticeindex.go b/tools/compliance/noticeindex.go index 7bebe3d124..72f04ff879 100644 --- a/tools/compliance/noticeindex.go +++ b/tools/compliance/noticeindex.go @@ -20,6 +20,7 @@ import ( "fmt" "io" "io/fs" + "net/url" "path/filepath" "regexp" "sort" @@ -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{}{} } @@ -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) { - if _, ok := ni.libHash[libName]; !ok { - ni.libHash[libName] = make(map[hash]struct{}) - } + 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{}) + } if _, ok := ni.hashLibInstall[h]; !ok { ni.hashLibInstall[h] = make(map[string]map[string]struct{}) } @@ -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 } @@ -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 }) @@ -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 {