Fossil SCM
Fixed short-form flag handling for th1 argv command in CLI mode. It now handles GET/POST params.
Commit
413a33f20fc0614e4224eb1327feb092625114c1
Parent
615ee71798931ee…
2 files changed
+26
-3
+11
-4
+26
-3
| --- src/th_main.c | ||
| +++ src/th_main.c | ||
| @@ -595,11 +595,18 @@ | ||
| 595 | 595 | if(0 == zLong[0]){ |
| 596 | 596 | return Th_WrongNumArgs2(interp, |
| 597 | 597 | argv[0], argl[0], |
| 598 | 598 | "longName ?shortName? ?defaultVal?"); |
| 599 | 599 | } |
| 600 | - zVal = find_option( zLong, zShort[0] ? zShort : NULL, 1 ); | |
| 600 | + if(g.cgiOutput){ | |
| 601 | + zVal = cgi_parameter( zLong, NULL ); | |
| 602 | + if( !zVal && zShort[0] ){ | |
| 603 | + zVal = cgi_parameter( zShort, NULL ); | |
| 604 | + } | |
| 605 | + }else{ | |
| 606 | + zVal = find_option( zLong, zShort[0] ? zShort : NULL, 1 ); | |
| 607 | + } | |
| 601 | 608 | if(!zVal){ |
| 602 | 609 | zVal = zDefault; |
| 603 | 610 | if(!zVal){ |
| 604 | 611 | Th_ErrorMessage(interp, "Option not found and no default provided:", zLong, -1); |
| 605 | 612 | return TH_ERROR; |
| @@ -624,10 +631,11 @@ | ||
| 624 | 631 | void *p, |
| 625 | 632 | int argc, |
| 626 | 633 | const char **argv, |
| 627 | 634 | int *argl |
| 628 | 635 | ){ |
| 636 | + /* FIXME: refactor to re-use the code from getstr */ | |
| 629 | 637 | enum { BufLen = 100 }; |
| 630 | 638 | char zLong[BufLen] = {0}; |
| 631 | 639 | char zShort[BufLen] = {0}; |
| 632 | 640 | char aBuf[BufLen] = {0}; |
| 633 | 641 | int hasArg; |
| @@ -653,11 +661,18 @@ | ||
| 653 | 661 | if(0 == zLong[0]){ |
| 654 | 662 | return Th_WrongNumArgs2(interp, |
| 655 | 663 | argv[0], argl[0], |
| 656 | 664 | "longName ?shortName? ?defaultVal?"); |
| 657 | 665 | } |
| 658 | - zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 ); | |
| 666 | + if(g.cgiOutput){ | |
| 667 | + zVal = cgi_parameter( zLong, NULL ); | |
| 668 | + if( !zVal && zShort[0] ){ | |
| 669 | + zVal = cgi_parameter( zShort, NULL ); | |
| 670 | + } | |
| 671 | + }else{ | |
| 672 | + zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 ); | |
| 673 | + } | |
| 659 | 674 | if(zVal && !*zVal){ |
| 660 | 675 | zVal = "1"; |
| 661 | 676 | } |
| 662 | 677 | if(!zVal){ |
| 663 | 678 | zVal = zDefault; |
| @@ -684,10 +699,11 @@ | ||
| 684 | 699 | void *p, |
| 685 | 700 | int argc, |
| 686 | 701 | const char **argv, |
| 687 | 702 | int *argl |
| 688 | 703 | ){ |
| 704 | + /* FIXME: refactor to re-use the code from getstr */ | |
| 689 | 705 | enum { BufLen = 100 }; |
| 690 | 706 | char zLong[BufLen] = {0}; |
| 691 | 707 | char zShort[BufLen] = {0}; |
| 692 | 708 | char aBuf[BufLen] = {0}; |
| 693 | 709 | int hasArg; |
| @@ -712,11 +728,18 @@ | ||
| 712 | 728 | if(0 == zLong[0]){ |
| 713 | 729 | return Th_WrongNumArgs2(interp, |
| 714 | 730 | argv[0], argl[0], |
| 715 | 731 | "longName ?shortName? ?defaultVal?"); |
| 716 | 732 | } |
| 717 | - zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 ); | |
| 733 | + if(g.cgiOutput){ | |
| 734 | + zVal = cgi_parameter( zLong, NULL ); | |
| 735 | + if( !zVal && zShort[0] ){ | |
| 736 | + zVal = cgi_parameter( zShort, NULL ); | |
| 737 | + } | |
| 738 | + }else{ | |
| 739 | + zVal = find_option( zLong, zShort[0] ? zShort : NULL, 1 ); | |
| 740 | + } | |
| 718 | 741 | if(!zVal){ |
| 719 | 742 | zVal = zDefault; |
| 720 | 743 | if(!zVal){ |
| 721 | 744 | Th_ErrorMessage(interp, "Option not found and no default provided:", zLong, -1); |
| 722 | 745 | return TH_ERROR; |
| 723 | 746 |
| --- src/th_main.c | |
| +++ src/th_main.c | |
| @@ -595,11 +595,18 @@ | |
| 595 | if(0 == zLong[0]){ |
| 596 | return Th_WrongNumArgs2(interp, |
| 597 | argv[0], argl[0], |
| 598 | "longName ?shortName? ?defaultVal?"); |
| 599 | } |
| 600 | zVal = find_option( zLong, zShort[0] ? zShort : NULL, 1 ); |
| 601 | if(!zVal){ |
| 602 | zVal = zDefault; |
| 603 | if(!zVal){ |
| 604 | Th_ErrorMessage(interp, "Option not found and no default provided:", zLong, -1); |
| 605 | return TH_ERROR; |
| @@ -624,10 +631,11 @@ | |
| 624 | void *p, |
| 625 | int argc, |
| 626 | const char **argv, |
| 627 | int *argl |
| 628 | ){ |
| 629 | enum { BufLen = 100 }; |
| 630 | char zLong[BufLen] = {0}; |
| 631 | char zShort[BufLen] = {0}; |
| 632 | char aBuf[BufLen] = {0}; |
| 633 | int hasArg; |
| @@ -653,11 +661,18 @@ | |
| 653 | if(0 == zLong[0]){ |
| 654 | return Th_WrongNumArgs2(interp, |
| 655 | argv[0], argl[0], |
| 656 | "longName ?shortName? ?defaultVal?"); |
| 657 | } |
| 658 | zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 ); |
| 659 | if(zVal && !*zVal){ |
| 660 | zVal = "1"; |
| 661 | } |
| 662 | if(!zVal){ |
| 663 | zVal = zDefault; |
| @@ -684,10 +699,11 @@ | |
| 684 | void *p, |
| 685 | int argc, |
| 686 | const char **argv, |
| 687 | int *argl |
| 688 | ){ |
| 689 | enum { BufLen = 100 }; |
| 690 | char zLong[BufLen] = {0}; |
| 691 | char zShort[BufLen] = {0}; |
| 692 | char aBuf[BufLen] = {0}; |
| 693 | int hasArg; |
| @@ -712,11 +728,18 @@ | |
| 712 | if(0 == zLong[0]){ |
| 713 | return Th_WrongNumArgs2(interp, |
| 714 | argv[0], argl[0], |
| 715 | "longName ?shortName? ?defaultVal?"); |
| 716 | } |
| 717 | zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 ); |
| 718 | if(!zVal){ |
| 719 | zVal = zDefault; |
| 720 | if(!zVal){ |
| 721 | Th_ErrorMessage(interp, "Option not found and no default provided:", zLong, -1); |
| 722 | return TH_ERROR; |
| 723 |
| --- src/th_main.c | |
| +++ src/th_main.c | |
| @@ -595,11 +595,18 @@ | |
| 595 | if(0 == zLong[0]){ |
| 596 | return Th_WrongNumArgs2(interp, |
| 597 | argv[0], argl[0], |
| 598 | "longName ?shortName? ?defaultVal?"); |
| 599 | } |
| 600 | if(g.cgiOutput){ |
| 601 | zVal = cgi_parameter( zLong, NULL ); |
| 602 | if( !zVal && zShort[0] ){ |
| 603 | zVal = cgi_parameter( zShort, NULL ); |
| 604 | } |
| 605 | }else{ |
| 606 | zVal = find_option( zLong, zShort[0] ? zShort : NULL, 1 ); |
| 607 | } |
| 608 | if(!zVal){ |
| 609 | zVal = zDefault; |
| 610 | if(!zVal){ |
| 611 | Th_ErrorMessage(interp, "Option not found and no default provided:", zLong, -1); |
| 612 | return TH_ERROR; |
| @@ -624,10 +631,11 @@ | |
| 631 | void *p, |
| 632 | int argc, |
| 633 | const char **argv, |
| 634 | int *argl |
| 635 | ){ |
| 636 | /* FIXME: refactor to re-use the code from getstr */ |
| 637 | enum { BufLen = 100 }; |
| 638 | char zLong[BufLen] = {0}; |
| 639 | char zShort[BufLen] = {0}; |
| 640 | char aBuf[BufLen] = {0}; |
| 641 | int hasArg; |
| @@ -653,11 +661,18 @@ | |
| 661 | if(0 == zLong[0]){ |
| 662 | return Th_WrongNumArgs2(interp, |
| 663 | argv[0], argl[0], |
| 664 | "longName ?shortName? ?defaultVal?"); |
| 665 | } |
| 666 | if(g.cgiOutput){ |
| 667 | zVal = cgi_parameter( zLong, NULL ); |
| 668 | if( !zVal && zShort[0] ){ |
| 669 | zVal = cgi_parameter( zShort, NULL ); |
| 670 | } |
| 671 | }else{ |
| 672 | zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 ); |
| 673 | } |
| 674 | if(zVal && !*zVal){ |
| 675 | zVal = "1"; |
| 676 | } |
| 677 | if(!zVal){ |
| 678 | zVal = zDefault; |
| @@ -684,10 +699,11 @@ | |
| 699 | void *p, |
| 700 | int argc, |
| 701 | const char **argv, |
| 702 | int *argl |
| 703 | ){ |
| 704 | /* FIXME: refactor to re-use the code from getstr */ |
| 705 | enum { BufLen = 100 }; |
| 706 | char zLong[BufLen] = {0}; |
| 707 | char zShort[BufLen] = {0}; |
| 708 | char aBuf[BufLen] = {0}; |
| 709 | int hasArg; |
| @@ -712,11 +728,18 @@ | |
| 728 | if(0 == zLong[0]){ |
| 729 | return Th_WrongNumArgs2(interp, |
| 730 | argv[0], argl[0], |
| 731 | "longName ?shortName? ?defaultVal?"); |
| 732 | } |
| 733 | if(g.cgiOutput){ |
| 734 | zVal = cgi_parameter( zLong, NULL ); |
| 735 | if( !zVal && zShort[0] ){ |
| 736 | zVal = cgi_parameter( zShort, NULL ); |
| 737 | } |
| 738 | }else{ |
| 739 | zVal = find_option( zLong, zShort[0] ? zShort : NULL, 1 ); |
| 740 | } |
| 741 | if(!zVal){ |
| 742 | zVal = zDefault; |
| 743 | if(!zVal){ |
| 744 | Th_ErrorMessage(interp, "Option not found and no default provided:", zLong, -1); |
| 745 | return TH_ERROR; |
| 746 |
+11
-4
| --- www/th1_argv.wiki | ||
| +++ www/th1_argv.wiki | ||
| @@ -34,21 +34,28 @@ | ||
| 34 | 34 | </pre></nowiki> |
| 35 | 35 | |
| 36 | 36 | |
| 37 | 37 | <h2>getstr</h2> |
| 38 | 38 | |
| 39 | -Searches for a CLI/GET/POST parameter. This function has some non-intuitive behaviour | |
| 40 | -inherited from fossil's internals: once a flag/parameter is fetched, it is removed | |
| 41 | -from the internal arguments list, meaning that this function will never | |
| 42 | -see it a second time. | |
| 39 | +Searches for a CLI/GET/POST parameter. In CLI this function has some | |
| 40 | +non-intuitive behaviour inherited from fossil's internals: once a | |
| 41 | +flag/parameter is fetched, it is removed from the internal arguments | |
| 42 | +list, meaning that this function will never see it a second time. | |
| 43 | 43 | |
| 44 | 44 | <nowiki><pre> |
| 45 | 45 | set something [argv getstr "something" "S" "default"] |
| 46 | 46 | </pre></nowiki> |
| 47 | 47 | |
| 48 | 48 | If no default value is provided, an error is triggered if the value is |
| 49 | 49 | not found. |
| 50 | + | |
| 51 | +If you do not want to search for a short-form flag, set it to an empty | |
| 52 | +string. | |
| 53 | + | |
| 54 | +BUG: flag checking does not work properly in CGI mode when using | |
| 55 | +upper-case flags (apparently due to historic special-case behaviour in | |
| 56 | +fossil for upper-case vars). | |
| 50 | 57 | |
| 51 | 58 | <h2>getbool</h2> |
| 52 | 59 | |
| 53 | 60 | Works almost like <tt>getstr</tt> but searches for boolean flags. CLI boolean flags |
| 54 | 61 | have no explicit value, and are "true" if the are set at all. |
| 55 | 62 |
| --- www/th1_argv.wiki | |
| +++ www/th1_argv.wiki | |
| @@ -34,21 +34,28 @@ | |
| 34 | </pre></nowiki> |
| 35 | |
| 36 | |
| 37 | <h2>getstr</h2> |
| 38 | |
| 39 | Searches for a CLI/GET/POST parameter. This function has some non-intuitive behaviour |
| 40 | inherited from fossil's internals: once a flag/parameter is fetched, it is removed |
| 41 | from the internal arguments list, meaning that this function will never |
| 42 | see it a second time. |
| 43 | |
| 44 | <nowiki><pre> |
| 45 | set something [argv getstr "something" "S" "default"] |
| 46 | </pre></nowiki> |
| 47 | |
| 48 | If no default value is provided, an error is triggered if the value is |
| 49 | not found. |
| 50 | |
| 51 | <h2>getbool</h2> |
| 52 | |
| 53 | Works almost like <tt>getstr</tt> but searches for boolean flags. CLI boolean flags |
| 54 | have no explicit value, and are "true" if the are set at all. |
| 55 |
| --- www/th1_argv.wiki | |
| +++ www/th1_argv.wiki | |
| @@ -34,21 +34,28 @@ | |
| 34 | </pre></nowiki> |
| 35 | |
| 36 | |
| 37 | <h2>getstr</h2> |
| 38 | |
| 39 | Searches for a CLI/GET/POST parameter. In CLI this function has some |
| 40 | non-intuitive behaviour inherited from fossil's internals: once a |
| 41 | flag/parameter is fetched, it is removed from the internal arguments |
| 42 | list, meaning that this function will never see it a second time. |
| 43 | |
| 44 | <nowiki><pre> |
| 45 | set something [argv getstr "something" "S" "default"] |
| 46 | </pre></nowiki> |
| 47 | |
| 48 | If no default value is provided, an error is triggered if the value is |
| 49 | not found. |
| 50 | |
| 51 | If you do not want to search for a short-form flag, set it to an empty |
| 52 | string. |
| 53 | |
| 54 | BUG: flag checking does not work properly in CGI mode when using |
| 55 | upper-case flags (apparently due to historic special-case behaviour in |
| 56 | fossil for upper-case vars). |
| 57 | |
| 58 | <h2>getbool</h2> |
| 59 | |
| 60 | Works almost like <tt>getstr</tt> but searches for boolean flags. CLI boolean flags |
| 61 | have no explicit value, and are "true" if the are set at all. |
| 62 |