/
resultutils.go
102 lines (89 loc) · 3.38 KB
/
resultutils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package utils
import (
"strings"
"github.com/jfrog/jfrog-client-go/utils/errorutils"
buildinfo "github.com/jfrog/build-info-go/entities"
"github.com/jfrog/jfrog-client-go/utils/io/content"
"github.com/jfrog/jfrog-client-go/utils/io/fileutils"
)
type Result struct {
SuccessCount []int
TotalCount []int
}
func NewResult(threads int) *Result {
return &Result{SuccessCount: make([]int, threads),
TotalCount: make([]int, threads)}
}
func SumIntArray(arr []int) int {
sum := 0
for _, i := range arr {
sum += i
}
return sum
}
type OperationSummary struct {
// A ContentReader of FileTransferDetails structs
TransferDetailsReader *content.ContentReader
// A ContentReader of ArtifactDetails structs
ArtifactsDetailsReader *content.ContentReader
TotalSucceeded int
TotalFailed int
}
type ArtifactDetails struct {
// Path of the artifact in Artifactory
ArtifactoryPath string `json:"artifactoryPath,omitempty"`
Checksums buildinfo.Checksum `json:"checksums,omitempty"`
}
func (cs *OperationSummary) Close() error {
err := cs.TransferDetailsReader.Close()
if err != nil {
return err
}
return cs.ArtifactsDetailsReader.Close()
}
func (ad *ArtifactDetails) ToBuildInfoArtifact() (buildinfo.Artifact, error) {
artifact := buildinfo.Artifact{Checksum: buildinfo.Checksum{}}
artifact.Sha1 = ad.Checksums.Sha1
artifact.Md5 = ad.Checksums.Md5
artifact.Sha256 = ad.Checksums.Sha256
// Artifact name in build info as the name in artifactory
filename, _ := fileutils.GetFileAndDirFromPath(ad.ArtifactoryPath)
artifact.Name = filename
if i := strings.LastIndex(filename, "."); i != -1 {
artifact.Type = filename[i+1:]
}
// The 'path' property in the build-info should not include the repository. We therefore remove the repository from the path.
if i := strings.Index(ad.ArtifactoryPath, "/"); i != -1 {
artifact.Path = ad.ArtifactoryPath[i+1:]
} else {
return artifact, errorutils.CheckErrorf("artifact path:' " + ad.ArtifactoryPath + "' lacks repository name")
}
return artifact, nil
}
func (ad *ArtifactDetails) ToBuildInfoDependency() buildinfo.Dependency {
dependency := buildinfo.Dependency{Checksum: buildinfo.Checksum{}}
dependency.Sha1 = ad.Checksums.Sha1
dependency.Md5 = ad.Checksums.Md5
// Artifact name in build info as the name in artifactory
filename, _ := fileutils.GetFileAndDirFromPath(ad.ArtifactoryPath)
dependency.Id = filename
return dependency
}
func ConvertArtifactsDetailsToBuildInfoArtifacts(artifactsDetailsReader *content.ContentReader) ([]buildinfo.Artifact, error) {
var buildArtifacts []buildinfo.Artifact
for artifactDetails := new(ArtifactDetails); artifactsDetailsReader.NextRecord(artifactDetails) == nil; artifactDetails = new(ArtifactDetails) {
artifact, err := artifactDetails.ToBuildInfoArtifact()
if err != nil {
return nil, err
}
buildArtifacts = append(buildArtifacts, artifact)
}
return buildArtifacts, artifactsDetailsReader.GetError()
}
func ConvertArtifactsDetailsToBuildInfoDependencies(artifactsDetailsReader *content.ContentReader) ([]buildinfo.Dependency, error) {
var buildDependencies []buildinfo.Dependency
for artifactDetails := new(ArtifactDetails); artifactsDetailsReader.NextRecord(artifactDetails) == nil; artifactDetails = new(ArtifactDetails) {
buildDependencies = append(buildDependencies, artifactDetails.ToBuildInfoDependency())
}
return buildDependencies, artifactsDetailsReader.GetError()
}