MCPcopy
hub / github.com/wagoodman/dive / run

Function run

runtime/run.go:21–118  ·  view source on GitHub ↗
(enableUi bool, options Options, imageResolver image.Resolver, events eventChannel, filesystem afero.Fs)

Source from the content-addressed store, hash-verified

19)
20
21func run(enableUi bool, options Options, imageResolver image.Resolver, events eventChannel, filesystem afero.Fs) {
22 var img *image.Image
23 var err error
24 defer close(events)
25
26 doExport := options.ExportFile != ""
27 doBuild := len(options.BuildArgs) > 0
28
29 if doBuild {
30 events.message(utils.TitleFormat("Building image..."))
31 img, err = imageResolver.Build(options.BuildArgs)
32 if err != nil {
33 events.exitWithErrorMessage("cannot build image", err)
34 return
35 }
36 } else {
37 events.message(utils.TitleFormat("Image Source: ") + options.Source.String() + "://" + options.Image)
38 events.message(utils.TitleFormat("Extracting image from "+imageResolver.Name()+"...") + " (this can take a while for large images)")
39 img, err = imageResolver.Fetch(options.Image)
40 if err != nil {
41 events.exitWithErrorMessage("cannot fetch image", err)
42 return
43 }
44 }
45
46 events.message(utils.TitleFormat("Analyzing image..."))
47 analysis, err := img.Analyze()
48 if err != nil {
49 events.exitWithErrorMessage("cannot analyze image", err)
50 return
51 }
52
53 if doExport {
54 events.message(utils.TitleFormat(fmt.Sprintf("Exporting image to '%s'...", options.ExportFile)))
55 bytes, err := export.NewExport(analysis).Marshal()
56 if err != nil {
57 events.exitWithErrorMessage("cannot marshal export payload", err)
58 return
59 }
60
61 file, err := filesystem.OpenFile(options.ExportFile, os.O_RDWR|os.O_CREATE, 0644)
62 if err != nil {
63 events.exitWithErrorMessage("cannot open export file", err)
64 return
65 }
66 defer file.Close()
67
68 _, err = file.Write(bytes)
69 if err != nil {
70 events.exitWithErrorMessage("cannot write to export file", err)
71 }
72 return
73 }
74
75 if options.Ci {
76 events.message(fmt.Sprintf(" efficiency: %2.4f %%", analysis.Efficiency*100))
77 events.message(fmt.Sprintf(" wastedBytes: %d bytes (%s)", analysis.WastedBytes, humanize.Bytes(analysis.WastedBytes)))
78 events.message(fmt.Sprintf(" userWastedPercent: %2.4f %%", analysis.WastedUserPercent*100))

Callers 2

RunFunction · 0.85
TestRunFunction · 0.85

Calls 15

AnalyzeMethod · 0.95
EvaluateMethod · 0.95
ReportMethod · 0.95
BuildCacheMethod · 0.95
TitleFormatFunction · 0.92
NewExportFunction · 0.92
NewCiEvaluatorFunction · 0.92
NewComparerFunction · 0.92
RunFunction · 0.92
messageMethod · 0.80
exitWithErrorMessageMethod · 0.80
MarshalMethod · 0.80

Tested by 1

TestRunFunction · 0.68