func createImageRunCmd()

in newt/cli/image_cmds.go [76:148]


func createImageRunCmd(cmd *cobra.Command, args []string) {
	var verAsTimestamp bool
	var ver image.ImageVersion
	var err error

	if len(args) < 2 {
		NewtUsage(cmd, util.NewNewtError("Must specify target and version"))
	}

	if useV1 && useV2 {
		NewtUsage(cmd, util.NewNewtError("Either -1, or -2, but not both"))
	}

	if !useV1 {
		useV2 = true
	}

	TryGetProject()

	targetName := args[0]
	t := ResolveTarget(targetName)
	if t == nil {
		NewtUsage(cmd, util.NewNewtError("Invalid target name: "+targetName))
	}

	if args[1] == "timestamp" {
		verAsTimestamp = true
	} else {
		verAsTimestamp = false
		ver, err = image.ParseVersion(args[1])
		if err != nil {
			NewtUsage(cmd, err)
		}
	}

	b, err := builder.NewTargetBuilder(t)
	if err != nil {
		NewtUsage(nil, err)
	}

	keys, _, err := parseKeyArgs(args[2:])
	if err != nil {
		NewtUsage(cmd, err)
	}

	if err := b.Build(); err != nil {
		NewtUsage(nil, err)
	}

	if verAsTimestamp {
		stat, err := os.Stat(b.AppBuilder.AppElfPath())
		if err != nil {
			NewtUsage(nil, err)
		}

		ver.Major = uint8(stat.ModTime().Year() % 1000)
		ver.Minor = uint8(stat.ModTime().Month())
		ver.Rev = uint16(stat.ModTime().Day())
		ver.BuildNum = uint32(stat.ModTime().Hour()*10000 +
			stat.ModTime().Minute()*100 + stat.ModTime().Second())
	}

	if useV1 {
		err = imgprod.ProduceAllV1(b, ver, keys, encKeyFilename, encKeyIndex,
			hdrPad, imagePad, sections, useLegacyTLV)
	} else {
		err = imgprod.ProduceAll(b, ver, keys, encKeyFilename, encKeyIndex,
			hdrPad, imagePad, sections, useLegacyTLV)
	}
	if err != nil {
		NewtUsage(nil, err)
	}
}