Merge "Support multiple library names per target." am: 5796849ac8 am: ba48b68251

Original change: https://android-review.googlesource.com/c/platform/build/+/1978111

Change-Id: I23aacc92824f5b762245499c9fe92806f2d21552
This commit is contained in:
Treehugger Robot 2022-02-11 22:49:19 +00:00 committed by Automerger Merge Worker
commit 85f18c766c

View file

@ -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 {