From 65bb4935444a3b0a35f5cfaa24431e8fce262fef Mon Sep 17 00:00:00 2001 From: Julian Noble Date: Tue, 11 Nov 2025 21:09:58 +1100 Subject: [PATCH] fix punk::args parse when multiple flags marked optional false and more than one of them not supplied --- src/bootsupport/modules/punk/args-0.2.1.tm | 6 +++++- src/modules/punk/args-999999.0a1.0.tm | 6 +++++- .../src/bootsupport/modules/punk/args-0.2.1.tm | 6 +++++- .../src/bootsupport/modules/punk/args-0.2.1.tm | 6 +++++- src/vfs/_vfscommon.vfs/modules/punk/args-0.2.1.tm | 6 +++++- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/bootsupport/modules/punk/args-0.2.1.tm b/src/bootsupport/modules/punk/args-0.2.1.tm index d776aba3..0dd454e0 100644 --- a/src/bootsupport/modules/punk/args-0.2.1.tm +++ b/src/bootsupport/modules/punk/args-0.2.1.tm @@ -8875,7 +8875,11 @@ tcl::namespace::eval punk::args { if {[llength $OPT_REQUIRED]} { set api_opt_required [lmap v $OPT_REQUIRED {lindex [split $v |] end}] if {[llength [set missing [punklib_ldiff $api_opt_required $flagsreceived]]]} { - set full_missing [dict get $lookup_optset $missing] + set full_missing [list] + foreach m $missing { + lappend full_missing [dict get $lookup_optset $m] + } + #set full_missing [dict get $lookup_optset $missing] set msg "Required option missing for %caller%. missing flags: '$full_missing' are marked with -optional false - so must be present" return -options [list -code error -errorcode [list PUNKARGS VALIDATION [list optionmissing $full_missing received $flagsreceived] -argspecs $argspecs]] $msg #arg_error "Required option missing for [Get_caller]. missing flags: '$missing' are marked with -optional false - so must be present " $argspecs diff --git a/src/modules/punk/args-999999.0a1.0.tm b/src/modules/punk/args-999999.0a1.0.tm index 7733bfa7..2783d026 100644 --- a/src/modules/punk/args-999999.0a1.0.tm +++ b/src/modules/punk/args-999999.0a1.0.tm @@ -8875,7 +8875,11 @@ tcl::namespace::eval punk::args { if {[llength $OPT_REQUIRED]} { set api_opt_required [lmap v $OPT_REQUIRED {lindex [split $v |] end}] if {[llength [set missing [punklib_ldiff $api_opt_required $flagsreceived]]]} { - set full_missing [dict get $lookup_optset $missing] + set full_missing [list] + foreach m $missing { + lappend full_missing [dict get $lookup_optset $m] + } + #set full_missing [dict get $lookup_optset $missing] set msg "Required option missing for %caller%. missing flags: '$full_missing' are marked with -optional false - so must be present" return -options [list -code error -errorcode [list PUNKARGS VALIDATION [list optionmissing $full_missing received $flagsreceived] -argspecs $argspecs]] $msg #arg_error "Required option missing for [Get_caller]. missing flags: '$missing' are marked with -optional false - so must be present " $argspecs diff --git a/src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/args-0.2.1.tm b/src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/args-0.2.1.tm index d776aba3..0dd454e0 100644 --- a/src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/args-0.2.1.tm +++ b/src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/args-0.2.1.tm @@ -8875,7 +8875,11 @@ tcl::namespace::eval punk::args { if {[llength $OPT_REQUIRED]} { set api_opt_required [lmap v $OPT_REQUIRED {lindex [split $v |] end}] if {[llength [set missing [punklib_ldiff $api_opt_required $flagsreceived]]]} { - set full_missing [dict get $lookup_optset $missing] + set full_missing [list] + foreach m $missing { + lappend full_missing [dict get $lookup_optset $m] + } + #set full_missing [dict get $lookup_optset $missing] set msg "Required option missing for %caller%. missing flags: '$full_missing' are marked with -optional false - so must be present" return -options [list -code error -errorcode [list PUNKARGS VALIDATION [list optionmissing $full_missing received $flagsreceived] -argspecs $argspecs]] $msg #arg_error "Required option missing for [Get_caller]. missing flags: '$missing' are marked with -optional false - so must be present " $argspecs diff --git a/src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/args-0.2.1.tm b/src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/args-0.2.1.tm index d776aba3..0dd454e0 100644 --- a/src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/args-0.2.1.tm +++ b/src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/args-0.2.1.tm @@ -8875,7 +8875,11 @@ tcl::namespace::eval punk::args { if {[llength $OPT_REQUIRED]} { set api_opt_required [lmap v $OPT_REQUIRED {lindex [split $v |] end}] if {[llength [set missing [punklib_ldiff $api_opt_required $flagsreceived]]]} { - set full_missing [dict get $lookup_optset $missing] + set full_missing [list] + foreach m $missing { + lappend full_missing [dict get $lookup_optset $m] + } + #set full_missing [dict get $lookup_optset $missing] set msg "Required option missing for %caller%. missing flags: '$full_missing' are marked with -optional false - so must be present" return -options [list -code error -errorcode [list PUNKARGS VALIDATION [list optionmissing $full_missing received $flagsreceived] -argspecs $argspecs]] $msg #arg_error "Required option missing for [Get_caller]. missing flags: '$missing' are marked with -optional false - so must be present " $argspecs diff --git a/src/vfs/_vfscommon.vfs/modules/punk/args-0.2.1.tm b/src/vfs/_vfscommon.vfs/modules/punk/args-0.2.1.tm index d776aba3..0dd454e0 100644 --- a/src/vfs/_vfscommon.vfs/modules/punk/args-0.2.1.tm +++ b/src/vfs/_vfscommon.vfs/modules/punk/args-0.2.1.tm @@ -8875,7 +8875,11 @@ tcl::namespace::eval punk::args { if {[llength $OPT_REQUIRED]} { set api_opt_required [lmap v $OPT_REQUIRED {lindex [split $v |] end}] if {[llength [set missing [punklib_ldiff $api_opt_required $flagsreceived]]]} { - set full_missing [dict get $lookup_optset $missing] + set full_missing [list] + foreach m $missing { + lappend full_missing [dict get $lookup_optset $m] + } + #set full_missing [dict get $lookup_optset $missing] set msg "Required option missing for %caller%. missing flags: '$full_missing' are marked with -optional false - so must be present" return -options [list -code error -errorcode [list PUNKARGS VALIDATION [list optionmissing $full_missing received $flagsreceived] -argspecs $argspecs]] $msg #arg_error "Required option missing for [Get_caller]. missing flags: '$missing' are marked with -optional false - so must be present " $argspecs