Fossil SCM

Progress toward getting ticket handling to work.

drh 2008-05-16 18:11 trunk
Commit 68c24b185731fad5e835f816428aaa739552cdd5
+2 -2
--- src/diff.c
+++ src/diff.c
@@ -738,13 +738,13 @@
738738
int i;
739739
Annotator ann;
740740
741741
login_check_credentials();
742742
if( !g.okRead ){ login_needed(); return; }
743
- if( mid==0 || fnid==0 ){ cgi_redirect("index"); }
743
+ if( mid==0 || fnid==0 ){ fossil_redirect_home(); }
744744
if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d AND fnid=%d",mid,fnid) ){
745
- cgi_redirect("index");
745
+ fossil_redirect_home();
746746
}
747747
style_header("File Annotation");
748748
annotate_file(&ann, fnid, mid, 1);
749749
@ <pre>
750750
for(i=0; i<ann.nOrig; i++){
751751
--- src/diff.c
+++ src/diff.c
@@ -738,13 +738,13 @@
738 int i;
739 Annotator ann;
740
741 login_check_credentials();
742 if( !g.okRead ){ login_needed(); return; }
743 if( mid==0 || fnid==0 ){ cgi_redirect("index"); }
744 if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d AND fnid=%d",mid,fnid) ){
745 cgi_redirect("index");
746 }
747 style_header("File Annotation");
748 annotate_file(&ann, fnid, mid, 1);
749 @ <pre>
750 for(i=0; i<ann.nOrig; i++){
751
--- src/diff.c
+++ src/diff.c
@@ -738,13 +738,13 @@
738 int i;
739 Annotator ann;
740
741 login_check_credentials();
742 if( !g.okRead ){ login_needed(); return; }
743 if( mid==0 || fnid==0 ){ fossil_redirect_home(); }
744 if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d AND fnid=%d",mid,fnid) ){
745 fossil_redirect_home();
746 }
747 style_header("File Annotation");
748 annotate_file(&ann, fnid, mid, 1);
749 @ <pre>
750 for(i=0; i<ann.nOrig; i++){
751
+9 -4
--- src/info.c
+++ src/info.c
@@ -97,11 +97,12 @@
9797
printf("checkout: nil\n");
9898
}else{
9999
show_common_info(vid, "checkout:", 1);
100100
}
101101
}else{
102
- int rid = name_to_rid(g.argv[2]);
102
+ int rid;
103
+ rid = name_to_rid(g.argv[2]);
103104
if( rid==0 ){
104105
fossil_panic("no such object: %s\n", g.argv[2]);
105106
}
106107
show_common_info(rid, "uuid:", 1);
107108
}
@@ -582,11 +583,11 @@
582583
style_header("Baseline Changes");
583584
login_anonymous_available();
584585
585586
rid = name_to_rid(PD("name",""));
586587
if( rid==0 ){
587
- cgi_redirect("index");
588
+ fossil_redirect_home();
588589
}
589590
db_prepare(&q,
590591
"SELECT pid, fid, name"
591592
" FROM mlink, filename"
592593
" WHERE mlink.mid=%d"
@@ -805,14 +806,18 @@
805806
void info_page(void){
806807
const char *zName;
807808
int rid, nName;
808809
809810
zName = P("name");
810
- if( zName==0 ) cgi_redirect("index");
811
+ if( zName==0 ) fossil_redirect_home();
811812
nName = strlen(zName);
812813
if( nName<4 || nName>UUID_SIZE || !validate16(zName, nName) ){
813
- cgi_redirect("index");
814
+ fossil_redirect_home();
815
+ }
816
+ if( db_exists("SELECT 1 FROM ticket WHERE tkt_uuid GLOB '%s*'", zName) ){
817
+ tktview_page();
818
+ return;
814819
}
815820
rid = db_int(0, "SELECT rid FROM blob WHERE uuid GLOB '%s*'", zName);
816821
if( rid==0 ){
817822
style_header("Broken Link");
818823
@ <p>No such object: %h(zName)</p>
819824
--- src/info.c
+++ src/info.c
@@ -97,11 +97,12 @@
97 printf("checkout: nil\n");
98 }else{
99 show_common_info(vid, "checkout:", 1);
100 }
101 }else{
102 int rid = name_to_rid(g.argv[2]);
 
103 if( rid==0 ){
104 fossil_panic("no such object: %s\n", g.argv[2]);
105 }
106 show_common_info(rid, "uuid:", 1);
107 }
@@ -582,11 +583,11 @@
582 style_header("Baseline Changes");
583 login_anonymous_available();
584
585 rid = name_to_rid(PD("name",""));
586 if( rid==0 ){
587 cgi_redirect("index");
588 }
589 db_prepare(&q,
590 "SELECT pid, fid, name"
591 " FROM mlink, filename"
592 " WHERE mlink.mid=%d"
@@ -805,14 +806,18 @@
805 void info_page(void){
806 const char *zName;
807 int rid, nName;
808
809 zName = P("name");
810 if( zName==0 ) cgi_redirect("index");
811 nName = strlen(zName);
812 if( nName<4 || nName>UUID_SIZE || !validate16(zName, nName) ){
813 cgi_redirect("index");
 
 
 
 
814 }
815 rid = db_int(0, "SELECT rid FROM blob WHERE uuid GLOB '%s*'", zName);
816 if( rid==0 ){
817 style_header("Broken Link");
818 @ <p>No such object: %h(zName)</p>
819
--- src/info.c
+++ src/info.c
@@ -97,11 +97,12 @@
97 printf("checkout: nil\n");
98 }else{
99 show_common_info(vid, "checkout:", 1);
100 }
101 }else{
102 int rid;
103 rid = name_to_rid(g.argv[2]);
104 if( rid==0 ){
105 fossil_panic("no such object: %s\n", g.argv[2]);
106 }
107 show_common_info(rid, "uuid:", 1);
108 }
@@ -582,11 +583,11 @@
583 style_header("Baseline Changes");
584 login_anonymous_available();
585
586 rid = name_to_rid(PD("name",""));
587 if( rid==0 ){
588 fossil_redirect_home();
589 }
590 db_prepare(&q,
591 "SELECT pid, fid, name"
592 " FROM mlink, filename"
593 " WHERE mlink.mid=%d"
@@ -805,14 +806,18 @@
806 void info_page(void){
807 const char *zName;
808 int rid, nName;
809
810 zName = P("name");
811 if( zName==0 ) fossil_redirect_home();
812 nName = strlen(zName);
813 if( nName<4 || nName>UUID_SIZE || !validate16(zName, nName) ){
814 fossil_redirect_home();
815 }
816 if( db_exists("SELECT 1 FROM ticket WHERE tkt_uuid GLOB '%s*'", zName) ){
817 tktview_page();
818 return;
819 }
820 rid = db_int(0, "SELECT rid FROM blob WHERE uuid GLOB '%s*'", zName);
821 if( rid==0 ){
822 style_header("Broken Link");
823 @ <p>No such object: %h(zName)</p>
824
+8 -1
--- src/main.c
+++ src/main.c
@@ -451,10 +451,17 @@
451451
}else{
452452
g.zBaseURL = mprintf("http://%s%.*s", zHost, i, zCur);
453453
g.zTop = &g.zBaseURL[7+strlen(zHost)];
454454
}
455455
}
456
+
457
+/*
458
+** Send an HTTP redirect back to the designated Index Page.
459
+*/
460
+void fossil_redirect_home(void){
461
+ cgi_redirectf("%s%s", g.zBaseURL, db_get("index-page", "/index"));
462
+}
456463
457464
/*
458465
** Preconditions:
459466
**
460467
** * Environment variables are set up according to the CGI standard.
@@ -474,11 +481,11 @@
474481
*/
475482
set_base_url();
476483
zPathInfo = P("PATH_INFO");
477484
if( zPathInfo==0 || zPathInfo[0]==0
478485
|| (zPathInfo[0]=='/' && zPathInfo[1]==0) ){
479
- cgi_redirectf("%s%s", g.zBaseURL, db_get("index-page", "/index"));
486
+ fossil_redirect_home();
480487
}else{
481488
zPath = mprintf("%s", zPathInfo);
482489
}
483490
484491
/* Remove the leading "/" at the beginning of the path.
485492
--- src/main.c
+++ src/main.c
@@ -451,10 +451,17 @@
451 }else{
452 g.zBaseURL = mprintf("http://%s%.*s", zHost, i, zCur);
453 g.zTop = &g.zBaseURL[7+strlen(zHost)];
454 }
455 }
 
 
 
 
 
 
 
456
457 /*
458 ** Preconditions:
459 **
460 ** * Environment variables are set up according to the CGI standard.
@@ -474,11 +481,11 @@
474 */
475 set_base_url();
476 zPathInfo = P("PATH_INFO");
477 if( zPathInfo==0 || zPathInfo[0]==0
478 || (zPathInfo[0]=='/' && zPathInfo[1]==0) ){
479 cgi_redirectf("%s%s", g.zBaseURL, db_get("index-page", "/index"));
480 }else{
481 zPath = mprintf("%s", zPathInfo);
482 }
483
484 /* Remove the leading "/" at the beginning of the path.
485
--- src/main.c
+++ src/main.c
@@ -451,10 +451,17 @@
451 }else{
452 g.zBaseURL = mprintf("http://%s%.*s", zHost, i, zCur);
453 g.zTop = &g.zBaseURL[7+strlen(zHost)];
454 }
455 }
456
457 /*
458 ** Send an HTTP redirect back to the designated Index Page.
459 */
460 void fossil_redirect_home(void){
461 cgi_redirectf("%s%s", g.zBaseURL, db_get("index-page", "/index"));
462 }
463
464 /*
465 ** Preconditions:
466 **
467 ** * Environment variables are set up according to the CGI standard.
@@ -474,11 +481,11 @@
481 */
482 set_base_url();
483 zPathInfo = P("PATH_INFO");
484 if( zPathInfo==0 || zPathInfo[0]==0
485 || (zPathInfo[0]=='/' && zPathInfo[1]==0) ){
486 fossil_redirect_home();
487 }else{
488 zPath = mprintf("%s", zPathInfo);
489 }
490
491 /* Remove the leading "/" at the beginning of the path.
492
--- src/style.c
+++ src/style.c
@@ -88,10 +88,11 @@
8888
Th_Store("manifest_date", MANIFEST_DATE);
8989
if( g.zLogin ){
9090
Th_Store("login", g.zLogin);
9191
}
9292
Th_Render(zHeader);
93
+ Th_Unstore("title"); /* Avoid collisions with ticket field names */
9394
cgi_destination(CGI_BODY);
9495
g.cgiPanic = 1;
9596
}
9697
9798
/*
9899
--- src/style.c
+++ src/style.c
@@ -88,10 +88,11 @@
88 Th_Store("manifest_date", MANIFEST_DATE);
89 if( g.zLogin ){
90 Th_Store("login", g.zLogin);
91 }
92 Th_Render(zHeader);
 
93 cgi_destination(CGI_BODY);
94 g.cgiPanic = 1;
95 }
96
97 /*
98
--- src/style.c
+++ src/style.c
@@ -88,10 +88,11 @@
88 Th_Store("manifest_date", MANIFEST_DATE);
89 if( g.zLogin ){
90 Th_Store("login", g.zLogin);
91 }
92 Th_Render(zHeader);
93 Th_Unstore("title"); /* Avoid collisions with ticket field names */
94 cgi_destination(CGI_BODY);
95 g.cgiPanic = 1;
96 }
97
98 /*
99
--- src/th_main.c
+++ src/th_main.c
@@ -281,10 +281,19 @@
281281
*/
282282
void Th_Store(const char *zName, const char *zValue){
283283
Th_FossilInit();
284284
Th_SetVar(g.interp, (uchar*)zName, -1, (uchar*)zValue, strlen(zValue));
285285
}
286
+
287
+/*
288
+** Unset a variable.
289
+*/
290
+void Th_Unstore(const char *zName){
291
+ if( g.interp ){
292
+ Th_UnsetVar(g.interp, (uchar*)zName, -1);
293
+ }
294
+}
286295
287296
/*
288297
** Retrieve a string value from the interpreter. If no such
289298
** variable exists, return NULL.
290299
*/
291300
--- src/th_main.c
+++ src/th_main.c
@@ -281,10 +281,19 @@
281 */
282 void Th_Store(const char *zName, const char *zValue){
283 Th_FossilInit();
284 Th_SetVar(g.interp, (uchar*)zName, -1, (uchar*)zValue, strlen(zValue));
285 }
 
 
 
 
 
 
 
 
 
286
287 /*
288 ** Retrieve a string value from the interpreter. If no such
289 ** variable exists, return NULL.
290 */
291
--- src/th_main.c
+++ src/th_main.c
@@ -281,10 +281,19 @@
281 */
282 void Th_Store(const char *zName, const char *zValue){
283 Th_FossilInit();
284 Th_SetVar(g.interp, (uchar*)zName, -1, (uchar*)zValue, strlen(zValue));
285 }
286
287 /*
288 ** Unset a variable.
289 */
290 void Th_Unstore(const char *zName){
291 if( g.interp ){
292 Th_UnsetVar(g.interp, (uchar*)zName, -1);
293 }
294 }
295
296 /*
297 ** Retrieve a string value from the interpreter. If no such
298 ** variable exists, return NULL.
299 */
300
+1
--- src/tkt.c
+++ src/tkt.c
@@ -298,10 +298,11 @@
298298
db_end_transaction(0);
299299
}
300300
301301
/*
302302
** WEBPAGE: tktview
303
+** URL: tktview?name=UUID
303304
**
304305
** View a ticket.
305306
*/
306307
void tktview_page(void){
307308
char *zScript;
308309
--- src/tkt.c
+++ src/tkt.c
@@ -298,10 +298,11 @@
298 db_end_transaction(0);
299 }
300
301 /*
302 ** WEBPAGE: tktview
 
303 **
304 ** View a ticket.
305 */
306 void tktview_page(void){
307 char *zScript;
308
--- src/tkt.c
+++ src/tkt.c
@@ -298,10 +298,11 @@
298 db_end_transaction(0);
299 }
300
301 /*
302 ** WEBPAGE: tktview
303 ** URL: tktview?name=UUID
304 **
305 ** View a ticket.
306 */
307 void tktview_page(void){
308 char *zScript;
309

Keyboard Shortcuts

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