Skip to content

Commit

Permalink
Implemented --show-properties in 'board details'
Browse files Browse the repository at this point in the history
  • Loading branch information
cmaglie committed Apr 17, 2023
1 parent 7876fd3 commit af7beee
Show file tree
Hide file tree
Showing 5 changed files with 208 additions and 169 deletions.
4 changes: 4 additions & 0 deletions commands/board/details.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetai
Properties: p.AsMap(),
})
}
for _, k := range boardProperties.Keys() {
v := boardProperties.Get(k)
details.BuildProperties = append(details.BuildProperties, k+"="+v)
}

details.DebuggingSupported = boardProperties.ContainsKey("debug.executable") ||
boardPlatform.Properties.ContainsKey("debug.executable") ||
Expand Down
27 changes: 23 additions & 4 deletions internal/cli/board/details.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (

"github.com/arduino/arduino-cli/commands/board"
"github.com/arduino/arduino-cli/internal/cli/arguments"
"github.com/arduino/arduino-cli/internal/cli/compile"
"github.com/arduino/arduino-cli/internal/cli/feedback"
"github.com/arduino/arduino-cli/internal/cli/instance"
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
Expand All @@ -35,43 +36,52 @@ func initDetailsCommand() *cobra.Command {
var showFullDetails bool
var listProgrammers bool
var fqbn arguments.Fqbn
var showProperties arguments.ShowProperties
var detailsCommand = &cobra.Command{
Use: fmt.Sprintf("details -b <%s>", tr("FQBN")),
Short: tr("Print details about a board."),
Long: tr("Show information about a board, in particular if the board has options to be specified in the FQBN."),
Example: " " + os.Args[0] + " board details -b arduino:avr:nano",
Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) {
runDetailsCommand(fqbn.String(), showFullDetails, listProgrammers)
runDetailsCommand(fqbn.String(), showFullDetails, listProgrammers, showProperties)
},
}

fqbn.AddToCommand(detailsCommand)
detailsCommand.Flags().BoolVarP(&showFullDetails, "full", "f", false, tr("Show full board details"))
detailsCommand.Flags().BoolVarP(&listProgrammers, "list-programmers", "", false, tr("Show list of available programmers"))
detailsCommand.MarkFlagRequired("fqbn")

showProperties.AddToCommand(detailsCommand)
return detailsCommand
}

func runDetailsCommand(fqbn string, showFullDetails, listProgrammers bool) {
func runDetailsCommand(fqbn string, showFullDetails, listProgrammers bool, showProperties arguments.ShowProperties) {
inst := instance.CreateAndInit()

logrus.Info("Executing `arduino-cli board details`")

showPropertiesMode, err := showProperties.Get()
if err != nil {
feedback.Fatal(err.Error(), feedback.ErrBadArgument)
}
res, err := board.Details(context.Background(), &rpc.BoardDetailsRequest{
Instance: inst,
Fqbn: fqbn,
})

if err != nil {
feedback.Fatal(tr("Error getting board details: %v", err), feedback.ErrGeneric)
}

if showPropertiesMode == arguments.ShowPropertiesExpanded {
res.BuildProperties, _ = compile.ExpandBuildProperties(res.GetBuildProperties())
}

feedback.PrintResult(detailsResult{
details: res,
listProgrammers: listProgrammers,
showFullDetails: showFullDetails,
showProperties: showPropertiesMode != arguments.ShowPropertiesDisabled,
})
}

Expand All @@ -81,6 +91,7 @@ type detailsResult struct {
details *rpc.BoardDetailsResponse
listProgrammers bool
showFullDetails bool
showProperties bool
}

func (dr detailsResult) Data() interface{} {
Expand All @@ -90,6 +101,14 @@ func (dr detailsResult) Data() interface{} {
func (dr detailsResult) String() string {
details := dr.details

if dr.showProperties {
res := ""
for _, prop := range details.GetBuildProperties() {
res += fmt.Sprintln(prop)
}
return res
}

if dr.listProgrammers {
t := table.New()
t.AddRow(tr("Id"), tr("Programmer name"))
Expand Down
19 changes: 11 additions & 8 deletions internal/cli/compile/compile.go
Original file line number Diff line number Diff line change
Expand Up @@ -365,21 +365,24 @@ func runCompileCommand(cmd *cobra.Command, args []string) {
feedback.FatalResult(res, feedback.ErrGeneric)
}
if showProperties == arguments.ShowPropertiesExpanded {
expandPropertiesInResult(res)
res.BuilderResult.BuildProperties, _ = ExpandBuildProperties(res.BuilderResult.GetBuildProperties())
// ignore error, it should never fail
}
feedback.PrintResult(res)
}

func expandPropertiesInResult(res *compileResult) {
expanded, err := properties.LoadFromSlice(res.BuilderResult.GetBuildProperties())
// ExpandBuildProperties expands the build properties placeholders in the slice of properties.
func ExpandBuildProperties(props []string) ([]string, error) {
expanded, err := properties.LoadFromSlice(props)
if err != nil {
res.Error = tr(err.Error())
return nil, err
}
expandedSlice := make([]string, expanded.Size())
for i, k := range expanded.Keys() {
expandedSlice[i] = strings.Join([]string{k, expanded.ExpandPropsInString(expanded.Get(k))}, "=")
expandedProps := []string{}
for _, k := range expanded.Keys() {
v := expanded.Get(k)
expandedProps = append(expandedProps, k+"="+expanded.ExpandPropsInString(v))
}
res.BuilderResult.BuildProperties = expandedSlice
return expandedProps, nil
}

type compileResult struct {
Expand Down
Loading

0 comments on commit af7beee

Please sign in to comment.