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 ad2da0c1cfa52b9eac5099ea95f45afda6af5c8b
Author: Szymon Janc <[email protected]>
AuthorDate: Mon Oct 19 17:50:43 2026 +0200

    newt: Fix panic in pkg new and docs build outside of project
    
    "newt pkg new" and "newt docs build" used project.GetProject(), which
    panics if no project is found, e.g. when run outside of a project
    directory. Use TryGetProject() and report the error instead, as other
    commands do.
    
    Assisted-by: Claude:claude-opus-5-5
---
 newt/cli/pkg_cmds.go      | 5 ++++-
 newt/cli_errors_test.go   | 8 ++++++++
 newt/docs/docsbuilder.go  | 7 ++++++-
 newt/project/pkgwriter.go | 9 ++++++---
 4 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/newt/cli/pkg_cmds.go b/newt/cli/pkg_cmds.go
index da7b3740..97d089eb 100644
--- a/newt/cli/pkg_cmds.go
+++ b/newt/cli/pkg_cmds.go
@@ -48,7 +48,10 @@ func pkgNewCmd(cmd *cobra.Command, args []string) {
 
        NewTypeStr = strings.ToUpper(NewTypeStr)
 
-       pw := project.NewPackageWriter()
+       pw, err := project.NewPackageWriter()
+       if err != nil {
+               NewtUsage(nil, err)
+       }
        if err := pw.ConfigurePackage(NewTypeStr, args[0]); err != nil {
                NewtUsage(cmd, err)
        }
diff --git a/newt/cli_errors_test.go b/newt/cli_errors_test.go
index 2c1553df..5172af73 100644
--- a/newt/cli_errors_test.go
+++ b/newt/cli_errors_test.go
@@ -62,3 +62,11 @@ func TestCliPkgUnknownSrcRepo(t *testing.T) {
                        "pkg", op, "@nosuch/foo", "apps/bar")
        }
 }
+
+// Commands requiring a project must fail gracefully outside of one.
+func TestCliNoProject(t *testing.T) {
+       dir := t.TempDir()
+
+       cliErrorCheck(t, dir, nil, "No project file found", "pkg", "new", "foo")
+       cliErrorCheck(t, dir, nil, "No project file found", "docs", "build")
+}
diff --git a/newt/docs/docsbuilder.go b/newt/docs/docsbuilder.go
index 12e923d0..8ca49503 100644
--- a/newt/docs/docsbuilder.go
+++ b/newt/docs/docsbuilder.go
@@ -39,8 +39,13 @@ type DocDescriptor struct {
 }
 
 func NewDocsBuilder() (*DocsBuilder, error) {
+       proj, err := project.TryGetProject()
+       if err != nil {
+               return nil, err
+       }
+
        db := &DocsBuilder{}
-       db.project = project.GetProject()
+       db.project = proj
 
        return db, nil
 }
diff --git a/newt/project/pkgwriter.go b/newt/project/pkgwriter.go
index 0501599f..7967324f 100644
--- a/newt/project/pkgwriter.go
+++ b/newt/project/pkgwriter.go
@@ -274,13 +274,16 @@ func (pw *PackageWriter) WritePackage() error {
 /**
  * Create new PackageWriter structure, and return it
  */
-func NewPackageWriter() *PackageWriter {
-       proj := GetProject()
+func NewPackageWriter() (*PackageWriter, error) {
+       proj, err := TryGetProject()
+       if err != nil {
+               return nil, err
+       }
 
        pw := &PackageWriter{
                project:    proj,
                downloader: downloader.NewGithubDownloader(),
        }
 
-       return pw
+       return pw, nil
 }

Reply via email to