Get copyrights from license file.
This commit is contained in:
parent
7726d76512
commit
2ccf308e1b
@ -6,6 +6,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
// local
|
// local
|
||||||
"go.dev.pztrn.name/glp/structs"
|
"go.dev.pztrn.name/glp/structs"
|
||||||
@ -40,7 +41,7 @@ func (o *outputter) Write(deps []*structs.Dependency, outFile string) {
|
|||||||
|
|
||||||
// Write dependencies information.
|
// Write dependencies information.
|
||||||
for _, dep := range deps {
|
for _, dep := range deps {
|
||||||
_ = writer.Write([]string{dep.Name, dep.Version, dep.License.Name, dep.VCS.VCSPath, dep.License.URL, dep.Parent, dep.License.Copyrights})
|
_ = writer.Write([]string{dep.Name, dep.Version, dep.License.Name, dep.VCS.VCSPath, dep.License.URL, dep.Parent, strings.Join(dep.License.Copyrights, ",")})
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
|
@ -2,6 +2,7 @@ package projecter
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
// stdlib
|
// stdlib
|
||||||
|
"bufio"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -63,6 +64,31 @@ func (p *Project) initialize(packagePath string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Parses license file for copyrights.
|
||||||
|
func (p *Project) parseLicenseForCopyrights(licencePath string) []string {
|
||||||
|
f, err := os.Open(licencePath)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Failed to open license file for reading:", err.Error())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var copyrights []string
|
||||||
|
|
||||||
|
// Read file data line by line.
|
||||||
|
gosum := bufio.NewScanner(f)
|
||||||
|
gosum.Split(bufio.ScanLines)
|
||||||
|
|
||||||
|
for gosum.Scan() {
|
||||||
|
line := gosum.Text()
|
||||||
|
|
||||||
|
if strings.HasPrefix(strings.ToLower(line), "copyright ") && !strings.Contains(strings.ToLower(line), "notice") {
|
||||||
|
copyrights = append(copyrights, line)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return copyrights
|
||||||
|
}
|
||||||
|
|
||||||
// Starts project parsing.
|
// Starts project parsing.
|
||||||
func (p *Project) process() {
|
func (p *Project) process() {
|
||||||
// We should determine project type.
|
// We should determine project type.
|
||||||
@ -137,8 +163,12 @@ func (p *Project) process() {
|
|||||||
|
|
||||||
dep.License.Name = licenseName
|
dep.License.Name = licenseName
|
||||||
|
|
||||||
// Generate license path.
|
// Generate license URL.
|
||||||
urlFormatter := strings.NewReplacer("{dir}", "", "{/dir}", "", "{file}", licenseFile, "{/file}", licenseFile, "#L{line}", "")
|
urlFormatter := strings.NewReplacer("{dir}", "", "{/dir}", "", "{file}", licenseFile, "{/file}", licenseFile, "#L{line}", "")
|
||||||
dep.License.URL = urlFormatter.Replace(dep.VCS.SourceURLFileTemplate)
|
dep.License.URL = urlFormatter.Replace(dep.VCS.SourceURLFileTemplate)
|
||||||
|
|
||||||
|
// As we should have dependency locally available we should try
|
||||||
|
// to parse license file to get copyrights.
|
||||||
|
dep.License.Copyrights = p.parseLicenseForCopyrights(filepath.Join(dep.LocalPath, licenseFile))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package structs
|
package structs
|
||||||
|
|
||||||
type License struct {
|
type License struct {
|
||||||
Copyrights string
|
Copyrights []string
|
||||||
Name string
|
Name string
|
||||||
URL string
|
URL string
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user