-
Notifications
You must be signed in to change notification settings - Fork 161
/
redigest_release.go
99 lines (86 loc) · 2.8 KB
/
redigest_release.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
package cmd
import (
. "github.com/cloudfoundry/bosh-cli/v7/cmd/opts"
"github.com/cloudfoundry/bosh-cli/v7/crypto"
boshrel "github.com/cloudfoundry/bosh-cli/v7/release"
boshjob "github.com/cloudfoundry/bosh-cli/v7/release/job"
"github.com/cloudfoundry/bosh-cli/v7/release/license"
boshpkg "github.com/cloudfoundry/bosh-cli/v7/release/pkg"
boshui "github.com/cloudfoundry/bosh-cli/v7/ui"
crypto2 "github.com/cloudfoundry/bosh-utils/crypto"
boshfu "github.com/cloudfoundry/bosh-utils/fileutil"
)
type RedigestReleaseCmd struct {
reader boshrel.Reader
writer boshrel.Writer
digestCalculator crypto.DigestCalculator
mv boshfu.Mover
archiveFilePathReader crypto2.ArchiveDigestFilePathReader
ui boshui.UI
}
func NewRedigestReleaseCmd(
reader boshrel.Reader,
writer boshrel.Writer,
digestCalculator crypto.DigestCalculator,
mv boshfu.Mover,
archiveFilePathReader crypto2.ArchiveDigestFilePathReader,
ui boshui.UI,
) RedigestReleaseCmd {
return RedigestReleaseCmd{
reader: reader,
writer: writer,
digestCalculator: digestCalculator,
mv: mv,
archiveFilePathReader: archiveFilePathReader,
ui: ui,
}
}
func (cmd RedigestReleaseCmd) Run(args RedigestReleaseArgs) error {
release, err := cmd.reader.Read(args.Path)
if err != nil {
return err
}
newJobs := []*boshjob.Job{}
for _, job := range release.Jobs() {
newJob, err := job.RehashWithCalculator(cmd.digestCalculator, cmd.archiveFilePathReader)
if err != nil {
return err
}
newJobs = append(newJobs, newJob)
}
newCompiledPackages := []*boshpkg.CompiledPackage{}
for _, compPkg := range release.CompiledPackages() {
newCompiledPackage, err := compPkg.RehashWithCalculator(cmd.digestCalculator, cmd.archiveFilePathReader)
if err != nil {
return err
}
newCompiledPackages = append(newCompiledPackages, newCompiledPackage)
}
newPackages := []*boshpkg.Package{}
for _, pkg := range release.Packages() {
newPkg, err := pkg.RehashWithCalculator(cmd.digestCalculator, cmd.archiveFilePathReader)
if err != nil {
return err
}
newPackages = append(newPackages, newPkg)
}
var newLicense *license.License
releaseLicense := release.License()
if releaseLicense != nil {
newLicense, err = releaseLicense.RehashWithCalculator(cmd.digestCalculator, cmd.archiveFilePathReader)
if err != nil {
return err
}
}
newRelease := release.CopyWith(newJobs, newPackages, newLicense, newCompiledPackages)
tmpWriterPath, err := cmd.writer.Write(newRelease, nil)
if err != nil {
return err
}
err = cmd.mv.Move(tmpWriterPath, args.Destination.ExpandedPath)
if err != nil {
return err
}
ReleaseTables{Release: newRelease, ArchivePath: args.Destination.ExpandedPath}.Print(cmd.ui)
return nil
}