You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ja...@apache.org on 2026/10/20 19:30:32 UTC
(mynewt-newt) 02/15: newt/cli: Report errors from loading package repos on upgrade
This is an automated email from the ASF dual-hosted git repository.
sjanc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git
commit e6d8b5e429e3b2787fd835d9b9fccfb85ae1098d
Author: Szymon Janc <sz...@codecoup.pl>
AuthorDate: Mon Oct 19 17:46:37 2026 +0200
newt/cli: Report errors from loading package repos on upgrade
Error from GetPkgRepos() was ignored, so invalid "repository.*"
definitions in pkg.yml (bad version, missing type or url, unreadable
patches directory) made "newt upgrade" silently do nothing and exit
with status 0. Report the error.
Assisted-by: Claude:claude-opus-5-5
---
newt/cli/project_cmds.go | 4 ++-
newt/error_reporting_test.go | 58 +++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 60 insertions(+), 2 deletions(-)
diff --git a/newt/cli/project_cmds.go b/newt/cli/project_cmds.go
index eb10191e..4caa9f21 100644
--- a/newt/cli/project_cmds.go
+++ b/newt/cli/project_cmds.go
@@ -130,7 +130,9 @@ func upgradeRunCmd(cmd *cobra.Command, args []string) {
proj := TryGetOrDownloadProject()
interfaces.SetProject(proj)
- proj.GetPkgRepos()
+ if err := proj.GetPkgRepos(); err != nil {
+ NewtUsage(nil, err)
+ }
proj.SetGitEnvVariables()
pred := makeRepoPredicate(args)
diff --git a/newt/error_reporting_test.go b/newt/error_reporting_test.go
index bed2f4d2..ea83b336 100644
--- a/newt/error_reporting_test.go
+++ b/newt/error_reporting_test.go
@@ -17,10 +17,11 @@
* under the License.
*/
-
package main
import (
+ "os"
+ "path/filepath"
"strings"
"testing"
)
@@ -48,6 +49,24 @@ func errorReportingExpectFail(t *testing.T, dir string,
return out
}
+// errorReportingWriteFiles creates files in dir. files maps paths relative
+// to dir to contents.
+func errorReportingWriteFiles(t *testing.T, dir string,
+ files map[string]string) {
+
+ t.Helper()
+
+ for name, content := range files {
+ path := filepath.Join(dir, filepath.FromSlash(name))
+ if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
+ t.Fatal(err)
+ }
+ if err := os.WriteFile(path, []byte(content), 0644); err != nil {
+ t.Fatal(err)
+ }
+ }
+}
+
// Unknown commands and flags must make newt exit with an error.
func TestErrorReportingUnknownCommand(t *testing.T) {
dir := t.TempDir()
@@ -63,3 +82,40 @@ func TestErrorReportingUnknownCommand(t *testing.T) {
"target", "show", "--nosuchflag")
})
}
+
+// Invalid external repository definitions in pkg.yml must make newt upgrade
+// fail instead of being silently ignored.
+func TestErrorReportingUpgradePkgRepos(t *testing.T) {
+ tests := []struct {
+ name string
+ repo string
+ msg string
+ }{
+ {
+ name: "bad-version",
+ repo: " type: git\n vers: notaversion\n" +
+ " url: https://dummy.invalid/ext.git\n",
+ msg: `Repo "ext" contains invalid version requirement`,
+ },
+ {
+ name: "missing-type",
+ repo: " vers: 0.0.0\n" +
+ " url: https://dummy.invalid/ext.git\n",
+ msg: "Missing type for repository ext",
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ dir := t.TempDir()
+ errorReportingWriteFiles(t, dir, map[string]string{
+ "project.yml": "project.name: test\n",
+ "apps/ext/pkg.yml": "pkg.name: apps/ext\n" +
+ "pkg.type: lib\n" +
+ "repository.ext:\n" + tt.repo,
+ })
+
+ errorReportingExpectFail(t, dir, []string{tt.msg}, "upgrade")
+ })
+ }
+}