Initial commit.

This commit is contained in:
2020-02-06 15:09:25 +05:00
commit a7bf1f29ba
22 changed files with 1049 additions and 0 deletions

49
outputters/csv/csv.go Normal file
View File

@@ -0,0 +1,49 @@
package csv
import (
// stdlib
c "encoding/csv"
"log"
"os"
"strconv"
// local
"go.dev.pztrn.name/glp/structs"
)
var (
headers = []string{"Module", "License", "Repository URL", "License URL", "Project", "Copyrights"}
)
// Responsible for pushing passed data into CSV file.
type outputter struct{}
func (o *outputter) Write(deps []*structs.Dependency, outFile string) {
log.Println("Got", strconv.Itoa(len(deps)), "dependencies to write")
// Check if file exists and remove it if so.
if _, err := os.Stat(outFile); !os.IsNotExist(err) || err == nil {
os.Remove(outFile)
}
// Open file and create writer.
f, err := os.Create(outFile)
if err != nil {
log.Fatalln("Failed to open '"+outFile+"' for writing:", err.Error())
}
writer := c.NewWriter(f)
writer.Comma = ';'
// Write header first.
_ = writer.Write(headers)
// Write dependencies information.
for _, dep := range deps {
_ = writer.Write([]string{dep.Name, dep.License.Name, dep.VCS.VCSPath, dep.License.URL, dep.Parent, dep.License.Copyrights})
}
writer.Flush()
f.Close()
}

View File

@@ -0,0 +1,16 @@
package csv
import (
// stdlib
"log"
// local
"go.dev.pztrn.name/glp/outputters/outputinterface"
)
func Initialize() outputinterface.Interface {
log.Println("Initializing csv outputter...")
c := &outputter{}
return outputinterface.Interface(c)
}

34
outputters/exported.go Normal file
View File

@@ -0,0 +1,34 @@
package outputters
import (
// stdlib
"log"
// local
"go.dev.pztrn.name/glp/outputters/csv"
"go.dev.pztrn.name/glp/outputters/outputinterface"
"go.dev.pztrn.name/glp/structs"
)
var (
outputters map[string]outputinterface.Interface
)
func Initialize() {
log.Println("Initializing output providers")
outputters = make(map[string]outputinterface.Interface)
csvIface := csv.Initialize()
outputters["csv"] = csvIface
}
// Write pushes parsed data into outputter for writing.
func Write(outputter string, filePath string, deps []*structs.Dependency) {
outputterIface, found := outputters[outputter]
if !found {
log.Fatalln("Failed to find outputter '" + outputter + "'!")
}
outputterIface.Write(deps, filePath)
}

View File

@@ -0,0 +1,11 @@
package outputinterface
import (
// local
"go.dev.pztrn.name/glp/structs"
)
// Interface is a generic output writer interface.
type Interface interface {
Write(deps []*structs.Dependency, outFile string)
}