Skip to content

Commit

Permalink
Add in support for spdx rdf and spdx tv
Browse files Browse the repository at this point in the history
Fixes #19
  • Loading branch information
justinabrahms committed Jan 12, 2023
1 parent 73d4ef7 commit 67a2242
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 15 deletions.
48 changes: 48 additions & 0 deletions examples/spdx-example.tv
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
SPDXVersion: SPDX-2.2
DataLicense: CC0-1.0
SPDXID: SPDXRef-DOCUMENT
DocumentName: hello-src
DocumentNamespace: https://swinslow.net/spdx-examples/example2/hello-src-v3
Creator: Person: Steve Winslow ([email protected])
Creator: Tool: github.com/spdx/tools-golang/builder
Creator: Tool: github.com/spdx/tools-golang/idsearcher
Created: 2021-08-26T01:47:00Z

##### Package: hello-src

PackageName: hello-src
SPDXID: SPDXRef-Package-hello-src
PackageDownloadLocation: git+https://github.com/swinslow/spdx-examples.git#example2/content/src
FilesAnalyzed: true
PackageVerificationCode: c6cb0949d7cd7439fce8690262a0946374824639
PackageLicenseConcluded: NOASSERTION
PackageLicenseInfoFromFiles: GPL-3.0-or-later
PackageLicenseDeclared: GPL-3.0-or-later
PackageCopyrightText: NOASSERTION

Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-Package-hello-src

FileName: /Makefile
SPDXID: SPDXRef-Makefile
FileType: SOURCE
FileChecksum: SHA1: 69a2e85696fff1865c3f0686d6c3824b59915c80
FileChecksum: SHA256: 5da19033ba058e322e21c90e6d6d859c90b1b544e7840859c12cae5da005e79c
FileChecksum: MD5: 559424589a4f3f75fd542810473d8bc1
LicenseConcluded: GPL-3.0-or-later
LicenseInfoInFile: GPL-3.0-or-later
FileCopyrightText: NOASSERTION

FileName: /hello.c
SPDXID: SPDXRef-hello-src
FileType: SOURCE
FileChecksum: SHA1: 20862a6d08391d07d09344029533ec644fac6b21
FileChecksum: SHA256: b4e5ca56d1f9110ca94ed0bf4e6d9ac11c2186eb7cd95159c6fdb50e8db5a823
FileChecksum: MD5: 935054fe899ca782e11003bbae5e166c
LicenseConcluded: GPL-3.0-or-later
LicenseInfoInFile: GPL-3.0-or-later
FileCopyrightText: Copyright Contributors to the spdx-examples project.

##### Relationships

Relationship: SPDXRef-Makefile BUILD_TOOL_OF SPDXRef-Package-hello-src

39 changes: 24 additions & 15 deletions pkg/spdx/document.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@
package spdx

import (
"bytes"
"errors"
"fmt"
"os"
"io/ioutil"

spdx_json "github.com/spdx/tools-golang/json"
spdx_rdf "github.com/spdx/tools-golang/rdfloader"
spdx_tv "github.com/spdx/tools-golang/tvloader"

"github.com/spdx/tools-golang/spdx/common"
"github.com/spdx/tools-golang/spdx/v2_2"
Expand All @@ -33,28 +36,34 @@ type File struct {
}

func LoadDocument(path string) (Document, error) {
var err1 error
f, err := os.Open(path)
f, err := ioutil.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("opening SPDX document: %w", err)
}

doc23, err1 := spdx_json.Load2_3(f)
if err1 == nil && doc23 != nil {
doc23, err := spdx_json.Load2_3(bytes.NewReader(f))
if err == nil && doc23 != nil {
return documentFromSPDX(doc23)
}

// First, try to open SPDX 2.2
doc22, err := spdx_json.Load2_2(f)
if err != nil {
err := fmt.Errorf(errOpenDoc, "v2.2", err)
if err1 != nil {
err = fmt.Errorf("%s + opening 2.3: %w ", err.Error(), err1)
}
return nil, err
doc23, err = spdx_rdf.Load2_3(bytes.NewReader(f))
if err == nil && doc23 != nil {
return documentFromSPDX(doc23)
}
doc23, err = spdx_tv.Load2_3(bytes.NewReader(f))
if err == nil && doc23 != nil {
return documentFromSPDX(doc23)
}

if doc22 != nil {
doc22, err := spdx_json.Load2_2(bytes.NewReader(f))
if err == nil && doc22 != nil {
return documentFromSPDX(doc22)
}
doc22, err = spdx_rdf.Load2_2(bytes.NewReader(f))
if err == nil && doc22 != nil {
return documentFromSPDX(doc22)
}
doc22, err = spdx_tv.Load2_2(bytes.NewReader(f))
if err == nil && doc22 != nil {
return documentFromSPDX(doc22)
}

Expand Down
9 changes: 9 additions & 0 deletions pkg/spdx/document_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,12 @@ func TestLoadDocument(t *testing.T) {
// _, ok = doc.(*Document_22)
// require.True(t, ok)
}

func TestLoadTV22(t *testing.T) {
doc, err := LoadDocument("../../examples/spdx-example.tv")
require.NoError(t, err)
require.NotNil(t, doc)
// even though this is actually a 2.2 doc, it does validly parse into a 2.3 doc.
_, ok := doc.(*Document_23)
require.True(t, ok)
}

0 comments on commit 67a2242

Please sign in to comment.