Merge "Support multiple library names per target." am: 5796849ac8
am: ba48b68251
am: 85f18c766c
Original change: https://android-review.googlesource.com/c/platform/build/+/1978111 Change-Id: I1620a0352071e3a760b477ac689a610d3743a9ad
This commit is contained in:
commit
2fcee10b71
1 changed files with 30 additions and 10 deletions
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue