Repository: incubator-mynewt-newt
Updated Branches:
  refs/heads/develop e2546a89a -> 5125fc181


MYNEWT-540 newt - Add version number to mfg image

New usage:

    newt mfg create <mfg-package-name> <version #.#.#.#>
    newt mfg deploy <mfg-package-name> [version #.#.#.#]


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/commit/5125fc18
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/tree/5125fc18
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/diff/5125fc18

Branch: refs/heads/develop
Commit: 5125fc181a42ec9bc1a314579b5f79b35b523e7c
Parents: e2546a8
Author: Christopher Collins <[email protected]>
Authored: Mon Jan 9 15:37:26 2017 -0800
Committer: Christopher Collins <[email protected]>
Committed: Mon Jan 9 15:37:26 2017 -0800

----------------------------------------------------------------------
 newt/builder/targetbuild.go |  4 +--
 newt/cli/mfg_cmds.go        | 28 ++++++++++++++++---
 newt/image/image.go         | 59 ++++++++++++++++++++++++----------------
 newt/mfg/create.go          |  2 ++
 newt/mfg/mfg.go             |  7 +++++
 5 files changed, 70 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/5125fc18/newt/builder/targetbuild.go
----------------------------------------------------------------------
diff --git a/newt/builder/targetbuild.go b/newt/builder/targetbuild.go
index db6172c..4d96c1f 100644
--- a/newt/builder/targetbuild.go
+++ b/newt/builder/targetbuild.go
@@ -622,9 +622,7 @@ func (t *TargetBuilder) augmentManifest(
                return err
        }
 
-       manifest.Version = fmt.Sprintf("%d.%d.%d.%d",
-               appImg.Version.Major, appImg.Version.Minor,
-               appImg.Version.Rev, appImg.Version.BuildNum)
+       manifest.Version = appImg.Version.String()
        manifest.ImageHash = fmt.Sprintf("%x", appImg.Hash)
        manifest.Image = filepath.Base(appImg.TargetImg)
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/5125fc18/newt/cli/mfg_cmds.go
----------------------------------------------------------------------
diff --git a/newt/cli/mfg_cmds.go b/newt/cli/mfg_cmds.go
index 173a261..38816d7 100644
--- a/newt/cli/mfg_cmds.go
+++ b/newt/cli/mfg_cmds.go
@@ -22,6 +22,7 @@ package cli
 import (
        "github.com/spf13/cobra"
 
+       "mynewt.apache.org/newt/newt/image"
        "mynewt.apache.org/newt/newt/mfg"
        "mynewt.apache.org/newt/newt/pkg"
        "mynewt.apache.org/newt/util"
@@ -83,8 +84,9 @@ func mfgLoad(mi *mfg.MfgImage) {
 }
 
 func mfgCreateRunCmd(cmd *cobra.Command, args []string) {
-       if len(args) < 1 {
-               NewtUsage(cmd, util.NewNewtError("Must specify mfg package 
name"))
+       if len(args) < 2 {
+               NewtUsage(cmd, util.NewNewtError(
+                       "Must specify mfg package name and version number"))
        }
 
        pkgName := args[0]
@@ -93,11 +95,18 @@ func mfgCreateRunCmd(cmd *cobra.Command, args []string) {
                NewtUsage(cmd, err)
        }
 
+       versStr := args[1]
+       ver, err := image.ParseVersion(versStr)
+       if err != nil {
+               NewtUsage(cmd, err)
+       }
+
        mi, err := mfg.Load(lpkg)
        if err != nil {
                NewtUsage(nil, err)
        }
 
+       mi.SetVersion(ver)
        mfgCreate(mi)
 }
 
@@ -131,12 +140,23 @@ func mfgDeployRunCmd(cmd *cobra.Command, args []string) {
                NewtUsage(cmd, err)
        }
 
+       ver := image.ImageVersion{}
+       if len(args) >= 2 {
+               versStr := args[1]
+               ver, err = image.ParseVersion(versStr)
+               if err != nil {
+                       NewtUsage(cmd, err)
+               }
+       }
+
        mi, err := mfg.Load(lpkg)
        if err != nil {
                NewtUsage(nil, err)
        }
 
+       mi.SetVersion(ver)
        mfgCreate(mi)
+
        mfgLoad(mi)
 }
 
@@ -156,7 +176,7 @@ func AddMfgCommands(cmd *cobra.Command) {
        cmd.AddCommand(mfgCmd)
 
        mfgCreateCmd := &cobra.Command{
-               Use:   "create <mfg-package-name>",
+               Use:   "create <mfg-package-name> <version #.#.#.#>",
                Short: "Create a manufacturing flash image",
                Run:   mfgCreateRunCmd,
        }
@@ -172,7 +192,7 @@ func AddMfgCommands(cmd *cobra.Command) {
        AddTabCompleteFn(mfgLoadCmd, mfgList)
 
        mfgDeployCmd := &cobra.Command{
-               Use:   "deploy <mfg-package-name>",
+               Use:   "deploy <mfg-package-name> [version #.#.#.#]",
                Short: "Builds and uploads a manufacturing image (create + 
load)",
                Run:   mfgDeployRunCmd,
        }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/5125fc18/newt/image/image.go
----------------------------------------------------------------------
diff --git a/newt/image/image.go b/newt/image/image.go
index 013ddcc..49134d1 100644
--- a/newt/image/image.go
+++ b/newt/image/image.go
@@ -151,55 +151,68 @@ type ECDSASig struct {
        S *big.Int
 }
 
-func NewImage(srcBinPath string, dstImgPath string) (*Image, error) {
-       image := &Image{}
-
-       image.SourceBin = srcBinPath
-       image.TargetImg = dstImgPath
-       return image, nil
-}
-
-func (image *Image) SetVersion(versStr string) error {
+func ParseVersion(versStr string) (ImageVersion, error) {
        var err error
        var major uint64
        var minor uint64
        var rev uint64
        var buildNum uint64
+       var ver ImageVersion
 
        components := strings.Split(versStr, ".")
        major, err = strconv.ParseUint(components[0], 10, 8)
        if err != nil {
-               return util.NewNewtError(fmt.Sprintf("Invalid version string 
%s",
-                       versStr))
+               return ver, util.FmtNewtError("Invalid version string %s", 
versStr)
        }
        if len(components) > 1 {
                minor, err = strconv.ParseUint(components[1], 10, 8)
                if err != nil {
-                       return util.NewNewtError(fmt.Sprintf("Invalid version 
string %s",
-                               versStr))
+                       return ver, util.FmtNewtError("Invalid version string 
%s", versStr)
                }
        }
        if len(components) > 2 {
                rev, err = strconv.ParseUint(components[2], 10, 16)
                if err != nil {
-                       return util.NewNewtError(fmt.Sprintf("Invalid version 
string %s",
-                               versStr))
+                       return ver, util.FmtNewtError("Invalid version string 
%s", versStr)
                }
        }
        if len(components) > 3 {
                buildNum, err = strconv.ParseUint(components[3], 10, 32)
                if err != nil {
-                       return util.NewNewtError(fmt.Sprintf("Invalid version 
string %s",
-                               versStr))
+                       return ver, util.FmtNewtError("Invalid version string 
%s", versStr)
                }
        }
-       image.Version.Major = uint8(major)
-       image.Version.Minor = uint8(minor)
-       image.Version.Rev = uint16(rev)
-       image.Version.BuildNum = uint32(buildNum)
+
+       ver.Major = uint8(major)
+       ver.Minor = uint8(minor)
+       ver.Rev = uint16(rev)
+       ver.BuildNum = uint32(buildNum)
+       return ver, nil
+}
+
+func (ver ImageVersion) String() string {
+       return fmt.Sprintf("%d.%d.%d.%d",
+               ver.Major, ver.Minor, ver.Rev, ver.BuildNum)
+}
+
+func NewImage(srcBinPath string, dstImgPath string) (*Image, error) {
+       image := &Image{}
+
+       image.SourceBin = srcBinPath
+       image.TargetImg = dstImgPath
+       return image, nil
+}
+
+func (image *Image) SetVersion(versStr string) error {
+       ver, err := ParseVersion(versStr)
+       if err != nil {
+               return err
+       }
+
        log.Debugf("Assigning version number %d.%d.%d.%d\n",
-               image.Version.Major, image.Version.Minor,
-               image.Version.Rev, image.Version.BuildNum)
+               ver.Major, ver.Minor, ver.Rev, ver.BuildNum)
+
+       image.Version = ver
 
        buf := new(bytes.Buffer)
        err = binary.Write(buf, binary.LittleEndian, image.Version)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/5125fc18/newt/mfg/create.go
----------------------------------------------------------------------
diff --git a/newt/mfg/create.go b/newt/mfg/create.go
index 1257b75..08614e0 100644
--- a/newt/mfg/create.go
+++ b/newt/mfg/create.go
@@ -38,6 +38,7 @@ import (
 type mfgManifest struct {
        BuildTime   string `json:"build_time"`
        MfgHash     string `json:"mfg_hash"`
+       Version     string `json:"version"`
        MetaSection int    `json:"meta_section"`
        MetaOffset  int    `json:"meta_offset"`
 }
@@ -437,6 +438,7 @@ func (mi *MfgImage) build() (createState, error) {
 func (mi *MfgImage) createManifest(cs createState) ([]byte, error) {
        manifest := mfgManifest{
                BuildTime:   time.Now().Format(time.RFC3339),
+               Version:     mi.version.String(),
                MfgHash:     fmt.Sprintf("%x", cs.hash),
                MetaSection: 0,
                MetaOffset:  cs.metaOffset,

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/5125fc18/newt/mfg/mfg.go
----------------------------------------------------------------------
diff --git a/newt/mfg/mfg.go b/newt/mfg/mfg.go
index 999c00f..98fbc37 100644
--- a/newt/mfg/mfg.go
+++ b/newt/mfg/mfg.go
@@ -22,6 +22,7 @@ package mfg
 import (
        "sort"
 
+       "mynewt.apache.org/newt/newt/image"
        "mynewt.apache.org/newt/newt/pkg"
        "mynewt.apache.org/newt/newt/target"
 )
@@ -50,6 +51,12 @@ type MfgImage struct {
        boot       *target.Target
        images     []*target.Target
        rawEntries []MfgRawEntry
+
+       version image.ImageVersion
+}
+
+func (mi *MfgImage) SetVersion(ver image.ImageVersion) {
+       mi.version = ver
 }
 
 func (mi *MfgImage) imgApps(imageIdx int) (

Reply via email to