Heya,

I'm going to put a little work into newt, and how we compose projects with it. I think there are a couple of areas where I think we could improve:

1- "newt new" currently fetches github.com/apache/incubator-mynewt-blinky as a project skeleton. I think there should be configurable skeletons, and the default (incubator-mynewt-blinky) should come bundled with the go src, so that you don't need internet access to create a new project skeleton.

This should make newt general purpose enough to use with any project, not just our OS. While primarily useful for our OS at the moment, I think we want newt to stand on its own as a build & package management tool for embedded contexts.

2- To newt install -v, you should be able to specify a local directory that contains the necessary remote repositories, so if you want to install the new project skeleton without internet access, you can.

3- We should add a new command: newt pkg new, which can create a new package in the local repository, I'm thinking the format should be:

$ newt pkg new drivers/rgbled

Which will create a new package in <your_proj>/drivers/rgbled, along with the pkg.yml file and src and include headers. Additional options to this command should be a package type (default is lib), and the skeleton will change depending on what type is specified (e.g. bsp, or app.)

4- Package search directories. Currently, there is a hardcoded set of package search directories in the base of the project, specifically:

var PackageSearchDirs []string = []string{
    "apps/",
    "compiler/",
    "fs/",
    "libs/",
    "net/",
    "hw/bsp/",
    "hw/mcu/",
    "hw/mcu/stm",
    "hw/drivers/",^[[>1;95;0c
    "hw/",
    "project/",
    "targets/",
    "sys/",
}

And then additional package directories can be specified by adding them to the project.pkg_dirs configuration variable in project.yml.

We could have newt pkg new automatically add non-standard directories to project.pkg_dirs, but it occurs to me that we may be too restrictive on this for no reason. The base of our core repository is as follows:

total 88
-rw-r--r--   1 sterling  staff    531 Apr  1 17:46 DISCLAIMER
-rw-r--r--   1 sterling  staff  16360 Apr  1 17:46 LICENSE
-rw-r--r--   1 sterling  staff    254 Apr  1 17:46 NOTICE
-rw-r--r--   1 sterling  staff   9703 Apr  1 17:46 README.md
-rw-r--r--   1 sterling  staff   1713 Apr  1 17:46 RELEASE_NOTES.md
drwxr-xr-x  11 sterling  staff    374 Apr  1 17:46 apps
drwxr-xr-x   5 sterling  staff    170 Apr  1 17:46 compiler
drwxr-xr-x   4 sterling  staff    136 Apr  1 17:46 fs
drwxr-xr-x   5 sterling  staff    170 Apr  1 17:46 hw
drwxr-xr-x  17 sterling  staff    578 Apr  1 17:46 libs
drwxr-xr-x   3 sterling  staff    102 Apr  1 17:46 net
-rw-r--r--   1 sterling  staff    825 Apr  1 17:46 project.yml
drwxr-xr-x   6 sterling  staff    204 Apr  1 17:46 sys
drwxr-xr-x   3 sterling  staff    102 Apr  1 17:46 targets

As you can see, every directory here contains packages in them. I think it would be better to, by default, search all directories for packages, and provide a configuration directive to ignore directories.

Thoughts?

Cheers,

Sterling

Reply via email to