1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage builder2v3 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "fmt" 7*ba677afaSXin Li "path/filepath" 8*ba677afaSXin Li 9*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/common" 10*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/v2_3" 11*ba677afaSXin Li "github.com/spdx/tools-golang/utils" 12*ba677afaSXin Li) 13*ba677afaSXin Li 14*ba677afaSXin Li// BuildFileSection2_3 creates an SPDX File (version 2.3), returning that 15*ba677afaSXin Li// file or error if any is encountered. Arguments: 16*ba677afaSXin Li// - filePath: path to file, relative to prefix 17*ba677afaSXin Li// - prefix: relative directory for filePath 18*ba677afaSXin Li// - fileNumber: integer index (unique within package) to use in identifier 19*ba677afaSXin Lifunc BuildFileSection2_3(filePath string, prefix string, fileNumber int) (*v2_3.File, error) { 20*ba677afaSXin Li // build the full file path 21*ba677afaSXin Li p := filepath.Join(prefix, filePath) 22*ba677afaSXin Li 23*ba677afaSXin Li // make sure we can get the file and its hashes 24*ba677afaSXin Li ssha1, ssha256, smd5, err := utils.GetHashesForFilePath(p) 25*ba677afaSXin Li if err != nil { 26*ba677afaSXin Li return nil, err 27*ba677afaSXin Li } 28*ba677afaSXin Li 29*ba677afaSXin Li // build the identifier 30*ba677afaSXin Li i := fmt.Sprintf("File%d", fileNumber) 31*ba677afaSXin Li 32*ba677afaSXin Li // now build the File section 33*ba677afaSXin Li f := &v2_3.File{ 34*ba677afaSXin Li FileName: filePath, 35*ba677afaSXin Li FileSPDXIdentifier: common.ElementID(i), 36*ba677afaSXin Li Checksums: []common.Checksum{ 37*ba677afaSXin Li { 38*ba677afaSXin Li Algorithm: common.SHA1, 39*ba677afaSXin Li Value: ssha1, 40*ba677afaSXin Li }, 41*ba677afaSXin Li { 42*ba677afaSXin Li Algorithm: common.SHA256, 43*ba677afaSXin Li Value: ssha256, 44*ba677afaSXin Li }, 45*ba677afaSXin Li { 46*ba677afaSXin Li Algorithm: common.MD5, 47*ba677afaSXin Li Value: smd5, 48*ba677afaSXin Li }, 49*ba677afaSXin Li }, 50*ba677afaSXin Li LicenseConcluded: "NOASSERTION", 51*ba677afaSXin Li LicenseInfoInFiles: []string{"NOASSERTION"}, 52*ba677afaSXin Li FileCopyrightText: "NOASSERTION", 53*ba677afaSXin Li } 54*ba677afaSXin Li 55*ba677afaSXin Li return f, nil 56*ba677afaSXin Li} 57