Fossil SCM

Fixed short-form flag handling for th1 argv command in CLI mode. It now handles GET/POST params.

stephan 2012-07-14 21:36 th1-query-api
Commit 413a33f20fc0614e4224eb1327feb092625114c1
2 files changed +26 -3 +11 -4
+26 -3
--- src/th_main.c
+++ src/th_main.c
@@ -595,11 +595,18 @@
595595
if(0 == zLong[0]){
596596
return Th_WrongNumArgs2(interp,
597597
argv[0], argl[0],
598598
"longName ?shortName? ?defaultVal?");
599599
}
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
+ }
601608
if(!zVal){
602609
zVal = zDefault;
603610
if(!zVal){
604611
Th_ErrorMessage(interp, "Option not found and no default provided:", zLong, -1);
605612
return TH_ERROR;
@@ -624,10 +631,11 @@
624631
void *p,
625632
int argc,
626633
const char **argv,
627634
int *argl
628635
){
636
+ /* FIXME: refactor to re-use the code from getstr */
629637
enum { BufLen = 100 };
630638
char zLong[BufLen] = {0};
631639
char zShort[BufLen] = {0};
632640
char aBuf[BufLen] = {0};
633641
int hasArg;
@@ -653,11 +661,18 @@
653661
if(0 == zLong[0]){
654662
return Th_WrongNumArgs2(interp,
655663
argv[0], argl[0],
656664
"longName ?shortName? ?defaultVal?");
657665
}
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
+ }
659674
if(zVal && !*zVal){
660675
zVal = "1";
661676
}
662677
if(!zVal){
663678
zVal = zDefault;
@@ -684,10 +699,11 @@
684699
void *p,
685700
int argc,
686701
const char **argv,
687702
int *argl
688703
){
704
+ /* FIXME: refactor to re-use the code from getstr */
689705
enum { BufLen = 100 };
690706
char zLong[BufLen] = {0};
691707
char zShort[BufLen] = {0};
692708
char aBuf[BufLen] = {0};
693709
int hasArg;
@@ -712,11 +728,18 @@
712728
if(0 == zLong[0]){
713729
return Th_WrongNumArgs2(interp,
714730
argv[0], argl[0],
715731
"longName ?shortName? ?defaultVal?");
716732
}
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
+ }
718741
if(!zVal){
719742
zVal = zDefault;
720743
if(!zVal){
721744
Th_ErrorMessage(interp, "Option not found and no default provided:", zLong, -1);
722745
return TH_ERROR;
723746
--- 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
--- www/th1_argv.wiki
+++ www/th1_argv.wiki
@@ -34,21 +34,28 @@
3434
</pre></nowiki>
3535
3636
3737
<h2>getstr</h2>
3838
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.
4343
4444
<nowiki><pre>
4545
set something [argv getstr "something" "S" "default"]
4646
</pre></nowiki>
4747
4848
If no default value is provided, an error is triggered if the value is
4949
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).
5057
5158
<h2>getbool</h2>
5259
5360
Works almost like <tt>getstr</tt> but searches for boolean flags. CLI boolean flags
5461
have no explicit value, and are "true" if the are set at all.
5562
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button