http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e31a7d31/newt/cli/pkg_cmds.go
----------------------------------------------------------------------
diff --git a/newt/cli/pkg_cmds.go b/newt/cli/pkg_cmds.go
deleted file mode 100644
index 472369b..0000000
--- a/newt/cli/pkg_cmds.go
+++ /dev/null
@@ -1,288 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package cli
-
-import (
-       "io/ioutil"
-       "os"
-       "path"
-       "regexp"
-       "strings"
-
-       "github.com/spf13/cobra"
-       "mynewt.apache.org/newt/newt/interfaces"
-       "mynewt.apache.org/newt/newt/newtutil"
-       "mynewt.apache.org/newt/newt/pkg"
-       "mynewt.apache.org/newt/newt/project"
-       "mynewt.apache.org/newt/util"
-)
-
-var NewTypeStr = "pkg"
-
-func pkgNewCmd(cmd *cobra.Command, args []string) {
-
-       if len(args) == 0 {
-               NewtUsage(cmd, util.NewNewtError("Must specify a package name"))
-       }
-
-       if len(args) != 1 {
-               NewtUsage(cmd, util.NewNewtError("Exactly one argument 
required"))
-       }
-
-       NewTypeStr = strings.ToUpper(NewTypeStr)
-
-       pw := project.NewPackageWriter()
-       if err := pw.ConfigurePackage(NewTypeStr, args[0]); err != nil {
-               NewtUsage(cmd, err)
-       }
-       if err := pw.WritePackage(); err != nil {
-               NewtUsage(cmd, err)
-       }
-}
-
-type dirOperation func(string, string) error
-
-func pkgCopyCmd(cmd *cobra.Command, args []string) {
-       pkgCloneOrMoveCmd(cmd, args, util.CopyDir, "Copying")
-}
-
-func pkgMoveCmd(cmd *cobra.Command, args []string) {
-       pkgCloneOrMoveCmd(cmd, args, util.MoveDir, "Moving")
-}
-
-func pkgCloneOrMoveCmd(cmd *cobra.Command, args []string, dirOpFn 
dirOperation, opStr string) {
-       if len(args) != 2 {
-               NewtUsage(cmd, util.NewNewtError("Exactly two arguments 
required to pkg move"))
-       }
-
-       srcLoc := args[0]
-       dstLoc := args[1]
-
-       proj := TryGetProject()
-       interfaces.SetProject(proj)
-
-       wd, err := os.Getwd()
-       if err != nil {
-               NewtUsage(cmd, util.ChildNewtError(err))
-       }
-
-       if err := os.Chdir(proj.Path() + "/"); err != nil {
-               NewtUsage(cmd, util.ChildNewtError(err))
-       }
-
-       defer os.Chdir(wd)
-
-       /* Find source package, defaulting search to the local project if no
-        * repository descriptor is found.
-        */
-       srcRepoName, srcName, err := newtutil.ParsePackageString(srcLoc)
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       srcRepo := proj.LocalRepo()
-       if srcRepoName != "" {
-               srcRepo = proj.FindRepo(srcRepoName)
-       }
-
-       srcPkg, err := proj.ResolvePackage(srcRepo, srcName)
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       /* Resolve the destination package to a physical location, and then
-        * move the source package to that location.
-        * dstLoc is assumed to be in the format "@repo/pkg/loc"
-        */
-       repoName, pkgName, err := newtutil.ParsePackageString(dstLoc)
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       dstPath := proj.Path() + "/"
-       repo := proj.LocalRepo()
-       if repoName != "" {
-               dstPath += "repos/" + repoName + "/"
-               repo = proj.FindRepo(repoName)
-               if repo == nil {
-                       NewtUsage(cmd, util.NewNewtError("Destination repo "+
-                               repoName+" does not exist"))
-               }
-       }
-       dstPath += pkgName + "/"
-
-       if util.NodeExist(dstPath) {
-               NewtUsage(cmd, util.NewNewtError("Cannot overwrite existing 
package, "+
-                       "use pkg delete first"))
-       }
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT, "%s package %s to %s\n",
-               opStr, srcLoc, dstLoc)
-
-       if err := dirOpFn(srcPkg.BasePath(), dstPath); err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       /* Replace the package name in the pkg.yml file */
-       pkgData, err := ioutil.ReadFile(dstPath + "/pkg.yml")
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       re := regexp.MustCompile(regexp.QuoteMeta(srcName))
-       res := re.ReplaceAllString(string(pkgData), pkgName)
-
-       if err := ioutil.WriteFile(dstPath+"/pkg.yml", []byte(res), 0666); err 
!= nil {
-               NewtUsage(cmd, util.ChildNewtError(err))
-       }
-
-       /* If the last element of the package path changes, rename the include
-        * directory.
-        */
-       if path.Base(pkgName) != path.Base(srcPkg.Name()) {
-               dirOpFn(dstPath+"/include/"+path.Base(srcPkg.Name()),
-                       dstPath+"/include/"+path.Base(pkgName))
-       }
-}
-
-func pkgRemoveCmd(cmd *cobra.Command, args []string) {
-       if len(args) != 1 {
-               NewtUsage(cmd, util.NewNewtError("Must specify a package name 
to delete"))
-       }
-
-       proj := TryGetProject()
-       interfaces.SetProject(proj)
-
-       wd, err := os.Getwd()
-       if err != nil {
-               NewtUsage(cmd, util.ChildNewtError(err))
-       }
-
-       if err := os.Chdir(proj.Path() + "/"); err != nil {
-               NewtUsage(cmd, util.ChildNewtError(err))
-       }
-
-       defer os.Chdir(wd)
-
-       /* Resolve package, and get path from package to ensure we're being 
asked
-        * to remove a valid path.
-        */
-       repoName, pkgName, err := newtutil.ParsePackageString(args[0])
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       repo := proj.LocalRepo()
-       if repoName != "" {
-               repo = proj.FindRepo(repoName)
-               if repo == nil {
-                       NewtUsage(cmd, util.NewNewtError("Destination repo "+
-                               repoName+" does not exist"))
-               }
-       }
-
-       pkg, err := pkg.LoadLocalPackage(repo, pkgName)
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT, "Removing package %s\n",
-               args[0])
-
-       if err := os.RemoveAll(pkg.BasePath()); err != nil {
-               NewtUsage(cmd, util.ChildNewtError(err))
-       }
-}
-
-func AddPackageCommands(cmd *cobra.Command) {
-       /* Add the base package command, on top of which other commands are
-        * keyed
-        */
-       pkgHelpText := "Commands for creating and manipulating packages"
-       pkgHelpEx := "  newt pkg new --type=pkg sys/mylib"
-
-       pkgCmd := &cobra.Command{
-               Use:     "pkg",
-               Short:   "Create and manage packages in the current workspace",
-               Long:    pkgHelpText,
-               Example: pkgHelpEx,
-               Run: func(cmd *cobra.Command, args []string) {
-                       cmd.Help()
-               },
-       }
-
-       cmd.AddCommand(pkgCmd)
-
-       /* Package new command, create a new package */
-       newCmdHelpText := ""
-       newCmdHelpEx := ""
-
-       newCmd := &cobra.Command{
-               Use:     "new <package-name>",
-               Short:   "Create a new package in the current directory, from a 
template",
-               Long:    newCmdHelpText,
-               Example: newCmdHelpEx,
-               Run:     pkgNewCmd,
-       }
-
-       newCmd.PersistentFlags().StringVarP(&NewTypeStr, "type", "t",
-               "pkg", "Type of package to create: pkg, bsp, sdk.")
-
-       pkgCmd.AddCommand(newCmd)
-
-       copyCmdHelpText := "Create a new package <dst-pkg> by cloning <src-pkg>"
-       copyCmdHelpEx := "  newt pkg copy apps/blinky apps/myapp"
-
-       copyCmd := &cobra.Command{
-               Use:     "copy <src-pkg> <dst-pkg>",
-               Short:   "Copy an existing package into another",
-               Long:    copyCmdHelpText,
-               Example: copyCmdHelpEx,
-               Run:     pkgCopyCmd,
-       }
-
-       pkgCmd.AddCommand(copyCmd)
-
-       moveCmdHelpText := ""
-       moveCmdHelpEx := "  newt pkg move apps/blinky apps/myapp"
-
-       moveCmd := &cobra.Command{
-               Use:     "move <oldpkg> <newpkg>",
-               Short:   "Move a package from one location to another",
-               Long:    moveCmdHelpText,
-               Example: moveCmdHelpEx,
-               Run:     pkgMoveCmd,
-       }
-
-       pkgCmd.AddCommand(moveCmd)
-
-       removeCmdHelpText := ""
-       removeCmdHelpEx := ""
-
-       removeCmd := &cobra.Command{
-               Use:     "remove <package-name>",
-               Short:   "Remove a package",
-               Long:    removeCmdHelpText,
-               Example: removeCmdHelpEx,
-               Run:     pkgRemoveCmd,
-       }
-
-       pkgCmd.AddCommand(removeCmd)
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e31a7d31/newt/cli/project_cmds.go
----------------------------------------------------------------------
diff --git a/newt/cli/project_cmds.go b/newt/cli/project_cmds.go
deleted file mode 100644
index 89a6eae..0000000
--- a/newt/cli/project_cmds.go
+++ /dev/null
@@ -1,259 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package cli
-
-import (
-       "fmt"
-       "os"
-       "sort"
-       "strings"
-
-       "github.com/spf13/cobra"
-       "mynewt.apache.org/newt/newt/downloader"
-       "mynewt.apache.org/newt/newt/interfaces"
-       "mynewt.apache.org/newt/newt/newtutil"
-       "mynewt.apache.org/newt/newt/project"
-       "mynewt.apache.org/newt/util"
-)
-
-func newRunCmd(cmd *cobra.Command, args []string) {
-       if len(args) < 1 {
-               NewtUsage(cmd, util.NewNewtError("Must specify "+
-                       "a project directory to newt new"))
-       }
-
-       newDir := args[0]
-
-       if util.NodeExist(newDir) {
-               NewtUsage(cmd, util.NewNewtError("Cannot create new project, "+
-                       "directory already exists"))
-       }
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT, "Downloading "+
-               "project skeleton from apache/incubator-mynewt-blinky...\n")
-       dl := downloader.NewGithubDownloader()
-       dl.User = "apache"
-       dl.Repo = "incubator-mynewt-blinky"
-
-       dir, err := dl.DownloadRepo(newtutil.NewtBlinkyTag)
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT, "Installing "+
-               "skeleton in %s...\n", newDir)
-
-       if err := util.CopyDir(dir, newDir); err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       if err := os.RemoveAll(newDir + "/" + "/.git/"); err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT,
-               "Project %s successfully created.\n", newDir)
-}
-
-func installRunCmd(cmd *cobra.Command, args []string) {
-       proj := TryGetProject()
-       interfaces.SetProject(proj)
-
-       if err := proj.Install(false, newtutil.NewtForce); err != nil {
-               NewtUsage(cmd, err)
-       }
-}
-
-func upgradeRunCmd(cmd *cobra.Command, args []string) {
-       proj := TryGetProject()
-       interfaces.SetProject(proj)
-
-       if err := proj.Upgrade(newtutil.NewtForce); err != nil {
-               NewtUsage(cmd, err)
-       }
-}
-
-func infoRunCmd(cmd *cobra.Command, args []string) {
-       reqRepoName := ""
-       if len(args) >= 1 {
-               reqRepoName = strings.TrimPrefix(args[0], "@")
-       }
-
-       proj := TryGetProject()
-
-       repoNames := []string{}
-       for repoName, _ := range proj.PackageList() {
-               repoNames = append(repoNames, repoName)
-       }
-       sort.Strings(repoNames)
-
-       if reqRepoName == "" {
-               util.StatusMessage(util.VERBOSITY_DEFAULT, "Repositories in 
%s:\n",
-                       proj.Name())
-
-               for _, repoName := range repoNames {
-                       util.StatusMessage(util.VERBOSITY_DEFAULT, "    * 
@%s\n", repoName)
-               }
-
-               // Now display the packages in the local repository.
-               util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
-               reqRepoName = "local"
-       }
-
-       firstRepo := true
-       for _, repoName := range repoNames {
-               if reqRepoName == "all" || reqRepoName == repoName {
-                       packNames := []string{}
-                       for _, pack := range *proj.PackageList()[repoName] {
-                               // Don't display the special unittest target; 
this is used
-                               // internally by newt, so the user doesn't need 
to know about
-                               // it.
-                               // XXX: This is a hack; come up with a better 
solution for
-                               // unit testing.
-                               if !strings.HasSuffix(pack.Name(), "/unittest") 
{
-                                       packNames = append(packNames, 
pack.Name())
-                               }
-                       }
-
-                       sort.Strings(packNames)
-                       if !firstRepo {
-                               util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
-                       } else {
-                               firstRepo = false
-                       }
-                       util.StatusMessage(util.VERBOSITY_DEFAULT, "Packages in 
@%s:\n",
-                               repoName)
-                       for _, pkgName := range packNames {
-                               util.StatusMessage(util.VERBOSITY_DEFAULT, "    
* %s\n",
-                                       pkgName)
-                       }
-               }
-       }
-}
-
-func syncRunCmd(cmd *cobra.Command, args []string) {
-       proj := TryGetProject()
-       repos := proj.Repos()
-
-       ps, err := project.LoadProjectState()
-       if err != nil {
-               NewtUsage(nil, err)
-       }
-
-       var failedRepos []string
-       for _, repo := range repos {
-               var exists bool
-               var updated bool
-               if repo.IsLocal() {
-                       continue
-               }
-               vers := ps.GetInstalledVersion(repo.Name())
-               if vers == nil {
-                       util.StatusMessage(util.VERBOSITY_DEFAULT,
-                               "No installed version of %s found, 
skipping\n\n",
-                               repo.Name())
-               }
-               exists, updated, err = repo.Sync(vers, newtutil.NewtForce)
-               if exists && !updated {
-                       failedRepos = append(failedRepos, repo.Name())
-               }
-       }
-       if len(failedRepos) > 0 {
-               var forceMsg string
-               if !newtutil.NewtForce {
-                       forceMsg = " To force resync, add the -f (force) 
option."
-               }
-               err = util.NewNewtError(fmt.Sprintf("Failed for repos: %v."+
-                       forceMsg, failedRepos))
-               NewtUsage(nil, err)
-       }
-}
-
-func AddProjectCommands(cmd *cobra.Command) {
-       installHelpText := ""
-       installHelpEx := ""
-       installCmd := &cobra.Command{
-               Use:     "install",
-               Short:   "Install project dependencies",
-               Long:    installHelpText,
-               Example: installHelpEx,
-               Run:     installRunCmd,
-       }
-       installCmd.PersistentFlags().BoolVarP(&newtutil.NewtForce,
-               "force", "f", false,
-               "Force install of the repositories in project, regardless of 
what "+
-                       "exists in repos directory")
-
-       cmd.AddCommand(installCmd)
-
-       upgradeHelpText := ""
-       upgradeHelpEx := ""
-       upgradeCmd := &cobra.Command{
-               Use:     "upgrade",
-               Short:   "Upgrade project dependencies",
-               Long:    upgradeHelpText,
-               Example: upgradeHelpEx,
-               Run:     upgradeRunCmd,
-       }
-       upgradeCmd.PersistentFlags().BoolVarP(&newtutil.NewtForce,
-               "force", "f", false,
-               "Force upgrade of the repositories to latest state in 
project.yml")
-
-       cmd.AddCommand(upgradeCmd)
-
-       syncHelpText := ""
-       syncHelpEx := ""
-       syncCmd := &cobra.Command{
-               Use:     "sync",
-               Short:   "Synchronize project dependencies",
-               Long:    syncHelpText,
-               Example: syncHelpEx,
-               Run:     syncRunCmd,
-       }
-       syncCmd.PersistentFlags().BoolVarP(&newtutil.NewtForce,
-               "force", "f", false,
-               "Force overwrite of existing remote repositories.")
-       cmd.AddCommand(syncCmd)
-
-       newHelpText := ""
-       newHelpEx := ""
-       newCmd := &cobra.Command{
-               Use:     "new <project-dir>",
-               Short:   "Create a new project",
-               Long:    newHelpText,
-               Example: newHelpEx,
-               Run:     newRunCmd,
-       }
-
-       cmd.AddCommand(newCmd)
-
-       infoHelpText := "Show information about the current project."
-       infoHelpEx := "  newt info\n"
-
-       infoCmd := &cobra.Command{
-               Use:     "info",
-               Short:   "Show project info",
-               Long:    infoHelpText,
-               Example: infoHelpEx,
-               Run:     infoRunCmd,
-       }
-
-       cmd.AddCommand(infoCmd)
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e31a7d31/newt/cli/run_cmds.go
----------------------------------------------------------------------
diff --git a/newt/cli/run_cmds.go b/newt/cli/run_cmds.go
deleted file mode 100644
index 16620dd..0000000
--- a/newt/cli/run_cmds.go
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package cli
-
-import (
-       "os"
-
-       "github.com/spf13/cobra"
-
-       "mynewt.apache.org/newt/newt/newtutil"
-       "mynewt.apache.org/newt/util"
-)
-
-func runRunCmd(cmd *cobra.Command, args []string) {
-       if len(args) < 1 {
-               NewtUsage(cmd, util.NewNewtError("Must specify target"))
-       }
-
-       TryGetProject()
-
-       b, err := TargetBuilderForTargetOrUnittest(args[0])
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       testPkg := b.GetTestPkg()
-       if testPkg != nil {
-               b.InjectSetting("TESTUTIL_SYSTEM_ASSERT", "1")
-               if err := b.SelfTestCreateExe(); err != nil {
-                       NewtUsage(nil, err)
-               }
-               if err := b.SelfTestDebug(); err != nil {
-                       NewtUsage(nil, err)
-               }
-       } else {
-               if err := b.Build(); err != nil {
-                       NewtUsage(nil, err)
-               }
-
-               /*
-                * Run create-image if version number is specified. If no 
version
-                * number, remove .img which would'be been created. This so that
-                * download script will barf if it needs an image for this type 
of
-                * target, instead of downloading an older version.
-                */
-               if len(args) > 1 {
-                       _, _, err = b.CreateImages(args[1], "", 0)
-                       if err != nil {
-                               NewtUsage(cmd, err)
-                       }
-               } else {
-                       os.Remove(b.AppBuilder.AppImgPath())
-
-                       if b.LoaderBuilder != nil {
-                               os.Remove(b.LoaderBuilder.AppImgPath())
-                       }
-               }
-
-               if err := b.Load(extraJtagCmd); err != nil {
-                       NewtUsage(nil, err)
-               }
-
-               if err := b.Debug(extraJtagCmd, true, noGDB_flag); err != nil {
-                       NewtUsage(nil, err)
-               }
-       }
-}
-
-func AddRunCommands(cmd *cobra.Command) {
-       runHelpText := "Same as running\n" +
-               " - build <target>\n" +
-               " - create-image <target> <version>\n" +
-               " - load <target>\n" +
-               " - debug <target>\n\n" +
-               "Note if version number is omitted, create-image step is 
skipped\n"
-       runHelpEx := "  newt run <target-name> [<version>]\n"
-
-       runCmd := &cobra.Command{
-               Use:     "run",
-               Short:   "build/create-image/download/debug <target>",
-               Long:    runHelpText,
-               Example: runHelpEx,
-               Run:     runRunCmd,
-       }
-
-       runCmd.PersistentFlags().StringVarP(&extraJtagCmd, "extrajtagcmd", "", 
"",
-               "Extra commands to send to JTAG software")
-       runCmd.PersistentFlags().BoolVarP(&noGDB_flag, "noGDB", "n", false,
-               "Do not start GDB from command line")
-       runCmd.PersistentFlags().BoolVarP(&newtutil.NewtForce,
-               "force", "f", false,
-               "Ignore flash overflow errors during image creation")
-
-       cmd.AddCommand(runCmd)
-       AddTabCompleteFn(runCmd, func() []string {
-               return append(targetList(), unittestList()...)
-       })
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e31a7d31/newt/cli/target_cmds.go
----------------------------------------------------------------------
diff --git a/newt/cli/target_cmds.go b/newt/cli/target_cmds.go
deleted file mode 100644
index 786838c..0000000
--- a/newt/cli/target_cmds.go
+++ /dev/null
@@ -1,809 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package cli
-
-import (
-       "bytes"
-       "fmt"
-       "io"
-       "io/ioutil"
-       "os"
-       "sort"
-       "strings"
-
-       log "github.com/Sirupsen/logrus"
-       "github.com/spf13/cobra"
-       "mynewt.apache.org/newt/newt/builder"
-       "mynewt.apache.org/newt/newt/newtutil"
-       "mynewt.apache.org/newt/newt/pkg"
-       "mynewt.apache.org/newt/newt/resolve"
-       "mynewt.apache.org/newt/newt/syscfg"
-       "mynewt.apache.org/newt/newt/target"
-       "mynewt.apache.org/newt/util"
-       "mynewt.apache.org/newt/viper"
-)
-
-var targetForce bool = false
-
-func resolveExistingTargetArg(arg string) (*target.Target, error) {
-       t := ResolveTarget(arg)
-       if t == nil {
-               return nil, util.NewNewtError("Unknown target: " + arg)
-       }
-
-       return t, nil
-}
-
-// Tells you if a target's directory contains extra user files (i.e., files
-// other than pkg.yml).
-func targetContainsUserFiles(t *target.Target) (bool, error) {
-       contents, err := ioutil.ReadDir(t.Package().BasePath())
-       if err != nil {
-               return false, err
-       }
-
-       userFiles := false
-       for _, node := range contents {
-               name := node.Name()
-               if name != "." && name != ".." &&
-                       name != pkg.PACKAGE_FILE_NAME && name != 
target.TARGET_FILENAME {
-
-                       userFiles = true
-                       break
-               }
-       }
-
-       return userFiles, nil
-}
-
-func pkgVarSliceString(pack *pkg.LocalPackage, key string) string {
-       features := pack.PkgV.GetStringSlice(key)
-       sort.Strings(features)
-
-       var buffer bytes.Buffer
-       for _, f := range features {
-               buffer.WriteString(f)
-               buffer.WriteString(" ")
-       }
-       return buffer.String()
-}
-
-func targetShowCmd(cmd *cobra.Command, args []string) {
-       TryGetProject()
-       targetNames := []string{}
-       if len(args) == 0 {
-               for name, _ := range target.GetTargets() {
-                       // Don't display the special unittest target; this is 
used
-                       // internally by newt, so the user doesn't need to know 
about it.
-                       // XXX: This is a hack; come up with a better solution 
for unit
-                       // testing.
-                       if !strings.HasSuffix(name, "/unittest") {
-                               targetNames = append(targetNames, name)
-                       }
-               }
-       } else {
-               targetSlice, err := ResolveTargets(args...)
-               if err != nil {
-                       NewtUsage(cmd, err)
-               }
-
-               for _, t := range targetSlice {
-                       targetNames = append(targetNames, t.FullName())
-               }
-       }
-
-       sort.Strings(targetNames)
-
-       for _, name := range targetNames {
-               kvPairs := map[string]string{}
-
-               util.StatusMessage(util.VERBOSITY_DEFAULT, name+"\n")
-
-               target := target.GetTargets()[name]
-               for k, v := range target.Vars {
-                       kvPairs[strings.TrimPrefix(k, "target.")] = v
-               }
-
-               // A few variables come from the base package rather than the 
target.
-               kvPairs["syscfg"] = syscfg.KeyValueToStr(
-                       
target.Package().SyscfgV.GetStringMapString("syscfg.vals"))
-               kvPairs["cflags"] = pkgVarSliceString(target.Package(), 
"pkg.cflags")
-               kvPairs["lflags"] = pkgVarSliceString(target.Package(), 
"pkg.lflags")
-               kvPairs["aflags"] = pkgVarSliceString(target.Package(), 
"pkg.aflags")
-
-               keys := []string{}
-               for k, _ := range kvPairs {
-                       keys = append(keys, k)
-               }
-               sort.Strings(keys)
-               for _, k := range keys {
-                       val := kvPairs[k]
-                       if len(val) > 0 {
-                               util.StatusMessage(util.VERBOSITY_DEFAULT, "    
%s=%s\n",
-                                       k, kvPairs[k])
-                       }
-               }
-       }
-}
-
-func targetSetCmd(cmd *cobra.Command, args []string) {
-       if len(args) < 2 {
-               NewtUsage(cmd,
-                       util.NewNewtError("Must specify at least two arguments 
"+
-                               "(target-name & k=v) to set"))
-       }
-
-       TryGetProject()
-
-       // Parse target name.
-       t, err := resolveExistingTargetArg(args[0])
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       // Parse series of k=v pairs.  If an argument doesn't contain a '='
-       // character, display the valid values for the variable and quit.
-       vars := [][]string{}
-       for i := 1; i < len(args); i++ {
-               kv := strings.SplitN(args[i], "=", 2)
-               if !strings.HasPrefix(kv[0], "target.") {
-                       kv[0] = "target." + kv[0]
-               }
-
-               if len(kv) == 1 {
-                       // User entered a variable name without a value.
-                       NewtUsage(cmd, nil)
-               }
-
-               // Trim trailing slash from value.  This is necessary when tab
-               // completion is used to fill in the value.
-               kv[1] = strings.TrimSuffix(kv[1], "/")
-
-               vars = append(vars, kv)
-       }
-
-       // Set each specified variable in the target.
-       for _, kv := range vars {
-               // A few variables are special cases; they get set in the base 
package
-               // instead of the target.
-               if kv[0] == "target.syscfg" {
-                       t.Package().SyscfgV = viper.New()
-                       kv, err := syscfg.KeyValueFromStr(kv[1])
-                       if err != nil {
-                               NewtUsage(cmd, err)
-                       }
-
-                       t.Package().SyscfgV.Set("syscfg.vals", kv)
-               } else if kv[0] == "target.cflags" ||
-                       kv[0] == "target.lflags" ||
-                       kv[0] == "target.aflags" {
-
-                       kv[0] = "pkg." + strings.TrimPrefix(kv[0], "target.")
-                       if kv[1] == "" {
-                               // User specified empty value; delete variable.
-                               t.Package().PkgV.Set(kv[0], nil)
-                       } else {
-                               t.Package().PkgV.Set(kv[0], 
strings.Fields(kv[1]))
-                       }
-               } else {
-                       if kv[1] == "" {
-                               // User specified empty value; delete variable.
-                               delete(t.Vars, kv[0])
-                       } else {
-                               // Assign value to specified variable.
-                               t.Vars[kv[0]] = kv[1]
-                       }
-               }
-       }
-
-       if err := t.Save(); err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       for _, kv := range vars {
-               if kv[1] == "" {
-                       util.StatusMessage(util.VERBOSITY_DEFAULT,
-                               "Target %s successfully unset %s\n", 
t.FullName(), kv[0])
-               } else {
-                       util.StatusMessage(util.VERBOSITY_DEFAULT,
-                               "Target %s successfully set %s to %s\n", 
t.FullName(), kv[0],
-                               kv[1])
-               }
-       }
-}
-
-func targetCreateCmd(cmd *cobra.Command, args []string) {
-       if len(args) != 1 {
-               NewtUsage(cmd, util.NewNewtError("Missing target name"))
-       }
-
-       proj := TryGetProject()
-
-       pkgName, err := ResolveNewTargetName(args[0])
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       repo := proj.LocalRepo()
-       pack := pkg.NewLocalPackage(repo, repo.Path()+"/"+pkgName)
-       pack.SetName(pkgName)
-       pack.SetType(pkg.PACKAGE_TYPE_TARGET)
-
-       t := target.NewTarget(pack)
-       err = t.Save()
-       if err != nil {
-               NewtUsage(nil, err)
-       } else {
-               util.StatusMessage(util.VERBOSITY_DEFAULT,
-                       "Target %s successfully created\n", pkgName)
-       }
-}
-
-func targetDelOne(t *target.Target) error {
-       if !targetForce {
-               // Determine if the target directory contains extra user files. 
 If it
-               // does, a prompt (or force) is required to delete it.
-               userFiles, err := targetContainsUserFiles(t)
-               if err != nil {
-                       return err
-               }
-
-               if userFiles {
-                       fmt.Printf("Target directory %s contains some extra 
content; "+
-                               "delete anyway? (y/N): ", 
t.Package().BasePath())
-                       rsp := PromptYesNo(false)
-                       if !rsp {
-                               return nil
-                       }
-               }
-       }
-
-       if err := os.RemoveAll(t.Package().BasePath()); err != nil {
-               return util.NewNewtError(err.Error())
-       }
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT,
-               "Target %s successfully deleted.\n", t.FullName())
-
-       return nil
-}
-
-func targetDelCmd(cmd *cobra.Command, args []string) {
-       if len(args) < 1 {
-               NewtUsage(cmd, util.NewNewtError("Must specify at least one "+
-                       "target to delete"))
-       }
-
-       TryGetProject()
-
-       targets, err := ResolveTargets(args...)
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       for _, t := range targets {
-               if err := targetDelOne(t); err != nil {
-                       NewtUsage(cmd, err)
-               }
-       }
-}
-
-func targetCopyCmd(cmd *cobra.Command, args []string) {
-       if len(args) != 2 {
-               NewtUsage(cmd, util.NewNewtError("Must specify exactly one "+
-                       "source target and one destination target"))
-       }
-
-       proj := TryGetProject()
-
-       srcTarget, err := resolveExistingTargetArg(args[0])
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       dstName, err := ResolveNewTargetName(args[1])
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       // Copy the source target's base package and adjust the fields which 
need
-       // to change.
-       dstTarget := srcTarget.Clone(proj.LocalRepo(), dstName)
-
-       // Save the new target.
-       err = dstTarget.Save()
-       if err != nil {
-               NewtUsage(nil, err)
-       }
-
-       // Copy syscfg.yml file.
-       srcSyscfgPath := fmt.Sprintf("%s/%s",
-               srcTarget.Package().BasePath(),
-               pkg.SYSCFG_YAML_FILENAME)
-       dstSyscfgPath := fmt.Sprintf("%s/%s",
-               dstTarget.Package().BasePath(),
-               pkg.SYSCFG_YAML_FILENAME)
-
-       if err := util.CopyFile(srcSyscfgPath, dstSyscfgPath); err != nil {
-               // If there is just no source syscfg.yml file, that is not an 
error.
-               if !util.IsNotExist(err) {
-                       NewtUsage(nil, err)
-               }
-       }
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT,
-               "Target successfully copied; %s --> %s\n",
-               srcTarget.FullName(), dstTarget.FullName())
-}
-
-func printSetting(entry syscfg.CfgEntry) {
-       util.StatusMessage(util.VERBOSITY_DEFAULT,
-               "  * Setting: %s\n", entry.Name)
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT,
-               "    * Description: %s\n", entry.Description)
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT,
-               "    * Value: %s", entry.Value)
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
-
-       if len(entry.History) > 1 {
-               util.StatusMessage(util.VERBOSITY_DEFAULT,
-                       "    * Overridden: ")
-               for i := 1; i < len(entry.History); i++ {
-                       util.StatusMessage(util.VERBOSITY_DEFAULT, "%s, ",
-                               entry.History[i].Source.Name())
-               }
-               util.StatusMessage(util.VERBOSITY_DEFAULT,
-                       "default=%s\n", entry.History[0].Value)
-       }
-}
-
-func printPkgCfg(pkgName string, cfg syscfg.Cfg, entries []syscfg.CfgEntry) {
-       util.StatusMessage(util.VERBOSITY_DEFAULT, "* PACKAGE: %s\n", pkgName)
-
-       settingNames := make([]string, len(entries))
-       for i, entry := range entries {
-               settingNames[i] = entry.Name
-       }
-       sort.Strings(settingNames)
-
-       for _, name := range settingNames {
-               printSetting(cfg.Settings[name])
-       }
-}
-
-func printCfg(targetName string, cfg syscfg.Cfg) {
-       if errText := cfg.ErrorText(); errText != "" {
-               util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", 
errText)
-       }
-
-       util.StatusMessage(util.VERBOSITY_DEFAULT, "Syscfg for %s:\n", 
targetName)
-       pkgNameEntryMap := syscfg.EntriesByPkg(cfg)
-
-       pkgNames := make([]string, 0, len(pkgNameEntryMap))
-       for pkgName, _ := range pkgNameEntryMap {
-               pkgNames = append(pkgNames, pkgName)
-       }
-       sort.Strings(pkgNames)
-
-       for i, pkgName := range pkgNames {
-               if i > 0 {
-                       util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
-               }
-               printPkgCfg(pkgName, cfg, pkgNameEntryMap[pkgName])
-       }
-}
-
-func yamlPkgCfg(w io.Writer, pkgName string, cfg syscfg.Cfg,
-       entries []syscfg.CfgEntry) {
-
-       settingNames := make([]string, len(entries))
-       for i, entry := range entries {
-               settingNames[i] = entry.Name
-       }
-       sort.Strings(settingNames)
-
-       fmt.Fprintf(w, "    ### %s\n", pkgName)
-       for _, name := range settingNames {
-               fmt.Fprintf(w, "    %s: '%s'\n", name, cfg.Settings[name].Value)
-       }
-}
-
-func yamlCfg(cfg syscfg.Cfg) string {
-       if errText := cfg.ErrorText(); errText != "" {
-               util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", 
errText)
-       }
-
-       pkgNameEntryMap := syscfg.EntriesByPkg(cfg)
-
-       pkgNames := make([]string, 0, len(pkgNameEntryMap))
-       for pkgName, _ := range pkgNameEntryMap {
-               pkgNames = append(pkgNames, pkgName)
-       }
-       sort.Strings(pkgNames)
-
-       buf := bytes.Buffer{}
-
-       fmt.Fprintf(&buf, "syscfg.vals:\n")
-       for i, pkgName := range pkgNames {
-               if i > 0 {
-                       fmt.Fprintf(&buf, "\n")
-               }
-               yamlPkgCfg(&buf, pkgName, cfg, pkgNameEntryMap[pkgName])
-       }
-
-       return string(buf.Bytes())
-}
-
-func targetBuilderConfigResolve(b *builder.TargetBuilder) *resolve.Resolution {
-       res, err := b.Resolve()
-       if err != nil {
-               NewtUsage(nil, err)
-       }
-
-       warningText := strings.TrimSpace(res.WarningText())
-       if warningText != "" {
-               for _, line := range strings.Split(warningText, "\n") {
-                       log.Warn(line)
-               }
-       }
-
-       return res
-}
-
-func targetConfigShowCmd(cmd *cobra.Command, args []string) {
-       if len(args) < 1 {
-               NewtUsage(cmd,
-                       util.NewNewtError("Must specify target or unittest 
name"))
-       }
-
-       for _, arg := range args {
-               b, err := TargetBuilderForTargetOrUnittest(arg)
-               if err != nil {
-                       NewtUsage(cmd, err)
-               }
-
-               res := targetBuilderConfigResolve(b)
-               printCfg(b.GetTarget().Name(), res.Cfg)
-       }
-}
-
-func targetConfigInitCmd(cmd *cobra.Command, args []string) {
-       if len(args) < 1 {
-               NewtUsage(cmd,
-                       util.NewNewtError("Must specify target or unittest 
name"))
-       }
-
-       type entry struct {
-               lpkg   *pkg.LocalPackage
-               path   string
-               b      *builder.TargetBuilder
-               exists bool
-       }
-
-       anyExist := false
-       entries := make([]entry, len(args))
-       for i, pkgName := range args {
-               e := &entries[i]
-
-               b, err := TargetBuilderForTargetOrUnittest(pkgName)
-               if err != nil {
-                       NewtUsage(cmd, err)
-               }
-               e.b = b
-
-               e.lpkg = b.GetTestPkg()
-               if e.lpkg == nil {
-                       e.lpkg = b.GetTarget().Package()
-               }
-
-               e.path = builder.PkgSyscfgPath(e.lpkg.BasePath())
-
-               if util.NodeExist(e.path) {
-                       e.exists = true
-                       anyExist = true
-               }
-       }
-
-       if anyExist && !targetForce {
-               util.StatusMessage(util.VERBOSITY_DEFAULT,
-                       "Configuration files already exist:\n")
-               for _, e := range entries {
-                       if e.exists {
-                               util.StatusMessage(util.VERBOSITY_DEFAULT, "    
* %s\n",
-                                       e.path)
-                       }
-               }
-               util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
-
-               fmt.Printf("Overwrite them? (y/N): ")
-               rsp := PromptYesNo(false)
-               if !rsp {
-                       return
-               }
-       }
-
-       for _, e := range entries {
-               res := targetBuilderConfigResolve(e.b)
-               yaml := yamlCfg(res.Cfg)
-
-               if err := ioutil.WriteFile(e.path, []byte(yaml), 0644); err != 
nil {
-                       NewtUsage(nil, util.FmtNewtError("Error writing file 
\"%s\"; %s",
-                               e.path, err.Error()))
-               }
-       }
-}
-
-func targetDepCmd(cmd *cobra.Command, args []string) {
-       if len(args) < 1 {
-               NewtUsage(cmd,
-                       util.NewNewtError("Must specify target or unittest 
name"))
-       }
-
-       TryGetProject()
-
-       b, err := TargetBuilderForTargetOrUnittest(args[0])
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       res, err := b.Resolve()
-       if err != nil {
-               NewtUsage(nil, err)
-       }
-
-       dg, err := b.CreateDepGraph()
-       if err != nil {
-               NewtUsage(nil, err)
-       }
-
-       // If user specified any package names, only include specified packages.
-       if len(args) > 1 {
-               rpkgs, err := ResolveRpkgs(res, args[1:])
-               if err != nil {
-                       NewtUsage(cmd, err)
-               }
-
-               var missingRpkgs []*resolve.ResolvePackage
-               dg, missingRpkgs = builder.FilterDepGraph(dg, rpkgs)
-               for _, rpkg := range missingRpkgs {
-                       util.StatusMessage(util.VERBOSITY_QUIET,
-                               "Warning: Package \"%s\" not included in target 
\"%s\"\n",
-                               rpkg.Lpkg.FullName(), b.GetTarget().FullName())
-               }
-       }
-
-       if len(dg) > 0 {
-               util.StatusMessage(util.VERBOSITY_DEFAULT,
-                       builder.DepGraphText(dg)+"\n")
-       }
-}
-
-func targetRevdepCmd(cmd *cobra.Command, args []string) {
-       if len(args) < 1 {
-               NewtUsage(cmd, util.NewNewtError("Must specify target name"))
-       }
-
-       TryGetProject()
-
-       b, err := TargetBuilderForTargetOrUnittest(args[0])
-       if err != nil {
-               NewtUsage(cmd, err)
-       }
-
-       res, err := b.Resolve()
-       if err != nil {
-               NewtUsage(nil, err)
-       }
-
-       dg, err := b.CreateRevdepGraph()
-       if err != nil {
-               NewtUsage(nil, err)
-       }
-
-       // If user specified any package names, only include specified packages.
-       if len(args) > 1 {
-               rpkgs, err := ResolveRpkgs(res, args[1:])
-               if err != nil {
-                       NewtUsage(cmd, err)
-               }
-
-               var missingRpkgs []*resolve.ResolvePackage
-               dg, missingRpkgs = builder.FilterDepGraph(dg, rpkgs)
-               for _, rpkg := range missingRpkgs {
-                       util.StatusMessage(util.VERBOSITY_QUIET,
-                               "Warning: Package \"%s\" not included in target 
\"%s\"\n",
-                               rpkg.Lpkg.FullName(), b.GetTarget().FullName())
-               }
-       }
-
-       if len(dg) > 0 {
-               util.StatusMessage(util.VERBOSITY_DEFAULT,
-                       builder.RevdepGraphText(dg)+"\n")
-       }
-}
-
-func AddTargetCommands(cmd *cobra.Command) {
-       targetHelpText := ""
-       targetHelpEx := ""
-       targetCmd := &cobra.Command{
-               Use:     "target",
-               Short:   "Commands to create, delete, configure, and query 
targets",
-               Long:    targetHelpText,
-               Example: targetHelpEx,
-               Run: func(cmd *cobra.Command, args []string) {
-                       cmd.Usage()
-               },
-       }
-
-       cmd.AddCommand(targetCmd)
-
-       showHelpText := "Show all the variables for the target specified " +
-               "by <target-name>."
-       showHelpEx := "  newt target show <target-name>\n"
-       showHelpEx += "  newt target show my_target1"
-
-       showCmd := &cobra.Command{
-               Use:     "show",
-               Short:   "View target configuration variables",
-               Long:    showHelpText,
-               Example: showHelpEx,
-               Run:     targetShowCmd,
-       }
-       targetCmd.AddCommand(showCmd)
-       AddTabCompleteFn(showCmd, targetList)
-
-       setHelpText := "Set a target variable (<var-name>) on target "
-       setHelpText += "<target-name> to value <value>.\n\n"
-       setHelpText += "Warning: When setting the syscfg variable, a new 
syscfg.yml file\n"
-       setHelpText += "is created and the current settings are deleted. Only 
the settings\n"
-       setHelpText += "specified in the command are saved in the syscfg.yml 
file."
-       setHelpEx := "  newt target set my_target1 build_profile=optimized "
-       setHelpEx += "cflags=\"-DNDEBUG\"\n"
-       setHelpEx += "  newt target set my_target1 "
-       setHelpEx += "syscfg=LOG_NEWTMGR=1:CONFIG_NEWTMGR=0\n"
-
-       setCmd := &cobra.Command{
-               Use: "set <target-name> <var-name>=<value>" +
-                       "[:<var-name>=<value>...]",
-               Short:   "Set target configuration variable",
-               Long:    setHelpText,
-               Example: setHelpEx,
-               Run:     targetSetCmd,
-       }
-       targetCmd.AddCommand(setCmd)
-       AddTabCompleteFn(setCmd, targetList)
-
-       createHelpText := "Create a target specified by <target-name>."
-       createHelpEx := "  newt target create <target-name>\n"
-       createHelpEx += "  newt target create my_target1"
-
-       createCmd := &cobra.Command{
-               Use:     "create",
-               Short:   "Create a target",
-               Long:    createHelpText,
-               Example: createHelpEx,
-               Run:     targetCreateCmd,
-       }
-
-       targetCmd.AddCommand(createCmd)
-
-       delHelpText := "Delete the target specified by <target-name>."
-       delHelpEx := "  newt target delete <target-name>\n"
-       delHelpEx += "  newt target delete my_target1"
-
-       delCmd := &cobra.Command{
-               Use:     "delete",
-               Short:   "Delete target",
-               Long:    delHelpText,
-               Example: delHelpEx,
-               Run:     targetDelCmd,
-       }
-       delCmd.PersistentFlags().BoolVarP(&newtutil.NewtForce,
-               "force", "f", false,
-               "Force delete of targets with user files without prompt")
-
-       targetCmd.AddCommand(delCmd)
-
-       copyHelpText := "Create a new target <dst-target> by cloning 
<src-target>"
-       copyHelpEx := "  newt target copy blinky_sim my_target"
-
-       copyCmd := &cobra.Command{
-               Use:     "copy <src-target> <dst-target>",
-               Short:   "Copy target",
-               Long:    copyHelpText,
-               Example: copyHelpEx,
-               Run:     targetCopyCmd,
-       }
-
-       targetCmd.AddCommand(copyCmd)
-       AddTabCompleteFn(copyCmd, targetList)
-
-       configHelpText := "View or populate a target's system configuration"
-
-       configCmd := &cobra.Command{
-               Use:   "config",
-               Short: configHelpText,
-               Long:  configHelpText,
-               Run: func(cmd *cobra.Command, args []string) {
-                       cmd.Usage()
-               },
-       }
-
-       targetCmd.AddCommand(configCmd)
-
-       configShowCmd := &cobra.Command{
-               Use:   "show <target>",
-               Short: "View a target's system configuration",
-               Long:  "View a target's system configuration",
-               Run:   targetConfigShowCmd,
-       }
-
-       configCmd.AddCommand(configShowCmd)
-       AddTabCompleteFn(configShowCmd, func() []string {
-               return append(targetList(), unittestList()...)
-       })
-
-       configInitCmd := &cobra.Command{
-               Use:   "init",
-               Short: "Populate a target's system configuration file",
-               Long: "Populate a target's system configuration file (syscfg). 
" +
-                       "Unspecified settings are given default values.",
-               Run: targetConfigInitCmd,
-       }
-       configInitCmd.PersistentFlags().BoolVarP(&newtutil.NewtForce,
-               "force", "f", false,
-               "Force overwrite of target configuration")
-
-       configCmd.AddCommand(configInitCmd)
-       AddTabCompleteFn(configInitCmd, func() []string {
-               return append(targetList(), unittestList()...)
-       })
-
-       depHelpText := "View a target's dependency graph."
-
-       depCmd := &cobra.Command{
-               Use:   "dep <target> [pkg-1] [pkg-2] [...]",
-               Short: "View target's dependency graph",
-               Long:  depHelpText,
-               Run:   targetDepCmd,
-       }
-
-       targetCmd.AddCommand(depCmd)
-       AddTabCompleteFn(depCmd, func() []string {
-               return append(targetList(), unittestList()...)
-       })
-
-       revdepHelpText := "View a target's reverse-dependency graph."
-
-       revdepCmd := &cobra.Command{
-               Use:   "revdep <target> [pkg-1] [pkg-2] [...]",
-               Short: "View target's reverse-dependency graph",
-               Long:  revdepHelpText,
-               Run:   targetRevdepCmd,
-       }
-
-       targetCmd.AddCommand(revdepCmd)
-       AddTabCompleteFn(revdepCmd, func() []string {
-               return append(targetList(), unittestList()...)
-       })
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e31a7d31/newt/cli/util.go
----------------------------------------------------------------------
diff --git a/newt/cli/util.go b/newt/cli/util.go
deleted file mode 100644
index e9c0b4c..0000000
--- a/newt/cli/util.go
+++ /dev/null
@@ -1,353 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package cli
-
-import (
-       "bufio"
-       "bytes"
-       "fmt"
-       "os"
-       "path/filepath"
-       "regexp"
-       "strings"
-
-       log "github.com/Sirupsen/logrus"
-       "github.com/spf13/cobra"
-
-       "mynewt.apache.org/newt/newt/builder"
-       "mynewt.apache.org/newt/newt/newtutil"
-       "mynewt.apache.org/newt/newt/pkg"
-       "mynewt.apache.org/newt/newt/project"
-       "mynewt.apache.org/newt/newt/resolve"
-       "mynewt.apache.org/newt/newt/target"
-       "mynewt.apache.org/newt/util"
-)
-
-const TARGET_KEYWORD_ALL string = "all"
-const TARGET_DEFAULT_DIR string = "targets"
-const MFG_DEFAULT_DIR string = "mfgs"
-
-func NewtUsage(cmd *cobra.Command, err error) {
-       if err != nil {
-               sErr := err.(*util.NewtError)
-               log.Debugf("%s", sErr.StackTrace)
-               fmt.Fprintf(os.Stderr, "Error: %s\n", sErr.Text)
-       }
-
-       if cmd != nil {
-               fmt.Printf("\n")
-               fmt.Printf("%s - ", cmd.Name())
-               cmd.Help()
-       }
-       os.Exit(1)
-}
-
-// Display help text with a max line width of 79 characters
-func FormatHelp(text string) string {
-       // first compress all new lines and extra spaces
-       words := regexp.MustCompile("\\s+").Split(text, -1)
-       linelen := 0
-       fmtText := ""
-       for _, word := range words {
-               word = strings.Trim(word, "\n ") + " "
-               tmplen := linelen + len(word)
-               if tmplen >= 80 {
-                       fmtText += "\n"
-                       linelen = 0
-               }
-               fmtText += word
-               linelen += len(word)
-       }
-       return fmtText
-}
-
-func ResolveTarget(name string) *target.Target {
-       // Trim trailing slash from name.  This is necessary when tab
-       // completion is used to specify the name.
-       name = strings.TrimSuffix(name, "/")
-
-       targetMap := target.GetTargets()
-
-       // Check for fully-qualified name.
-       if t := targetMap[name]; t != nil {
-               return t
-       }
-
-       // Check the local "targets" directory.
-       if t := targetMap[TARGET_DEFAULT_DIR+"/"+name]; t != nil {
-               return t
-       }
-
-       // Check each repo alphabetically.
-       fullNames := []string{}
-       for fullName, _ := range targetMap {
-               fullNames = append(fullNames, fullName)
-       }
-       for _, fullName := range util.SortFields(fullNames...) {
-               if name == filepath.Base(fullName) {
-                       return targetMap[fullName]
-               }
-       }
-
-       return nil
-}
-
-// Resolves a list of target names and checks for the optional "all" keyword
-// among them.  Regardless of whether "all" is specified, all target names must
-// be valid, or an error is reported.
-//
-// @return                      targets, all (t/f), err
-func ResolveTargetsOrAll(names ...string) ([]*target.Target, bool, error) {
-       targets := []*target.Target{}
-       all := false
-
-       for _, name := range names {
-               if name == "all" {
-                       all = true
-               } else {
-                       t := ResolveTarget(name)
-                       if t == nil {
-                               return nil, false,
-                                       util.NewNewtError("Could not resolve 
target name: " + name)
-                       }
-
-                       targets = append(targets, t)
-               }
-       }
-
-       return targets, all, nil
-}
-
-func ResolveTargets(names ...string) ([]*target.Target, error) {
-       targets, all, err := ResolveTargetsOrAll(names...)
-       if err != nil {
-               return nil, err
-       }
-       if all {
-               return nil,
-                       util.NewNewtError("Keyword \"all\" not allowed in thie 
context")
-       }
-
-       return targets, nil
-}
-
-func ResolveNewTargetName(name string) (string, error) {
-       repoName, pkgName, err := newtutil.ParsePackageString(name)
-       if err != nil {
-               return "", err
-       }
-
-       if repoName != "" {
-               return "", util.NewNewtError("Target name cannot contain repo; 
" +
-                       "must be local")
-       }
-
-       if pkgName == TARGET_KEYWORD_ALL {
-               return "", util.NewNewtError("Target name " + 
TARGET_KEYWORD_ALL +
-                       " is reserved")
-       }
-
-       // "Naked" target names translate to "targets/<name>".
-       if !strings.Contains(pkgName, "/") {
-               pkgName = TARGET_DEFAULT_DIR + "/" + pkgName
-       }
-
-       if target.GetTargets()[pkgName] != nil {
-               return "", util.NewNewtError("Target already exists: " + 
pkgName)
-       }
-
-       return pkgName, nil
-}
-
-func PackageNameList(pkgs []*pkg.LocalPackage) string {
-       var buffer bytes.Buffer
-       for i, pack := range pkgs {
-               if i != 0 {
-                       buffer.WriteString(" ")
-               }
-               buffer.WriteString(pack.Name())
-       }
-
-       return buffer.String()
-}
-
-func ResetGlobalState() error {
-       // Make sure the current working directory is at the project base.
-       if err := os.Chdir(project.GetProject().Path()); err != nil {
-               return util.NewNewtError("Failed to reset global state: " +
-                       err.Error())
-       }
-
-       target.ResetTargets()
-       project.ResetProject()
-
-       return nil
-}
-
-func TryGetProject() *project.Project {
-       var p *project.Project
-       var err error
-
-       if p, err = project.TryGetProject(); err != nil {
-               NewtUsage(nil, err)
-       }
-
-       for _, w := range p.Warnings() {
-               util.ErrorMessage(util.VERBOSITY_QUIET, "* Warning: %s\n", w)
-       }
-
-       return p
-}
-
-func ResolveUnittest(pkgName string) (*target.Target, error) {
-       // Each unit test package gets its own target.  This target is a copy
-       // of the base unit test package, just with an appropriate name.  The
-       // reason each test needs a unique target is: syscfg and sysinit are
-       // target-specific.  If each test package shares a target, they will
-       // overwrite these generated headers each time they are run.  Worse, if
-       // two tests are run back-to-back, the timestamps may indicate that the
-       // headers have not changed between tests, causing build failures.
-       baseTarget := ResolveTarget(TARGET_TEST_NAME)
-       if baseTarget == nil {
-               return nil, util.FmtNewtError("Can't find unit test target: %s",
-                       TARGET_TEST_NAME)
-       }
-
-       targetName := fmt.Sprintf("%s/%s/%s",
-               TARGET_DEFAULT_DIR, TARGET_TEST_NAME,
-               builder.TestTargetName(pkgName))
-
-       t := ResolveTarget(targetName)
-       if t == nil {
-               targetName, err := ResolveNewTargetName(targetName)
-               if err != nil {
-                       return nil, err
-               }
-
-               t = baseTarget.Clone(TryGetProject().LocalRepo(), targetName)
-       }
-
-       return t, nil
-}
-
-// @return Target
-// @return LocalPackage         The package under test, if any.
-// @return error
-func ResolveTargetOrUnittest(pkgName string) (
-       *target.Target, *pkg.LocalPackage, error) {
-
-       // Argument can specify either a target or a unittest package.  
Determine
-       // which type the package is and construct a target builder 
appropriately.
-       if t, err := resolveExistingTargetArg(pkgName); err == nil {
-               return t, nil, nil
-       }
-
-       // Package wasn't a target.  Try for a unittest.
-       proj := TryGetProject()
-       pack, err := proj.ResolvePackage(proj.LocalRepo(), pkgName)
-       if err != nil {
-               return nil, nil, util.FmtNewtError(
-                       "Could not resolve target or unittest \"%s\"", pkgName)
-       }
-
-       if pack.Type() != pkg.PACKAGE_TYPE_UNITTEST {
-               return nil, nil, util.FmtNewtError(
-                       "Package \"%s\" is of type %s; "+
-                               "must be target or unittest", pkgName,
-                       pkg.PackageTypeNames[pack.Type()])
-       }
-
-       t, err := ResolveUnittest(pack.Name())
-       if err != nil {
-               return nil, nil, err
-       }
-
-       return t, pack, nil
-}
-
-func ResolvePackages(pkgNames []string) ([]*pkg.LocalPackage, error) {
-       proj := TryGetProject()
-
-       lpkgs := []*pkg.LocalPackage{}
-       for _, pkgName := range pkgNames {
-               pack, err := proj.ResolvePackage(proj.LocalRepo(), pkgName)
-               if err != nil {
-                       return nil, err
-               }
-               lpkgs = append(lpkgs, pack)
-       }
-
-       return lpkgs, nil
-}
-
-func ResolveRpkgs(res *resolve.Resolution, pkgNames []string) (
-       []*resolve.ResolvePackage, error) {
-
-       lpkgs, err := ResolvePackages(pkgNames)
-       if err != nil {
-               return nil, err
-       }
-
-       rpkgs := []*resolve.ResolvePackage{}
-       for _, lpkg := range lpkgs {
-               rpkg := res.LpkgRpkgMap[lpkg]
-               if rpkg == nil {
-                       return nil, util.FmtNewtError("Unexpected error; local 
package "+
-                               "%s lacks a corresponding resolve package", 
lpkg.FullName())
-               }
-
-               rpkgs = append(rpkgs, rpkg)
-       }
-
-       return rpkgs, nil
-}
-
-func TargetBuilderForTargetOrUnittest(pkgName string) (
-       *builder.TargetBuilder, error) {
-
-       t, testPkg, err := ResolveTargetOrUnittest(pkgName)
-       if err != nil {
-               return nil, err
-       }
-
-       if testPkg == nil {
-               return builder.NewTargetBuilder(t)
-       } else {
-               return builder.NewTargetTester(t, testPkg)
-       }
-}
-
-func PromptYesNo(dflt bool) bool {
-       scanner := bufio.NewScanner(os.Stdin)
-       rc := scanner.Scan()
-       if !rc {
-               return dflt
-       }
-
-       if strings.ToLower(scanner.Text()) == "y" {
-               return true
-       }
-
-       if strings.ToLower(scanner.Text()) == "n" {
-               return false
-       }
-
-       return dflt
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e31a7d31/newt/cli/vals_cmds.go
----------------------------------------------------------------------
diff --git a/newt/cli/vals_cmds.go b/newt/cli/vals_cmds.go
deleted file mode 100644
index 267fc79..0000000
--- a/newt/cli/vals_cmds.go
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package cli
-
-import (
-       "strings"
-
-       "github.com/spf13/cobra"
-
-       "mynewt.apache.org/newt/util"
-)
-
-func valsRunCmd(cmd *cobra.Command, args []string) {
-       if len(args) == 0 {
-               NewtUsage(cmd, nil)
-       }
-
-       allVals := [][]string{}
-       for _, elemType := range args {
-               vals, err := VarValues(elemType)
-               if err != nil {
-                       NewtUsage(cmd, err)
-               }
-
-               allVals = append(allVals, vals)
-       }
-
-       for i, vals := range allVals {
-               if i != 0 {
-                       util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
-               }
-
-               util.StatusMessage(util.VERBOSITY_DEFAULT, "%s names:\n", 
args[i])
-               for _, val := range vals {
-                       util.StatusMessage(util.VERBOSITY_DEFAULT, "    %s\n", 
val)
-               }
-       }
-}
-
-func AddValsCommands(cmd *cobra.Command) {
-       valsShortHelp := "Display valid values for the specified element 
type(s)"
-
-       valsLongHelp := valsShortHelp + ".\n\nElement types:\n    " +
-               strings.Join(VarTypes(), "\n    ")
-
-       valsCmd := &cobra.Command{
-               Use:   "vals <element-type> [element-types...]",
-               Short: valsShortHelp,
-               Long:  valsLongHelp,
-               Run:   valsRunCmd,
-       }
-
-       cmd.AddCommand(valsCmd)
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e31a7d31/newt/cli/vars.go
----------------------------------------------------------------------
diff --git a/newt/cli/vars.go b/newt/cli/vars.go
deleted file mode 100644
index 7ed25de..0000000
--- a/newt/cli/vars.go
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package cli
-
-import (
-       "fmt"
-       "path/filepath"
-       "sort"
-       "strings"
-
-       "mynewt.apache.org/newt/newt/interfaces"
-       "mynewt.apache.org/newt/newt/pkg"
-       "mynewt.apache.org/newt/newt/project"
-       "mynewt.apache.org/newt/util"
-)
-
-func varsFromPackageType(
-       pt interfaces.PackageType, fullPath bool) ([]string, error) {
-
-       values := []string{}
-
-       packs := project.GetProject().PackagesOfType(pt)
-       for _, pack := range packs {
-               value := pack.FullName()
-               if !fullPath {
-                       value = filepath.Base(value)
-               }
-
-               values = append(values, value)
-       }
-
-       sort.Strings(values)
-
-       return values, nil
-}
-
-func settingValues(settingName string) ([]string, error) {
-       settingMap := map[string]struct{}{}
-
-       packs := project.GetProject().PackagesOfType(-1)
-       for _, pack := range packs {
-               settings :=
-                       
pack.(*pkg.LocalPackage).PkgV.GetStringSlice(settingName)
-
-               for _, setting := range settings {
-                       settingMap[setting] = struct{}{}
-               }
-       }
-
-       values := make([]string, 0, len(settingMap))
-       for f, _ := range settingMap {
-               values = append(values, f)
-       }
-       sort.Strings(values)
-
-       return values, nil
-}
-
-func buildProfileValues() ([]string, error) {
-       profileMap := map[string]struct{}{}
-
-       packs := project.GetProject().PackagesOfType(pkg.PACKAGE_TYPE_COMPILER)
-       for _, pack := range packs {
-               v, err := util.ReadConfig(pack.(*pkg.LocalPackage).BasePath(),
-                       "compiler")
-               if err != nil {
-                       return nil, err
-               }
-
-               settingMap := v.AllSettings()
-               for k, _ := range settingMap {
-                       if strings.HasPrefix(k, "compiler.flags") {
-                               fields := strings.Split(k, ".")
-                               if len(fields) >= 3 {
-                                       profileMap[fields[2]] = struct{}{}
-                               }
-                       }
-               }
-       }
-
-       values := make([]string, 0, len(profileMap))
-       for k, _ := range profileMap {
-               values = append(values, k)
-       }
-
-       sort.Strings(values)
-
-       return values, nil
-}
-
-var varsMap = map[string]func() ([]string, error){
-       // Package names.
-       "app": func() ([]string, error) {
-               return varsFromPackageType(pkg.PACKAGE_TYPE_APP, true)
-       },
-       "bsp": func() ([]string, error) {
-               return varsFromPackageType(pkg.PACKAGE_TYPE_BSP, true)
-       },
-       "compiler": func() ([]string, error) {
-               return varsFromPackageType(pkg.PACKAGE_TYPE_COMPILER, true)
-       },
-       "lib": func() ([]string, error) {
-               return varsFromPackageType(pkg.PACKAGE_TYPE_LIB, true)
-       },
-       "sdk": func() ([]string, error) {
-               return varsFromPackageType(pkg.PACKAGE_TYPE_SDK, true)
-       },
-       "target": func() ([]string, error) {
-               return varsFromPackageType(pkg.PACKAGE_TYPE_TARGET, true)
-       },
-
-       // Package settings.
-       "api": func() ([]string, error) {
-               return settingValues("pkg.apis")
-       },
-
-       // Target settings.
-       "build_profile": func() ([]string, error) {
-               return buildProfileValues()
-       },
-}
-
-// Returns a slice of valid values for the target variable with the specified
-// name.  If an invalid target variable is specified, an error is returned.
-func VarValues(varName string) ([]string, error) {
-       _, err := project.TryGetProject()
-       if err != nil {
-               return nil, err
-       }
-
-       fn := varsMap[varName]
-       if fn == nil {
-               err := util.NewNewtError(fmt.Sprintf("Unknown setting name: 
\"%s\"",
-                       varName))
-               return nil, err
-       }
-
-       values, err := fn()
-       if err != nil {
-               return nil, err
-       }
-
-       return values, nil
-}
-
-func VarTypes() []string {
-       types := make([]string, 0, len(varsMap))
-
-       for k, _ := range varsMap {
-               types = append(types, k)
-       }
-
-       sort.Strings(types)
-       return types
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e31a7d31/newt/compat/compat.go
----------------------------------------------------------------------
diff --git a/newt/compat/compat.go b/newt/compat/compat.go
deleted file mode 100644
index 2e4355f..0000000
--- a/newt/compat/compat.go
+++ /dev/null
@@ -1,275 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package compat
-
-import (
-       "fmt"
-       "math"
-       "sort"
-
-       "github.com/spf13/cast"
-
-       "mynewt.apache.org/newt/newt/newtutil"
-       "mynewt.apache.org/newt/util"
-       "mynewt.apache.org/newt/viper"
-)
-
-type NewtCompatCode int
-
-const (
-       NEWT_COMPAT_GOOD NewtCompatCode = iota
-       NEWT_COMPAT_WARN
-       NEWT_COMPAT_ERROR
-)
-
-var NewtCompatCodeNames = map[NewtCompatCode]string{
-       NEWT_COMPAT_GOOD:  "good",
-       NEWT_COMPAT_WARN:  "warn",
-       NEWT_COMPAT_ERROR: "error",
-}
-
-type NewtCompatEntry struct {
-       code       NewtCompatCode
-       minNewtVer newtutil.Version
-}
-
-// Sorted in ascending order by newt version number.
-type NewtCompatTable []NewtCompatEntry
-
-type NewtCompatMap map[newtutil.Version]NewtCompatTable
-
-func newtCompatCodeToString(code NewtCompatCode) string {
-       return NewtCompatCodeNames[code]
-}
-
-func newtCompatCodeFromString(codeStr string) (NewtCompatCode, error) {
-       for c, s := range NewtCompatCodeNames {
-               if codeStr == s {
-                       return c, nil
-               }
-       }
-
-       return NewtCompatCode(0),
-               util.FmtNewtError("Invalid newt compatibility code: %s", 
codeStr)
-}
-
-func parseNcEntry(verStr string, codeStr string) (NewtCompatEntry, error) {
-       entry := NewtCompatEntry{}
-       var err error
-
-       entry.minNewtVer, err = newtutil.ParseVersion(verStr)
-       if err != nil {
-               return entry, err
-       }
-
-       entry.code, err = newtCompatCodeFromString(codeStr)
-       if err != nil {
-               return entry, err
-       }
-
-       return entry, nil
-}
-
-func ParseNcTable(strMap map[string]string) (NewtCompatTable, error) {
-       tbl := NewtCompatTable{}
-
-       for v, c := range strMap {
-               entry, err := parseNcEntry(v, c)
-               if err != nil {
-                       return tbl, err
-               }
-
-               tbl = append(tbl, entry)
-       }
-
-       sortEntries(tbl)
-
-       return tbl, nil
-}
-
-func ReadNcMap(v *viper.Viper) (NewtCompatMap, error) {
-       mp := NewtCompatMap{}
-       ncMap := v.GetStringMap("repo.newt_compatibility")
-
-       for k, v := range ncMap {
-               repoVer, err := newtutil.ParseVersion(k)
-               if err != nil {
-                       return nil, util.FmtNewtError("Newt compatibility table 
contains " +
-                               "invalid repo version \"%s\"")
-               }
-
-               if _, ok := mp[repoVer]; ok {
-                       return nil, util.FmtNewtError("Newt compatibility table 
contains "+
-                               "duplicate version specifier: %s", 
repoVer.String())
-               }
-
-               strMap := cast.ToStringMapString(v)
-               tbl, err := ParseNcTable(strMap)
-               if err != nil {
-                       return nil, err
-               }
-
-               mp[repoVer] = tbl
-       }
-
-       return mp, nil
-}
-
-func (tbl NewtCompatTable) matchIdx(newtVer newtutil.Version) int {
-       // Iterate the table backwards.  The first entry whose version is less 
than
-       // or equal to the specified version is the match.
-       for i := 0; i < len(tbl); i++ {
-               idx := len(tbl) - i - 1
-               entry := &tbl[idx]
-               cmp := newtutil.VerCmp(entry.minNewtVer, newtVer)
-               if cmp <= 0 {
-                       return idx
-               }
-       }
-
-       return -1
-}
-
-func (tbl NewtCompatTable) newIdxRange(i int, j int) []int {
-       if i >= len(tbl) {
-               return []int{j, i}
-       }
-
-       if j >= len(tbl) {
-               return []int{i, j}
-       }
-
-       e1 := tbl[i]
-       e2 := tbl[j]
-
-       if newtutil.VerCmp(e1.minNewtVer, e2.minNewtVer) < 0 {
-               return []int{i, j}
-       } else {
-               return []int{j, i}
-       }
-}
-
-func (tbl NewtCompatTable) idxRangesWithCode(c NewtCompatCode) [][]int {
-       ranges := [][]int{}
-
-       curi := -1
-       for i, e := range tbl {
-               if curi == -1 {
-                       if e.code == c {
-                               curi = i
-                       }
-               } else {
-                       if e.code != c {
-                               ranges = append(ranges, tbl.newIdxRange(curi, 
i))
-                               curi = -1
-                       }
-               }
-       }
-
-       if curi != -1 {
-               ranges = append(ranges, tbl.newIdxRange(curi, len(tbl)))
-       }
-       return ranges
-}
-
-func (tbl NewtCompatTable) minMaxTgtVers(goodRange []int) (
-       newtutil.Version, newtutil.Version, newtutil.Version) {
-
-       minVer := tbl[goodRange[0]].minNewtVer
-
-       var maxVer newtutil.Version
-       if goodRange[1] < len(tbl) {
-               maxVer = tbl[goodRange[1]].minNewtVer
-       } else {
-               maxVer = newtutil.Version{math.MaxInt64, math.MaxInt64, 
math.MaxInt64}
-       }
-
-       targetVer := tbl[goodRange[1]-1].minNewtVer
-
-       return minVer, maxVer, targetVer
-}
-
-// @return NewtCompatCode       The severity of the newt incompatibility
-//         string               The warning or error message to display in case
-//                                  of incompatibility.
-func (tbl NewtCompatTable) CheckNewtVer(
-       newtVer newtutil.Version) (NewtCompatCode, string) {
-
-       var code NewtCompatCode
-       idx := tbl.matchIdx(newtVer)
-       if idx == -1 {
-               // This version of newt is older than every entry in the table.
-               code = NEWT_COMPAT_ERROR
-       } else {
-               code = tbl[idx].code
-               if code == NEWT_COMPAT_GOOD {
-                       return NEWT_COMPAT_GOOD, ""
-               }
-       }
-
-       goodRanges := tbl.idxRangesWithCode(NEWT_COMPAT_GOOD)
-       for i := 0; i < len(goodRanges); i++ {
-               minVer, maxVer, tgtVer := tbl.minMaxTgtVers(goodRanges[i])
-
-               if newtutil.VerCmp(newtVer, minVer) < 0 {
-                       return code, fmt.Sprintf("Please upgrade your newt tool 
to "+
-                               "version %s", tgtVer.String())
-               }
-
-               if newtutil.VerCmp(newtVer, maxVer) >= 0 {
-                       return code, fmt.Sprintf("Please upgrade your project "+
-                               "or downgrade newt to %s", tgtVer.String())
-               }
-       }
-
-       return code, ""
-}
-
-type entrySorter struct {
-       entries []NewtCompatEntry
-}
-
-func (s entrySorter) Len() int {
-       return len(s.entries)
-}
-func (s entrySorter) Swap(i, j int) {
-       s.entries[i], s.entries[j] = s.entries[j], s.entries[i]
-}
-func (s entrySorter) Less(i, j int) bool {
-       e1 := s.entries[i]
-       e2 := s.entries[j]
-
-       cmp := newtutil.VerCmp(e1.minNewtVer, e2.minNewtVer)
-       if cmp < 0 {
-               return true
-       } else if cmp > 0 {
-               return false
-       }
-
-       return false
-}
-
-func sortEntries(entries []NewtCompatEntry) {
-       sorter := entrySorter{
-               entries: entries,
-       }
-
-       sort.Sort(sorter)
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e31a7d31/newt/downloader/downloader.go
----------------------------------------------------------------------
diff --git a/newt/downloader/downloader.go b/newt/downloader/downloader.go
deleted file mode 100644
index c8e13c6..0000000
--- a/newt/downloader/downloader.go
+++ /dev/null
@@ -1,472 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package downloader
-
-import (
-       "fmt"
-       "io"
-       "io/ioutil"
-       "net/http"
-       "os"
-       "os/exec"
-       "path/filepath"
-       "strings"
-
-       log "github.com/Sirupsen/logrus"
-
-       "mynewt.apache.org/newt/newt/newtutil"
-       "mynewt.apache.org/newt/util"
-)
-
-type Downloader interface {
-       FetchFile(name string, dest string) error
-       Branch() string
-       SetBranch(branch string)
-       DownloadRepo(branch string) (string, error)
-       CurrentBranch(path string) (string, error)
-       UpdateRepo(path string, branchName string) error
-       CleanupRepo(path string, branchName string) error
-       LocalDiff(path string) ([]byte, error)
-}
-
-type GenericDownloader struct {
-       branch string
-}
-
-type GithubDownloader struct {
-       GenericDownloader
-       Server string
-       User   string
-       Repo   string
-
-       // Github access token for private repositories.
-       Token string
-
-       // Basic authentication login and password for private repositories.
-       Login    string
-       Password string
-}
-
-type LocalDownloader struct {
-       GenericDownloader
-
-       // Path to parent directory of repository.yml file.
-       Path string
-}
-
-func executeGitCommand(dir string, cmd []string) ([]byte, error) {
-       wd, err := os.Getwd()
-       if err != nil {
-               return nil, util.NewNewtError(err.Error())
-       }
-
-       gitPath, err := exec.LookPath("git")
-       if err != nil {
-               return nil, util.NewNewtError(fmt.Sprintf("Can't find git 
binary: %s\n",
-                       err.Error()))
-       }
-       gitPath = filepath.ToSlash(gitPath)
-
-       if err := os.Chdir(dir); err != nil {
-               return nil, util.NewNewtError(err.Error())
-       }
-
-       defer os.Chdir(wd)
-
-       gitCmd := []string{gitPath}
-       gitCmd = append(gitCmd, cmd...)
-       output, err := util.ShellCommand(gitCmd, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return output, nil
-}
-
-func isTag(repoDir string, branchName string) bool {
-       cmd := []string{"tag", "--list"}
-       output, _ := executeGitCommand(repoDir, cmd)
-       return strings.Contains(string(output), branchName)
-}
-
-func branchExists(repoDir string, branchName string) bool {
-       cmd := []string{"show-ref", "--verify", "--quiet", "refs/heads/" + 
branchName}
-       _, err := executeGitCommand(repoDir, cmd)
-       return err == nil
-}
-
-// checkout does checkout a branch, or create a new branch from a tag name
-// if the commit supplied is a tag. sha1 based commits have no special
-// handling and result in dettached from HEAD state.
-func checkout(repoDir string, commit string) error {
-       var cmd []string
-       if isTag(repoDir, commit) && !branchExists(repoDir, commit) {
-               util.StatusMessage(util.VERBOSITY_VERBOSE, "Will create new 
branch %s"+
-                       " from tag %s\n", commit, "tags/"+commit)
-               cmd = []string{
-                       "checkout",
-                       "tags/" + commit,
-                       "-b",
-                       commit,
-               }
-       } else {
-               util.StatusMessage(util.VERBOSITY_VERBOSE, "Will checkout 
branch %s\n",
-                       commit)
-               cmd = []string{
-                       "checkout",
-                       commit,
-               }
-       }
-       _, err := executeGitCommand(repoDir, cmd)
-       return err
-}
-
-// mergeBranches applies upstream changes to the local copy and must be
-// preceeded by a "fetch" to achieve any meaningful result.
-func mergeBranches(repoDir string) {
-       branches := []string{"master", "develop"}
-       for _, branch := range branches {
-               err := checkout(repoDir, branch)
-               if err != nil {
-                       continue
-               }
-               _, err = executeGitCommand(repoDir, []string{"merge", "origin/" 
+ branch})
-               if err != nil {
-                       util.StatusMessage(util.VERBOSITY_VERBOSE, "Merging 
changes from origin/%s: %s\n",
-                               branch, err)
-               } else {
-                       util.StatusMessage(util.VERBOSITY_VERBOSE, "Merging 
changes from origin/%s\n",
-                               branch)
-               }
-               // XXX: ignore error, probably resulting from a branch not 
available at
-               //      origin anymore.
-       }
-}
-
-func fetch(repoDir string) error {
-       util.StatusMessage(util.VERBOSITY_VERBOSE, "Fetching new remote 
branches/tags\n")
-       _, err := executeGitCommand(repoDir, []string{"fetch", "--tags"})
-       return err
-}
-
-// stash saves current changes locally and returns if a new stash was
-// created (if there where no changes, there's no need to stash)
-func stash(repoDir string) (bool, error) {
-       util.StatusMessage(util.VERBOSITY_VERBOSE, "Stashing local changes\n")
-       output, err := executeGitCommand(repoDir, []string{"stash"})
-       if err != nil {
-               return false, err
-       }
-       return strings.Contains(string(output), "Saved"), nil
-}
-
-func stashPop(repoDir string) error {
-       util.StatusMessage(util.VERBOSITY_VERBOSE, "Un-stashing local 
changes\n")
-       _, err := executeGitCommand(repoDir, []string{"stash", "pop"})
-       return err
-}
-
-func clean(repoDir string) error {
-       _, err := executeGitCommand(repoDir, []string{"clean", "-f"})
-       return err
-}
-
-func (gd *GenericDownloader) Branch() string {
-       return gd.branch
-}
-
-func (gd *GenericDownloader) SetBranch(branch string) {
-       gd.branch = branch
-}
-
-func (gd *GenericDownloader) TempDir() (string, error) {
-       dir, err := ioutil.TempDir("", "newt-tmp")
-       return dir, err
-}
-
-func (gd *GithubDownloader) FetchFile(name string, dest string) error {
-       server := "api.github.com"
-       prefix := "repos"
-       if gd.Server != "" {
-               server = gd.Server
-               prefix = "api/v3/repos"
-       }
-       url := fmt.Sprintf("https://%s/%s/%s/%s/contents/%s?ref=%s";,
-               server, prefix, gd.User, gd.Repo, name, gd.Branch())
-
-       req, err := http.NewRequest("GET", url, nil)
-       req.Header.Add("Accept", "application/vnd.github.v3.raw")
-
-       if gd.Token != "" {
-               // XXX: Add command line option to include token in log.
-               log.Debugf("Using authorization token")
-               req.Header.Add("Authorization", "token "+gd.Token)
-       } else if gd.Login != "" && gd.Password != "" {
-               // XXX: Add command line option to include password in log.
-               log.Debugf("Using basic auth; login=%s", gd.Login)
-               req.SetBasicAuth(gd.Login, gd.Password)
-       }
-
-       log.Debugf("Fetching file %s (url: %s) to %s", name, url, dest)
-       client := &http.Client{}
-       rsp, err := client.Do(req)
-       if err != nil {
-               return util.NewNewtError(err.Error())
-       }
-       defer rsp.Body.Close()
-
-       if rsp.StatusCode != http.StatusOK {
-               errMsg := fmt.Sprintf("Failed to download '%s'; status=%s",
-                       url, rsp.Status)
-               switch rsp.StatusCode {
-               case http.StatusNotFound:
-                       errMsg += "; URL incorrect or repository private?"
-               case http.StatusUnauthorized:
-                       errMsg += "; credentials incorrect?"
-               }
-
-               return util.NewNewtError(errMsg)
-       }
-
-       handle, err := os.Create(dest)
-       if err != nil {
-               return util.NewNewtError(err.Error())
-       }
-       defer handle.Close()
-
-       _, err = io.Copy(handle, rsp.Body)
-
-       return nil
-}
-
-func (gd *GithubDownloader) CurrentBranch(path string) (string, error) {
-       cmd := []string{"rev-parse", "--abbrev-ref", "HEAD"}
-       branch, err := executeGitCommand(path, cmd)
-       return strings.Trim(string(branch), "\r\n"), err
-}
-
-func (gd *GithubDownloader) UpdateRepo(path string, branchName string) error {
-       err := fetch(path)
-       if err != nil {
-               return err
-       }
-
-       stashed, err := stash(path)
-       if err != nil {
-               return err
-       }
-
-       mergeBranches(path)
-
-       err = checkout(path, branchName)
-       if err != nil {
-               return err
-       }
-
-       if stashed {
-               return stashPop(path)
-       }
-
-       return nil
-}
-
-func (gd *GithubDownloader) CleanupRepo(path string, branchName string) error {
-       _, err := stash(path)
-       if err != nil {
-               return err
-       }
-
-       err = clean(path)
-       if err != nil {
-               return err
-       }
-
-       // TODO: needs handling of non-tracked files
-
-       return gd.UpdateRepo(path, branchName)
-}
-
-func (gd *GithubDownloader) LocalDiff(path string) ([]byte, error) {
-       return executeGitCommand(path, []string{"diff"})
-}
-
-func (gd *GithubDownloader) DownloadRepo(commit string) (string, error) {
-       // Get a temporary directory, and copy the repository into that 
directory.
-       tmpdir, err := ioutil.TempDir("", "newt-repo")
-       if err != nil {
-               return "", err
-       }
-
-       // Currently only the master branch is supported.
-       branch := "master"
-       server := "github.com"
-
-       if gd.Server != "" {
-               server = gd.Server
-       }
-       url := fmt.Sprintf("https://%s/%s/%s.git";, server, gd.User, gd.Repo)
-       util.StatusMessage(util.VERBOSITY_VERBOSE, "Downloading "+
-               "repository %s (branch: %s; commit: %s) at %s\n", gd.Repo, 
branch,
-               commit, url)
-
-       gitPath, err := exec.LookPath("git")
-       if err != nil {
-               os.RemoveAll(tmpdir)
-               return "", util.NewNewtError(fmt.Sprintf("Can't find git 
binary: %s\n",
-                       err.Error()))
-       }
-       gitPath = filepath.ToSlash(gitPath)
-
-       // Clone the repository.
-       cmd := []string{
-               gitPath,
-               "clone",
-               "-b",
-               branch,
-               url,
-               tmpdir,
-       }
-
-       if util.Verbosity >= util.VERBOSITY_VERBOSE {
-               if err := util.ShellInteractiveCommand(cmd, nil); err != nil {
-                       os.RemoveAll(tmpdir)
-                       return "", err
-               }
-       } else {
-               if _, err := util.ShellCommand(cmd, nil); err != nil {
-                       return "", err
-               }
-       }
-
-       // Checkout the specified commit.
-       if err := checkout(tmpdir, commit); err != nil {
-               return "", err
-       }
-
-       return tmpdir, nil
-}
-
-func NewGithubDownloader() *GithubDownloader {
-       return &GithubDownloader{}
-}
-
-func (ld *LocalDownloader) FetchFile(name string, dest string) error {
-       srcPath := ld.Path + "/" + name
-
-       log.Debugf("Fetching file %s to %s", srcPath, dest)
-       if err := util.CopyFile(srcPath, dest); err != nil {
-               return err
-       }
-
-       return nil
-}
-
-func (ld *LocalDownloader) CurrentBranch(path string) (string, error) {
-       cmd := []string{"rev-parse", "--abbrev-ref", "HEAD"}
-       branch, err := executeGitCommand(path, cmd)
-       return strings.Trim(string(branch), "\r\n"), err
-}
-
-// NOTE: intentionally always error...
-func (ld *LocalDownloader) UpdateRepo(path string, branchName string) error {
-       return util.NewNewtError(fmt.Sprintf("Can't pull from a local repo\n"))
-}
-
-func (ld *LocalDownloader) CleanupRepo(path string, branchName string) error {
-       os.RemoveAll(path)
-       _, err := ld.DownloadRepo(branchName)
-       return err
-}
-
-func (ld *LocalDownloader) LocalDiff(path string) ([]byte, error) {
-       return executeGitCommand(path, []string{"diff"})
-}
-
-func (ld *LocalDownloader) DownloadRepo(commit string) (string, error) {
-       // Get a temporary directory, and copy the repository into that 
directory.
-       tmpdir, err := ioutil.TempDir("", "newt-repo")
-       if err != nil {
-               return "", err
-       }
-
-       util.StatusMessage(util.VERBOSITY_VERBOSE,
-               "Downloading local repository %s\n", ld.Path)
-
-       if err := util.CopyDir(ld.Path, tmpdir); err != nil {
-               return "", err
-       }
-
-       // Checkout the specified commit.
-       if err := checkout(tmpdir, commit); err != nil {
-               return "", err
-       }
-
-       return tmpdir, nil
-}
-
-func NewLocalDownloader() *LocalDownloader {
-       return &LocalDownloader{}
-}
-
-func LoadDownloader(repoName string, repoVars map[string]string) (
-       Downloader, error) {
-
-       switch repoVars["type"] {
-       case "github":
-               gd := NewGithubDownloader()
-
-               gd.Server = repoVars["server"]
-               gd.User = repoVars["user"]
-               gd.Repo = repoVars["repo"]
-
-               // The project.yml file can contain github access tokens and
-               // authentication credentials, but this file is probably 
world-readable
-               // and therefore not a great place for this.
-               gd.Token = repoVars["token"]
-               gd.Login = repoVars["login"]
-               gd.Password = repoVars["password"]
-
-               // Alternatively, the user can put security material in
-               // $HOME/.newt/repos.yml.
-               newtrc := newtutil.Newtrc()
-               privRepo := newtrc.GetStringMapString("repository." + repoName)
-               if privRepo != nil {
-                       if gd.Token == "" {
-                               gd.Token = privRepo["token"]
-                       }
-                       if gd.Login == "" {
-                               gd.Login = privRepo["login"]
-                       }
-                       if gd.Password == "" {
-                               gd.Password = privRepo["password"]
-                       }
-               }
-               return gd, nil
-
-       case "local":
-               ld := NewLocalDownloader()
-               ld.Path = repoVars["path"]
-               return ld, nil
-
-       default:
-               return nil, util.FmtNewtError("Invalid repository type: %s",
-                       repoVars["type"])
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e31a7d31/newt/flash/flash.go
----------------------------------------------------------------------
diff --git a/newt/flash/flash.go b/newt/flash/flash.go
deleted file mode 100644
index 97114c5..0000000
--- a/newt/flash/flash.go
+++ /dev/null
@@ -1,421 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package flash
-
-import (
-       "bytes"
-       "fmt"
-       "io"
-       "io/ioutil"
-       "os"
-       "path/filepath"
-       "sort"
-       "strings"
-
-       log "github.com/Sirupsen/logrus"
-       "github.com/spf13/cast"
-
-       "mynewt.apache.org/newt/newt/newtutil"
-       "mynewt.apache.org/newt/util"
-)
-
-const FLASH_AREA_NAME_BOOTLOADER = "FLASH_AREA_BOOTLOADER"
-const FLASH_AREA_NAME_IMAGE_0 = "FLASH_AREA_IMAGE_0"
-const FLASH_AREA_NAME_IMAGE_1 = "FLASH_AREA_IMAGE_1"
-const FLASH_AREA_NAME_IMAGE_SCRATCH = "FLASH_AREA_IMAGE_SCRATCH"
-
-var SYSTEM_AREA_NAME_ID_MAP = map[string]int{
-       FLASH_AREA_NAME_BOOTLOADER:    0,
-       FLASH_AREA_NAME_IMAGE_0:       1,
-       FLASH_AREA_NAME_IMAGE_1:       2,
-       FLASH_AREA_NAME_IMAGE_SCRATCH: 3,
-}
-
-const AREA_USER_ID_MIN = 16
-
-const HEADER_PATH = "sysflash/sysflash.h"
-const C_VAR_NAME = "sysflash_map_dflt"
-const C_VAR_COMMENT = `/**
- * This flash map definition is used for two purposes:
- * 1. To locate the meta area, which contains the true flash map definition.
- * 2. As a fallback in case the meta area cannot be read from flash.
- */
-`
-
-type FlashArea struct {
-       Name   string
-       Id     int
-       Device int
-       Offset int
-       Size   int
-}
-
-type FlashMap struct {
-       Areas       map[string]FlashArea
-       Overlaps    [][]FlashArea
-       IdConflicts [][]FlashArea
-}
-
-func newFlashMap() FlashMap {
-       return FlashMap{
-               Areas:    map[string]FlashArea{},
-               Overlaps: [][]FlashArea{},
-       }
-}
-
-func flashAreaErr(areaName string, format string, args ...interface{}) error {
-       return util.NewNewtError(
-               "failure while parsing flash area \"" + areaName + "\": " +
-                       fmt.Sprintf(format, args...))
-}
-
-func parseSize(val string) (int, error) {
-       lower := strings.ToLower(val)
-
-       multiplier := 1
-       if strings.HasSuffix(lower, "kb") {
-               multiplier = 1024
-               lower = strings.TrimSuffix(lower, "kb")
-       }
-
-       num, err := util.AtoiNoOct(lower)
-       if err != nil {
-               return 0, err
-       }
-
-       return num * multiplier, nil
-}
-
-func parseFlashArea(
-       name string, ymlFields map[string]interface{}) (FlashArea, error) {
-
-       area := FlashArea{
-               Name: name,
-       }
-
-       idPresent := false
-       devicePresent := false
-       offsetPresent := false
-       sizePresent := false
-
-       var isSystem bool
-       area.Id, isSystem = SYSTEM_AREA_NAME_ID_MAP[name]
-
-       var err error
-
-       fields := cast.ToStringMapString(ymlFields)
-       for k, v := range fields {
-               switch k {
-               case "user_id":
-                       if isSystem {
-                               return area, flashAreaErr(name,
-                                       "system areas cannot specify a user ID")
-                       }
-                       userId, err := util.AtoiNoOct(v)
-                       if err != nil {
-                               return area, flashAreaErr(name, "invalid user 
id: %s", v)
-                       }
-                       area.Id = userId + AREA_USER_ID_MIN
-                       idPresent = true
-
-               case "device":
-                       area.Device, err = util.AtoiNoOct(v)
-                       if err != nil {
-                               return area, flashAreaErr(name, "invalid 
device: %s", v)
-                       }
-                       devicePresent = true
-
-               case "offset":
-                       area.Offset, err = util.AtoiNoOct(v)
-                       if err != nil {
-                               return area, flashAreaErr(name, "invalid 
offset: %s", v)
-                       }
-                       offsetPresent = true
-
-               case "size":
-                       area.Size, err = parseSize(v)
-                       if err != nil {
-                               return area, flashAreaErr(name, err.Error())
-                       }
-                       sizePresent = true
-
-               default:
-                       util.StatusMessage(util.VERBOSITY_QUIET,
-                               "Warning: flash area \"%s\" contains 
unrecognized field: %s",
-                               name, k)
-               }
-       }
-
-       if !isSystem && !idPresent {
-               return area, flashAreaErr(name, "required field \"user_id\" 
missing")
-       }
-       if !devicePresent {
-               return area, flashAreaErr(name, "required field \"device\" 
missing")
-       }
-       if !offsetPresent {
-               return area, flashAreaErr(name, "required field \"offset\" 
missing")
-       }
-       if !sizePresent {
-               return area, flashAreaErr(name, "required field \"size\" 
missing")
-       }
-
-       return area, nil
-}
-
-func (flashMap FlashMap) unSortedAreas() []FlashArea {
-       areas := make([]FlashArea, 0, len(flashMap.Areas))
-       for _, area := range flashMap.Areas {
-               areas = append(areas, area)
-       }
-
-       return areas
-}
-
-func (flashMap FlashMap) SortedAreas() []FlashArea {
-       idMap := make(map[int]FlashArea, len(flashMap.Areas))
-       ids := make([]int, 0, len(flashMap.Areas))
-       for _, area := range flashMap.Areas {
-               idMap[area.Id] = area
-               ids = append(ids, area.Id)
-       }
-       sort.Ints(ids)
-
-       areas := make([]FlashArea, len(ids))
-       for i, id := range ids {
-               areas[i] = idMap[id]
-       }
-
-       return areas
-}
-
-func (flashMap FlashMap) DeviceIds() []int {
-       deviceMap := map[int]struct{}{}
-
-       for _, area := range flashMap.Areas {
-               deviceMap[area.Device] = struct{}{}
-       }
-
-       devices := make([]int, 0, len(deviceMap))
-       for device, _ := range deviceMap {
-               devices = append(devices, device)
-       }
-       sort.Ints(devices)
-
-       return devices
-}
-
-func areasDistinct(a FlashArea, b FlashArea) bool {
-       var lo FlashArea
-       var hi FlashArea
-
-       if a.Offset < b.Offset {
-               lo = a
-               hi = b
-       } else {
-               lo = b
-               hi = a
-       }
-
-       return lo.Device != hi.Device || lo.Offset+lo.Size <= hi.Offset
-}
-
-func (flashMap *FlashMap) detectOverlaps() {
-       flashMap.Overlaps = [][]FlashArea{}
-
-       // Convert the map to a slice.
-       areas := flashMap.unSortedAreas()
-
-       for i := 0; i < len(areas)-1; i++ {
-               iarea := areas[i]
-               for j := i + 1; j < len(areas); j++ {
-                       jarea := areas[j]
-
-                       if !areasDistinct(iarea, jarea) {
-                               flashMap.Overlaps = append(
-                                       flashMap.Overlaps, []FlashArea{iarea, 
jarea})
-                       }
-
-                       if iarea.Id == jarea.Id {
-                               flashMap.IdConflicts = append(
-                                       flashMap.IdConflicts, 
[]FlashArea{iarea, jarea})
-                       }
-               }
-       }
-}
-
-func (flashMap FlashMap) ErrorText() string {
-       str := ""
-
-       if len(flashMap.IdConflicts) > 0 {
-               str += "Conflicting flash area IDs detected:\n"
-
-               for _, pair := range flashMap.IdConflicts {
-                       str += fmt.Sprintf("    (%d) %s =/= %s\n",
-                               pair[0].Id-AREA_USER_ID_MIN, pair[0].Name, 
pair[1].Name)
-               }
-       }
-
-       if len(flashMap.Overlaps) > 0 {
-               str += "Overlapping flash areas detected:\n"
-
-               for _, pair := range flashMap.Overlaps {
-                       str += fmt.Sprintf("    %s =/= %s\n", pair[0].Name, 
pair[1].Name)
-               }
-       }
-
-       return str
-}
-
-func Read(ymlFlashMap map[string]interface{}) (FlashMap, error) {
-       flashMap := newFlashMap()
-
-       ymlAreas := ymlFlashMap["areas"]
-       if ymlAreas == nil {
-               return flashMap, util.NewNewtError(
-                       "\"areas\" mapping missing from flash map definition")
-       }
-
-       areaMap := cast.ToStringMap(ymlAreas)
-       for k, v := range areaMap {
-               if _, ok := flashMap.Areas[k]; ok {
-                       return flashMap, flashAreaErr(k, "name conflict")
-               }
-
-               ymlArea := cast.ToStringMap(v)
-               area, err := parseFlashArea(k, ymlArea)
-               if err != nil {
-                       return flashMap, flashAreaErr(k, err.Error())
-               }
-
-               flashMap.Areas[k] = area
-       }
-
-       flashMap.detectOverlaps()
-
-       return flashMap, nil
-}
-
-func (flashMap FlashMap) varDecl() string {
-       return fmt.Sprintf("const struct flash_area %s[%d]", C_VAR_NAME,
-               len(flashMap.Areas))
-}
-
-func (area FlashArea) writeHeader(w io.Writer) {
-       fmt.Fprintf(w, "#define %-40s %d\n", area.Name, area.Id)
-}
-
-func (flashMap FlashMap) writeHeader(w io.Writer) {
-       fmt.Fprintf(w, newtutil.GeneratedPreamble())
-
-       fmt.Fprintf(w, "#ifndef H_MYNEWT_SYSFLASH_\n")
-       fmt.Fprintf(w, "#define H_MYNEWT_SYSFLASH_\n")
-       fmt.Fprintf(w, "\n")
-       fmt.Fprintf(w, "#include \"flash_map/flash_map.h\"\n")
-       fmt.Fprintf(w, "\n")
-       fmt.Fprintf(w, "%s", C_VAR_COMMENT)
-       fmt.Fprintf(w, "extern %s;\n", flashMap.varDecl())
-       fmt.Fprintf(w, "\n")
-
-       for _, area := range flashMap.SortedAreas() {
-               area.writeHeader(w)
-       }
-
-       fmt.Fprintf(w, "\n#endif\n")
-}
-
-func sizeComment(size int) string {
-       if size%1024 != 0 {
-               return ""
-       }
-
-       return fmt.Sprintf(" /* %d kB */", size/1024)
-}
-
-func (area FlashArea) writeSrc(w io.Writer) {
-       fmt.Fprintf(w, "    /* %s */\n", area.Name)
-       fmt.Fprintf(w, "    {\n")
-       fmt.Fprintf(w, "        .fa_id = %d,\n", area.Id)
-       fmt.Fprintf(w, "        .fa_device_id = %d,\n", area.Device)
-       fmt.Fprintf(w, "        .fa_off = 0x%08x,\n", area.Offset)
-       fmt.Fprintf(w, "        .fa_size = %d,%s\n", area.Size,
-               sizeComment(area.Size))
-       fmt.Fprintf(w, "    },\n")
-}
-
-func (flashMap FlashMap) writeSrc(w io.Writer) {
-       fmt.Fprintf(w, newtutil.GeneratedPreamble())
-
-       fmt.Fprintf(w, "#include \"%s\"\n", HEADER_PATH)
-       fmt.Fprintf(w, "\n")
-       fmt.Fprintf(w, "%s", C_VAR_COMMENT)
-       fmt.Fprintf(w, "%s = {", flashMap.varDecl())
-
-       for _, area := range flashMap.SortedAreas() {
-               fmt.Fprintf(w, "\n")
-               area.writeSrc(w)
-       }
-
-       fmt.Fprintf(w, "};\n")
-}
-
-func (flashMap FlashMap) ensureWrittenGen(path string, contents []byte) error {
-       writeReqd, err := util.FileContentsChanged(path, contents)
-       if err != nil {
-               return err
-       }
-       if !writeReqd {
-               log.Debugf("flash map unchanged; not writing file (%s).", path)
-               return nil
-       }
-
-       log.Debugf("flash map changed; writing file (%s).", path)
-
-       if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
-               return util.NewNewtError(err.Error())
-       }
-
-       if err := ioutil.WriteFile(path, contents, 0644); err != nil {
-               return util.NewNewtError(err.Error())
-       }
-
-       return nil
-}
-
-func (flashMap FlashMap) EnsureWritten(
-       srcDir string, includeDir string, targetName string) error {
-
-       buf := bytes.Buffer{}
-       flashMap.writeSrc(&buf)
-       if err := flashMap.ensureWrittenGen(
-               fmt.Sprintf("%s/%s-sysflash.c", srcDir, targetName),
-               buf.Bytes()); err != nil {
-
-               return err
-       }
-
-       buf = bytes.Buffer{}
-       flashMap.writeHeader(&buf)
-       if err := flashMap.ensureWrittenGen(
-               includeDir+"/"+HEADER_PATH, buf.Bytes()); err != nil {
-               return err
-       }
-
-       return nil
-}

Reply via email to