xref: /aosp_15_r20/external/spdx-tools/builder/builder2v3/build_file.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
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