Fossil SCM

rebase

jan.nijtmans 2013-05-02 13:52 UTC trunk merge
Commit e89269e51b9de9861bb193e1e6c9b3c542648466
4 files changed +26 -25 +8 -8 +8 -8 +12 -7
+26 -25
--- src/cgi.c
+++ src/cgi.c
@@ -258,11 +258,11 @@
258258
zTok = strtok_r(0, ",\"",&zPos)){}
259259
fossil_free(zBuf);
260260
if(zTok) return 1;
261261
}
262262
}
263
-
263
+
264264
return 0;
265265
}
266266
#endif
267267
268268
/*
@@ -465,11 +465,11 @@
465465
** must be made of zValue.
466466
*/
467467
void cgi_setenv(const char *zName, const char *zValue){
468468
cgi_set_parameter_nocopy(zName, mprintf("%s",zValue));
469469
}
470
-
470
+
471471
472472
/*
473473
** Add a list of query parameters or cookies to the parameter set.
474474
**
475475
** Each parameter is of the form NAME=VALUE. Both the NAME and the
@@ -498,24 +498,25 @@
498498
while( *z ){
499499
char *zName;
500500
char *zValue;
501501
while( fossil_isspace(*z) ){ z++; }
502502
zName = z;
503
- while( *z && *z!='=' && *z!=terminator ){ z++; }
504
- if( *z=='=' ){
505
- *z = 0;
506
- z++;
507
- zValue = z;
508
- while( *z && *z!=terminator ){ z++; }
509
- if( *z ){
510
- *z = 0;
511
- z++;
512
- }
503
+ zValue = 0;
504
+ while( *z ){
505
+ if( *z==terminator ){
506
+ *z++ = 0; break;
507
+ }
508
+ if( !zValue && (*z=='=') ){
509
+ *z = 0;
510
+ zValue = z+1;
511
+ }
512
+ z++;
513
+ }
514
+ if( zValue ){
513515
dehttpize(zValue);
514516
}else{
515
- if( *z ){ *z++ = 0; }
516
- zValue = "";
517
+ zValue = zName;
517518
}
518519
if( fossil_islower(zName[0]) ){
519520
cgi_set_parameter_nocopy(zName, zValue);
520521
}
521522
#ifdef FOSSIL_ENABLE_JSON
@@ -582,11 +583,11 @@
582583
break;
583584
}
584585
}
585586
*pz = &z[i];
586587
get_line_from_string(pz, pLen);
587
- return z;
588
+ return z;
588589
}
589590
590591
/*
591592
** Tokenize a line of text into as many as nArg tokens. Make
592593
** azArg[] point to the start of each token.
@@ -689,11 +690,11 @@
689690
cgi_set_parameter_nocopy(mprintf("%s:mimetype",zName), z);
690691
}
691692
}
692693
}
693694
}
694
- }
695
+ }
695696
}
696697
697698
698699
#ifdef FOSSIL_ENABLE_JSON
699700
/*
@@ -833,11 +834,11 @@
833834
z = (char*)P("HTTP_COOKIE");
834835
if( z ){
835836
z = mprintf("%s",z);
836837
add_param_list(z, ';');
837838
}
838
-
839
+
839840
z = (char*)P("QUERY_STRING");
840841
if( z ){
841842
z = mprintf("%s",z);
842843
add_param_list(z, '&');
843844
}
@@ -849,11 +850,11 @@
849850
850851
len = atoi(PD("CONTENT_LENGTH", "0"));
851852
g.zContentType = zType = P("CONTENT_TYPE");
852853
if( len>0 && zType ){
853854
blob_zero(&g.cgiIn);
854
- if( fossil_strcmp(zType,"application/x-www-form-urlencoded")==0
855
+ if( fossil_strcmp(zType,"application/x-www-form-urlencoded")==0
855856
|| strncmp(zType,"multipart/form-data",19)==0 ){
856857
z = fossil_malloc( len+1 );
857858
len = fread(z, 1, len, g.httpIn);
858859
z[len] = 0;
859860
cgi_trace(z);
@@ -879,11 +880,11 @@
879880
/* FIXMEs:
880881
881882
- See if fossil really needs g.cgiIn to be set for this purpose
882883
(i don't think it does). If it does then fill g.cgiIn and
883884
refactor to parse the JSON from there.
884
-
885
+
885886
- After parsing POST JSON, copy the "first layer" of keys/values
886887
to cgi_setenv(), honoring the upper-case distinction used
887888
in add_param_list(). However...
888889
889890
- If we do that then we might get a disconnect in precedence of
@@ -1196,20 +1197,20 @@
11961197
for(i=0; zToken[i] && zToken[i]!='?'; i++){}
11971198
if( zToken[i] ) zToken[i++] = 0;
11981199
cgi_setenv("PATH_INFO", zToken);
11991200
cgi_setenv("QUERY_STRING", &zToken[i]);
12001201
if( zIpAddr==0 &&
1201
- getpeername(fileno(g.httpIn), (struct sockaddr*)&remoteName,
1202
+ getpeername(fileno(g.httpIn), (struct sockaddr*)&remoteName,
12021203
&size)>=0
12031204
){
12041205
zIpAddr = inet_ntoa(remoteName.sin_addr);
12051206
}
1206
- if( zIpAddr ){
1207
+ if( zIpAddr ){
12071208
cgi_setenv("REMOTE_ADDR", zIpAddr);
12081209
g.zIpAddr = mprintf("%s", zIpAddr);
12091210
}
1210
-
1211
+
12111212
/* Get all the optional fields that follow the first line.
12121213
*/
12131214
while( fgets(zLine,sizeof(zLine),g.httpIn) ){
12141215
char *zFieldName;
12151216
char *zVal;
@@ -1249,11 +1250,11 @@
12491250
cgi_init();
12501251
cgi_trace(0);
12511252
}
12521253
12531254
#if INTERFACE
1254
-/*
1255
+/*
12551256
** Bitmap values for the flags parameter to cgi_http_server().
12561257
*/
12571258
#define HTTP_SERVER_LOCALHOST 0x0001 /* Bind to 127.0.0.1 only */
12581259
12591260
#endif /* INTERFACE */
@@ -1385,11 +1386,11 @@
13851386
/* Bury dead children */
13861387
while( waitpid(0, 0, WNOHANG)>0 ){
13871388
nchildren--;
13881389
}
13891390
}
1390
- /* NOT REACHED */
1391
+ /* NOT REACHED */
13911392
fossil_exit(1);
13921393
#endif
13931394
/* NOT REACHED */
13941395
return 0;
13951396
}
@@ -1473,11 +1474,11 @@
14731474
p->tm_mon %= 12;
14741475
}
14751476
isLeapYr = p->tm_year%4==0 && (p->tm_year%100!=0 || (p->tm_year+300)%400==0);
14761477
p->tm_yday = priorDays[p->tm_mon] + p->tm_mday - 1;
14771478
if( isLeapYr && p->tm_mon>1 ) p->tm_yday++;
1478
- nDay = (p->tm_year-70)*365 + (p->tm_year-69)/4 -p->tm_year/100 +
1479
+ nDay = (p->tm_year-70)*365 + (p->tm_year-69)/4 -p->tm_year/100 +
14791480
(p->tm_year+300)/400 + p->tm_yday;
14801481
t = ((nDay*24 + p->tm_hour)*60 + p->tm_min)*60 + p->tm_sec;
14811482
return t;
14821483
}
14831484
14841485
--- src/cgi.c
+++ src/cgi.c
@@ -258,11 +258,11 @@
258 zTok = strtok_r(0, ",\"",&zPos)){}
259 fossil_free(zBuf);
260 if(zTok) return 1;
261 }
262 }
263
264 return 0;
265 }
266 #endif
267
268 /*
@@ -465,11 +465,11 @@
465 ** must be made of zValue.
466 */
467 void cgi_setenv(const char *zName, const char *zValue){
468 cgi_set_parameter_nocopy(zName, mprintf("%s",zValue));
469 }
470
471
472 /*
473 ** Add a list of query parameters or cookies to the parameter set.
474 **
475 ** Each parameter is of the form NAME=VALUE. Both the NAME and the
@@ -498,24 +498,25 @@
498 while( *z ){
499 char *zName;
500 char *zValue;
501 while( fossil_isspace(*z) ){ z++; }
502 zName = z;
503 while( *z && *z!='=' && *z!=terminator ){ z++; }
504 if( *z=='=' ){
505 *z = 0;
506 z++;
507 zValue = z;
508 while( *z && *z!=terminator ){ z++; }
509 if( *z ){
510 *z = 0;
511 z++;
512 }
 
 
513 dehttpize(zValue);
514 }else{
515 if( *z ){ *z++ = 0; }
516 zValue = "";
517 }
518 if( fossil_islower(zName[0]) ){
519 cgi_set_parameter_nocopy(zName, zValue);
520 }
521 #ifdef FOSSIL_ENABLE_JSON
@@ -582,11 +583,11 @@
582 break;
583 }
584 }
585 *pz = &z[i];
586 get_line_from_string(pz, pLen);
587 return z;
588 }
589
590 /*
591 ** Tokenize a line of text into as many as nArg tokens. Make
592 ** azArg[] point to the start of each token.
@@ -689,11 +690,11 @@
689 cgi_set_parameter_nocopy(mprintf("%s:mimetype",zName), z);
690 }
691 }
692 }
693 }
694 }
695 }
696
697
698 #ifdef FOSSIL_ENABLE_JSON
699 /*
@@ -833,11 +834,11 @@
833 z = (char*)P("HTTP_COOKIE");
834 if( z ){
835 z = mprintf("%s",z);
836 add_param_list(z, ';');
837 }
838
839 z = (char*)P("QUERY_STRING");
840 if( z ){
841 z = mprintf("%s",z);
842 add_param_list(z, '&');
843 }
@@ -849,11 +850,11 @@
849
850 len = atoi(PD("CONTENT_LENGTH", "0"));
851 g.zContentType = zType = P("CONTENT_TYPE");
852 if( len>0 && zType ){
853 blob_zero(&g.cgiIn);
854 if( fossil_strcmp(zType,"application/x-www-form-urlencoded")==0
855 || strncmp(zType,"multipart/form-data",19)==0 ){
856 z = fossil_malloc( len+1 );
857 len = fread(z, 1, len, g.httpIn);
858 z[len] = 0;
859 cgi_trace(z);
@@ -879,11 +880,11 @@
879 /* FIXMEs:
880
881 - See if fossil really needs g.cgiIn to be set for this purpose
882 (i don't think it does). If it does then fill g.cgiIn and
883 refactor to parse the JSON from there.
884
885 - After parsing POST JSON, copy the "first layer" of keys/values
886 to cgi_setenv(), honoring the upper-case distinction used
887 in add_param_list(). However...
888
889 - If we do that then we might get a disconnect in precedence of
@@ -1196,20 +1197,20 @@
1196 for(i=0; zToken[i] && zToken[i]!='?'; i++){}
1197 if( zToken[i] ) zToken[i++] = 0;
1198 cgi_setenv("PATH_INFO", zToken);
1199 cgi_setenv("QUERY_STRING", &zToken[i]);
1200 if( zIpAddr==0 &&
1201 getpeername(fileno(g.httpIn), (struct sockaddr*)&remoteName,
1202 &size)>=0
1203 ){
1204 zIpAddr = inet_ntoa(remoteName.sin_addr);
1205 }
1206 if( zIpAddr ){
1207 cgi_setenv("REMOTE_ADDR", zIpAddr);
1208 g.zIpAddr = mprintf("%s", zIpAddr);
1209 }
1210
1211 /* Get all the optional fields that follow the first line.
1212 */
1213 while( fgets(zLine,sizeof(zLine),g.httpIn) ){
1214 char *zFieldName;
1215 char *zVal;
@@ -1249,11 +1250,11 @@
1249 cgi_init();
1250 cgi_trace(0);
1251 }
1252
1253 #if INTERFACE
1254 /*
1255 ** Bitmap values for the flags parameter to cgi_http_server().
1256 */
1257 #define HTTP_SERVER_LOCALHOST 0x0001 /* Bind to 127.0.0.1 only */
1258
1259 #endif /* INTERFACE */
@@ -1385,11 +1386,11 @@
1385 /* Bury dead children */
1386 while( waitpid(0, 0, WNOHANG)>0 ){
1387 nchildren--;
1388 }
1389 }
1390 /* NOT REACHED */
1391 fossil_exit(1);
1392 #endif
1393 /* NOT REACHED */
1394 return 0;
1395 }
@@ -1473,11 +1474,11 @@
1473 p->tm_mon %= 12;
1474 }
1475 isLeapYr = p->tm_year%4==0 && (p->tm_year%100!=0 || (p->tm_year+300)%400==0);
1476 p->tm_yday = priorDays[p->tm_mon] + p->tm_mday - 1;
1477 if( isLeapYr && p->tm_mon>1 ) p->tm_yday++;
1478 nDay = (p->tm_year-70)*365 + (p->tm_year-69)/4 -p->tm_year/100 +
1479 (p->tm_year+300)/400 + p->tm_yday;
1480 t = ((nDay*24 + p->tm_hour)*60 + p->tm_min)*60 + p->tm_sec;
1481 return t;
1482 }
1483
1484
--- src/cgi.c
+++ src/cgi.c
@@ -258,11 +258,11 @@
258 zTok = strtok_r(0, ",\"",&zPos)){}
259 fossil_free(zBuf);
260 if(zTok) return 1;
261 }
262 }
263
264 return 0;
265 }
266 #endif
267
268 /*
@@ -465,11 +465,11 @@
465 ** must be made of zValue.
466 */
467 void cgi_setenv(const char *zName, const char *zValue){
468 cgi_set_parameter_nocopy(zName, mprintf("%s",zValue));
469 }
470
471
472 /*
473 ** Add a list of query parameters or cookies to the parameter set.
474 **
475 ** Each parameter is of the form NAME=VALUE. Both the NAME and the
@@ -498,24 +498,25 @@
498 while( *z ){
499 char *zName;
500 char *zValue;
501 while( fossil_isspace(*z) ){ z++; }
502 zName = z;
503 zValue = 0;
504 while( *z ){
505 if( *z==terminator ){
506 *z++ = 0; break;
507 }
508 if( !zValue && (*z=='=') ){
509 *z = 0;
510 zValue = z+1;
511 }
512 z++;
513 }
514 if( zValue ){
515 dehttpize(zValue);
516 }else{
517 zValue = zName;
 
518 }
519 if( fossil_islower(zName[0]) ){
520 cgi_set_parameter_nocopy(zName, zValue);
521 }
522 #ifdef FOSSIL_ENABLE_JSON
@@ -582,11 +583,11 @@
583 break;
584 }
585 }
586 *pz = &z[i];
587 get_line_from_string(pz, pLen);
588 return z;
589 }
590
591 /*
592 ** Tokenize a line of text into as many as nArg tokens. Make
593 ** azArg[] point to the start of each token.
@@ -689,11 +690,11 @@
690 cgi_set_parameter_nocopy(mprintf("%s:mimetype",zName), z);
691 }
692 }
693 }
694 }
695 }
696 }
697
698
699 #ifdef FOSSIL_ENABLE_JSON
700 /*
@@ -833,11 +834,11 @@
834 z = (char*)P("HTTP_COOKIE");
835 if( z ){
836 z = mprintf("%s",z);
837 add_param_list(z, ';');
838 }
839
840 z = (char*)P("QUERY_STRING");
841 if( z ){
842 z = mprintf("%s",z);
843 add_param_list(z, '&');
844 }
@@ -849,11 +850,11 @@
850
851 len = atoi(PD("CONTENT_LENGTH", "0"));
852 g.zContentType = zType = P("CONTENT_TYPE");
853 if( len>0 && zType ){
854 blob_zero(&g.cgiIn);
855 if( fossil_strcmp(zType,"application/x-www-form-urlencoded")==0
856 || strncmp(zType,"multipart/form-data",19)==0 ){
857 z = fossil_malloc( len+1 );
858 len = fread(z, 1, len, g.httpIn);
859 z[len] = 0;
860 cgi_trace(z);
@@ -879,11 +880,11 @@
880 /* FIXMEs:
881
882 - See if fossil really needs g.cgiIn to be set for this purpose
883 (i don't think it does). If it does then fill g.cgiIn and
884 refactor to parse the JSON from there.
885
886 - After parsing POST JSON, copy the "first layer" of keys/values
887 to cgi_setenv(), honoring the upper-case distinction used
888 in add_param_list(). However...
889
890 - If we do that then we might get a disconnect in precedence of
@@ -1196,20 +1197,20 @@
1197 for(i=0; zToken[i] && zToken[i]!='?'; i++){}
1198 if( zToken[i] ) zToken[i++] = 0;
1199 cgi_setenv("PATH_INFO", zToken);
1200 cgi_setenv("QUERY_STRING", &zToken[i]);
1201 if( zIpAddr==0 &&
1202 getpeername(fileno(g.httpIn), (struct sockaddr*)&remoteName,
1203 &size)>=0
1204 ){
1205 zIpAddr = inet_ntoa(remoteName.sin_addr);
1206 }
1207 if( zIpAddr ){
1208 cgi_setenv("REMOTE_ADDR", zIpAddr);
1209 g.zIpAddr = mprintf("%s", zIpAddr);
1210 }
1211
1212 /* Get all the optional fields that follow the first line.
1213 */
1214 while( fgets(zLine,sizeof(zLine),g.httpIn) ){
1215 char *zFieldName;
1216 char *zVal;
@@ -1249,11 +1250,11 @@
1250 cgi_init();
1251 cgi_trace(0);
1252 }
1253
1254 #if INTERFACE
1255 /*
1256 ** Bitmap values for the flags parameter to cgi_http_server().
1257 */
1258 #define HTTP_SERVER_LOCALHOST 0x0001 /* Bind to 127.0.0.1 only */
1259
1260 #endif /* INTERFACE */
@@ -1385,11 +1386,11 @@
1386 /* Bury dead children */
1387 while( waitpid(0, 0, WNOHANG)>0 ){
1388 nchildren--;
1389 }
1390 }
1391 /* NOT REACHED */
1392 fossil_exit(1);
1393 #endif
1394 /* NOT REACHED */
1395 return 0;
1396 }
@@ -1473,11 +1474,11 @@
1474 p->tm_mon %= 12;
1475 }
1476 isLeapYr = p->tm_year%4==0 && (p->tm_year%100!=0 || (p->tm_year+300)%400==0);
1477 p->tm_yday = priorDays[p->tm_mon] + p->tm_mday - 1;
1478 if( isLeapYr && p->tm_mon>1 ) p->tm_yday++;
1479 nDay = (p->tm_year-70)*365 + (p->tm_year-69)/4 -p->tm_year/100 +
1480 (p->tm_year+300)/400 + p->tm_yday;
1481 t = ((nDay*24 + p->tm_hour)*60 + p->tm_min)*60 + p->tm_sec;
1482 return t;
1483 }
1484
1485
+8 -8
--- src/event.c
+++ src/event.c
@@ -185,11 +185,11 @@
185185
blob_init(&comment, pEvent->zComment, -1);
186186
wiki_convert(&comment, 0, WIKI_INLINE);
187187
blob_reset(&comment);
188188
@ </div>
189189
@ </blockquote><hr />
190
- }
190
+ }
191191
192192
wiki_convert(&tail, 0, 0);
193193
style_footer();
194194
manifest_destroy(pEvent);
195195
}
@@ -227,11 +227,11 @@
227227
fossil_redirect_home();
228228
return;
229229
}
230230
}
231231
zTag = mprintf("event-%s", zEventId);
232
- rid = db_int(0,
232
+ rid = db_int(0,
233233
"SELECT rid FROM tagxref"
234234
" WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
235235
" ORDER BY mtime DESC", zTag
236236
);
237237
free(zTag);
@@ -307,11 +307,11 @@
307307
Stmt q;
308308
char *zBlob;
309309
310310
/* Load the tags string into a blob */
311311
blob_zero(&tags);
312
- blob_append(&tags, zTags, -1);
312
+ blob_append(&tags, zTags, -1);
313313
314314
/* Collapse all sequences of whitespace and "," characters into
315315
** a single space character */
316316
zBlob = blob_str(&tags);
317317
for(i=j=0; zBlob[i]; i++, j++){
@@ -336,11 +336,11 @@
336336
db_prepare(&q, "SELECT x FROM newtags ORDER BY x");
337337
while( db_step(&q)==SQLITE_ROW ){
338338
blob_appendf(&event, "T +sym-%F *\n", db_column_text(&q, 0));
339339
}
340340
db_finalize(&q);
341
- }
341
+ }
342342
if( g.zLogin ){
343343
blob_appendf(&event, "U %F\n", g.zLogin);
344344
}
345345
blob_appendf(&event, "W %d\n%s\n", strlen(zBody), zBody);
346346
md5sum_blob(&event, &cksum);
@@ -406,27 +406,27 @@
406406
@ <input type="text" name="t" size="25" value="%h(zETime)" />
407407
@ </td></tr>
408408
409409
@ <tr><td align="right" valign="top"><b>Timeline&nbsp;Comment:</b></td>
410410
@ <td valign="top">
411
- @ <textarea name="c" class="eventedit" cols="80"
411
+ @ <textarea name="c" class="eventedit" cols="80"
412412
@ rows="3" wrap="virtual">%h(zComment)</textarea>
413413
@ </td></tr>
414414
415415
@ <tr><td align="right" valign="top"><b>Background&nbsp;Color:</b></td>
416416
@ <td valign="top">
417417
render_color_chooser(0, zClr, 0, "clr", "cclr");
418418
@ </td></tr>
419
-
419
+
420420
@ <tr><td align="right" valign="top"><b>Tags:</b></td>
421421
@ <td valign="top">
422422
@ <input type="text" name="g" size="40" value="%h(zTags)" />
423423
@ </td></tr>
424
-
424
+
425425
@ <tr><td align="right" valign="top"><b>Page&nbsp;Content:</b></td>
426426
@ <td valign="top">
427
- @ <textarea name="w" class="eventedit" cols="80"
427
+ @ <textarea name="w" class="eventedit" cols="80"
428428
@ rows="%d(n)" wrap="virtual">%h(zBody)</textarea>
429429
@ </td></tr>
430430
431431
@ <tr><td colspan="2">
432432
@ <input type="submit" name="preview" value="Preview Your Changes" />
433433
--- src/event.c
+++ src/event.c
@@ -185,11 +185,11 @@
185 blob_init(&comment, pEvent->zComment, -1);
186 wiki_convert(&comment, 0, WIKI_INLINE);
187 blob_reset(&comment);
188 @ </div>
189 @ </blockquote><hr />
190 }
191
192 wiki_convert(&tail, 0, 0);
193 style_footer();
194 manifest_destroy(pEvent);
195 }
@@ -227,11 +227,11 @@
227 fossil_redirect_home();
228 return;
229 }
230 }
231 zTag = mprintf("event-%s", zEventId);
232 rid = db_int(0,
233 "SELECT rid FROM tagxref"
234 " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
235 " ORDER BY mtime DESC", zTag
236 );
237 free(zTag);
@@ -307,11 +307,11 @@
307 Stmt q;
308 char *zBlob;
309
310 /* Load the tags string into a blob */
311 blob_zero(&tags);
312 blob_append(&tags, zTags, -1);
313
314 /* Collapse all sequences of whitespace and "," characters into
315 ** a single space character */
316 zBlob = blob_str(&tags);
317 for(i=j=0; zBlob[i]; i++, j++){
@@ -336,11 +336,11 @@
336 db_prepare(&q, "SELECT x FROM newtags ORDER BY x");
337 while( db_step(&q)==SQLITE_ROW ){
338 blob_appendf(&event, "T +sym-%F *\n", db_column_text(&q, 0));
339 }
340 db_finalize(&q);
341 }
342 if( g.zLogin ){
343 blob_appendf(&event, "U %F\n", g.zLogin);
344 }
345 blob_appendf(&event, "W %d\n%s\n", strlen(zBody), zBody);
346 md5sum_blob(&event, &cksum);
@@ -406,27 +406,27 @@
406 @ <input type="text" name="t" size="25" value="%h(zETime)" />
407 @ </td></tr>
408
409 @ <tr><td align="right" valign="top"><b>Timeline&nbsp;Comment:</b></td>
410 @ <td valign="top">
411 @ <textarea name="c" class="eventedit" cols="80"
412 @ rows="3" wrap="virtual">%h(zComment)</textarea>
413 @ </td></tr>
414
415 @ <tr><td align="right" valign="top"><b>Background&nbsp;Color:</b></td>
416 @ <td valign="top">
417 render_color_chooser(0, zClr, 0, "clr", "cclr");
418 @ </td></tr>
419
420 @ <tr><td align="right" valign="top"><b>Tags:</b></td>
421 @ <td valign="top">
422 @ <input type="text" name="g" size="40" value="%h(zTags)" />
423 @ </td></tr>
424
425 @ <tr><td align="right" valign="top"><b>Page&nbsp;Content:</b></td>
426 @ <td valign="top">
427 @ <textarea name="w" class="eventedit" cols="80"
428 @ rows="%d(n)" wrap="virtual">%h(zBody)</textarea>
429 @ </td></tr>
430
431 @ <tr><td colspan="2">
432 @ <input type="submit" name="preview" value="Preview Your Changes" />
433
--- src/event.c
+++ src/event.c
@@ -185,11 +185,11 @@
185 blob_init(&comment, pEvent->zComment, -1);
186 wiki_convert(&comment, 0, WIKI_INLINE);
187 blob_reset(&comment);
188 @ </div>
189 @ </blockquote><hr />
190 }
191
192 wiki_convert(&tail, 0, 0);
193 style_footer();
194 manifest_destroy(pEvent);
195 }
@@ -227,11 +227,11 @@
227 fossil_redirect_home();
228 return;
229 }
230 }
231 zTag = mprintf("event-%s", zEventId);
232 rid = db_int(0,
233 "SELECT rid FROM tagxref"
234 " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
235 " ORDER BY mtime DESC", zTag
236 );
237 free(zTag);
@@ -307,11 +307,11 @@
307 Stmt q;
308 char *zBlob;
309
310 /* Load the tags string into a blob */
311 blob_zero(&tags);
312 blob_append(&tags, zTags, -1);
313
314 /* Collapse all sequences of whitespace and "," characters into
315 ** a single space character */
316 zBlob = blob_str(&tags);
317 for(i=j=0; zBlob[i]; i++, j++){
@@ -336,11 +336,11 @@
336 db_prepare(&q, "SELECT x FROM newtags ORDER BY x");
337 while( db_step(&q)==SQLITE_ROW ){
338 blob_appendf(&event, "T +sym-%F *\n", db_column_text(&q, 0));
339 }
340 db_finalize(&q);
341 }
342 if( g.zLogin ){
343 blob_appendf(&event, "U %F\n", g.zLogin);
344 }
345 blob_appendf(&event, "W %d\n%s\n", strlen(zBody), zBody);
346 md5sum_blob(&event, &cksum);
@@ -406,27 +406,27 @@
406 @ <input type="text" name="t" size="25" value="%h(zETime)" />
407 @ </td></tr>
408
409 @ <tr><td align="right" valign="top"><b>Timeline&nbsp;Comment:</b></td>
410 @ <td valign="top">
411 @ <textarea name="c" class="eventedit" cols="80"
412 @ rows="3" wrap="virtual">%h(zComment)</textarea>
413 @ </td></tr>
414
415 @ <tr><td align="right" valign="top"><b>Background&nbsp;Color:</b></td>
416 @ <td valign="top">
417 render_color_chooser(0, zClr, 0, "clr", "cclr");
418 @ </td></tr>
419
420 @ <tr><td align="right" valign="top"><b>Tags:</b></td>
421 @ <td valign="top">
422 @ <input type="text" name="g" size="40" value="%h(zTags)" />
423 @ </td></tr>
424
425 @ <tr><td align="right" valign="top"><b>Page&nbsp;Content:</b></td>
426 @ <td valign="top">
427 @ <textarea name="w" class="eventedit" cols="80"
428 @ rows="%d(n)" wrap="virtual">%h(zBody)</textarea>
429 @ </td></tr>
430
431 @ <tr><td colspan="2">
432 @ <input type="submit" name="preview" value="Preview Your Changes" />
433
+8 -8
--- src/event.c
+++ src/event.c
@@ -185,11 +185,11 @@
185185
blob_init(&comment, pEvent->zComment, -1);
186186
wiki_convert(&comment, 0, WIKI_INLINE);
187187
blob_reset(&comment);
188188
@ </div>
189189
@ </blockquote><hr />
190
- }
190
+ }
191191
192192
wiki_convert(&tail, 0, 0);
193193
style_footer();
194194
manifest_destroy(pEvent);
195195
}
@@ -227,11 +227,11 @@
227227
fossil_redirect_home();
228228
return;
229229
}
230230
}
231231
zTag = mprintf("event-%s", zEventId);
232
- rid = db_int(0,
232
+ rid = db_int(0,
233233
"SELECT rid FROM tagxref"
234234
" WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
235235
" ORDER BY mtime DESC", zTag
236236
);
237237
free(zTag);
@@ -307,11 +307,11 @@
307307
Stmt q;
308308
char *zBlob;
309309
310310
/* Load the tags string into a blob */
311311
blob_zero(&tags);
312
- blob_append(&tags, zTags, -1);
312
+ blob_append(&tags, zTags, -1);
313313
314314
/* Collapse all sequences of whitespace and "," characters into
315315
** a single space character */
316316
zBlob = blob_str(&tags);
317317
for(i=j=0; zBlob[i]; i++, j++){
@@ -336,11 +336,11 @@
336336
db_prepare(&q, "SELECT x FROM newtags ORDER BY x");
337337
while( db_step(&q)==SQLITE_ROW ){
338338
blob_appendf(&event, "T +sym-%F *\n", db_column_text(&q, 0));
339339
}
340340
db_finalize(&q);
341
- }
341
+ }
342342
if( g.zLogin ){
343343
blob_appendf(&event, "U %F\n", g.zLogin);
344344
}
345345
blob_appendf(&event, "W %d\n%s\n", strlen(zBody), zBody);
346346
md5sum_blob(&event, &cksum);
@@ -406,27 +406,27 @@
406406
@ <input type="text" name="t" size="25" value="%h(zETime)" />
407407
@ </td></tr>
408408
409409
@ <tr><td align="right" valign="top"><b>Timeline&nbsp;Comment:</b></td>
410410
@ <td valign="top">
411
- @ <textarea name="c" class="eventedit" cols="80"
411
+ @ <textarea name="c" class="eventedit" cols="80"
412412
@ rows="3" wrap="virtual">%h(zComment)</textarea>
413413
@ </td></tr>
414414
415415
@ <tr><td align="right" valign="top"><b>Background&nbsp;Color:</b></td>
416416
@ <td valign="top">
417417
render_color_chooser(0, zClr, 0, "clr", "cclr");
418418
@ </td></tr>
419
-
419
+
420420
@ <tr><td align="right" valign="top"><b>Tags:</b></td>
421421
@ <td valign="top">
422422
@ <input type="text" name="g" size="40" value="%h(zTags)" />
423423
@ </td></tr>
424
-
424
+
425425
@ <tr><td align="right" valign="top"><b>Page&nbsp;Content:</b></td>
426426
@ <td valign="top">
427
- @ <textarea name="w" class="eventedit" cols="80"
427
+ @ <textarea name="w" class="eventedit" cols="80"
428428
@ rows="%d(n)" wrap="virtual">%h(zBody)</textarea>
429429
@ </td></tr>
430430
431431
@ <tr><td colspan="2">
432432
@ <input type="submit" name="preview" value="Preview Your Changes" />
433433
--- src/event.c
+++ src/event.c
@@ -185,11 +185,11 @@
185 blob_init(&comment, pEvent->zComment, -1);
186 wiki_convert(&comment, 0, WIKI_INLINE);
187 blob_reset(&comment);
188 @ </div>
189 @ </blockquote><hr />
190 }
191
192 wiki_convert(&tail, 0, 0);
193 style_footer();
194 manifest_destroy(pEvent);
195 }
@@ -227,11 +227,11 @@
227 fossil_redirect_home();
228 return;
229 }
230 }
231 zTag = mprintf("event-%s", zEventId);
232 rid = db_int(0,
233 "SELECT rid FROM tagxref"
234 " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
235 " ORDER BY mtime DESC", zTag
236 );
237 free(zTag);
@@ -307,11 +307,11 @@
307 Stmt q;
308 char *zBlob;
309
310 /* Load the tags string into a blob */
311 blob_zero(&tags);
312 blob_append(&tags, zTags, -1);
313
314 /* Collapse all sequences of whitespace and "," characters into
315 ** a single space character */
316 zBlob = blob_str(&tags);
317 for(i=j=0; zBlob[i]; i++, j++){
@@ -336,11 +336,11 @@
336 db_prepare(&q, "SELECT x FROM newtags ORDER BY x");
337 while( db_step(&q)==SQLITE_ROW ){
338 blob_appendf(&event, "T +sym-%F *\n", db_column_text(&q, 0));
339 }
340 db_finalize(&q);
341 }
342 if( g.zLogin ){
343 blob_appendf(&event, "U %F\n", g.zLogin);
344 }
345 blob_appendf(&event, "W %d\n%s\n", strlen(zBody), zBody);
346 md5sum_blob(&event, &cksum);
@@ -406,27 +406,27 @@
406 @ <input type="text" name="t" size="25" value="%h(zETime)" />
407 @ </td></tr>
408
409 @ <tr><td align="right" valign="top"><b>Timeline&nbsp;Comment:</b></td>
410 @ <td valign="top">
411 @ <textarea name="c" class="eventedit" cols="80"
412 @ rows="3" wrap="virtual">%h(zComment)</textarea>
413 @ </td></tr>
414
415 @ <tr><td align="right" valign="top"><b>Background&nbsp;Color:</b></td>
416 @ <td valign="top">
417 render_color_chooser(0, zClr, 0, "clr", "cclr");
418 @ </td></tr>
419
420 @ <tr><td align="right" valign="top"><b>Tags:</b></td>
421 @ <td valign="top">
422 @ <input type="text" name="g" size="40" value="%h(zTags)" />
423 @ </td></tr>
424
425 @ <tr><td align="right" valign="top"><b>Page&nbsp;Content:</b></td>
426 @ <td valign="top">
427 @ <textarea name="w" class="eventedit" cols="80"
428 @ rows="%d(n)" wrap="virtual">%h(zBody)</textarea>
429 @ </td></tr>
430
431 @ <tr><td colspan="2">
432 @ <input type="submit" name="preview" value="Preview Your Changes" />
433
--- src/event.c
+++ src/event.c
@@ -185,11 +185,11 @@
185 blob_init(&comment, pEvent->zComment, -1);
186 wiki_convert(&comment, 0, WIKI_INLINE);
187 blob_reset(&comment);
188 @ </div>
189 @ </blockquote><hr />
190 }
191
192 wiki_convert(&tail, 0, 0);
193 style_footer();
194 manifest_destroy(pEvent);
195 }
@@ -227,11 +227,11 @@
227 fossil_redirect_home();
228 return;
229 }
230 }
231 zTag = mprintf("event-%s", zEventId);
232 rid = db_int(0,
233 "SELECT rid FROM tagxref"
234 " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
235 " ORDER BY mtime DESC", zTag
236 );
237 free(zTag);
@@ -307,11 +307,11 @@
307 Stmt q;
308 char *zBlob;
309
310 /* Load the tags string into a blob */
311 blob_zero(&tags);
312 blob_append(&tags, zTags, -1);
313
314 /* Collapse all sequences of whitespace and "," characters into
315 ** a single space character */
316 zBlob = blob_str(&tags);
317 for(i=j=0; zBlob[i]; i++, j++){
@@ -336,11 +336,11 @@
336 db_prepare(&q, "SELECT x FROM newtags ORDER BY x");
337 while( db_step(&q)==SQLITE_ROW ){
338 blob_appendf(&event, "T +sym-%F *\n", db_column_text(&q, 0));
339 }
340 db_finalize(&q);
341 }
342 if( g.zLogin ){
343 blob_appendf(&event, "U %F\n", g.zLogin);
344 }
345 blob_appendf(&event, "W %d\n%s\n", strlen(zBody), zBody);
346 md5sum_blob(&event, &cksum);
@@ -406,27 +406,27 @@
406 @ <input type="text" name="t" size="25" value="%h(zETime)" />
407 @ </td></tr>
408
409 @ <tr><td align="right" valign="top"><b>Timeline&nbsp;Comment:</b></td>
410 @ <td valign="top">
411 @ <textarea name="c" class="eventedit" cols="80"
412 @ rows="3" wrap="virtual">%h(zComment)</textarea>
413 @ </td></tr>
414
415 @ <tr><td align="right" valign="top"><b>Background&nbsp;Color:</b></td>
416 @ <td valign="top">
417 render_color_chooser(0, zClr, 0, "clr", "cclr");
418 @ </td></tr>
419
420 @ <tr><td align="right" valign="top"><b>Tags:</b></td>
421 @ <td valign="top">
422 @ <input type="text" name="g" size="40" value="%h(zTags)" />
423 @ </td></tr>
424
425 @ <tr><td align="right" valign="top"><b>Page&nbsp;Content:</b></td>
426 @ <td valign="top">
427 @ <textarea name="w" class="eventedit" cols="80"
428 @ rows="%d(n)" wrap="virtual">%h(zBody)</textarea>
429 @ </td></tr>
430
431 @ <tr><td colspan="2">
432 @ <input type="submit" name="preview" value="Preview Your Changes" />
433
+12 -7
--- src/info.c
+++ src/info.c
@@ -390,11 +390,11 @@
390390
@ <pre style="white-space:pre;">
391391
append_diff(zOld, zNew, diffFlags, pRe);
392392
@ </pre>
393393
}else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
394394
@ &nbsp;&nbsp;
395
- @ %z(href("%R/fdiff?v1=%S&v2=%S",zOld,zNew))[diff]</a>
395
+ @ %z(href("%R/fdiff?v1=%S&v2=%S&sbs=1",zOld,zNew))[diff]</a>
396396
}
397397
@ </p>
398398
}
399399
}
400400
@@ -455,10 +455,11 @@
455455
u64 diffFlags; /* Flag parameter for text_diff() */
456456
const char *zName; /* Name of the checkin to be displayed */
457457
const char *zUuid; /* UUID of zName */
458458
const char *zParent; /* UUID of the parent checkin (if any) */
459459
const char *zRe; /* regex parameter */
460
+ const char *zSbs;
460461
ReCompiled *pRe = 0; /* regex */
461462
462463
login_check_credentials();
463464
if( !g.perm.Read ){ login_needed(); return; }
464465
zName = P("name");
@@ -484,11 +485,12 @@
484485
" FROM blob, event"
485486
" WHERE blob.rid=%d"
486487
" AND event.objid=%d",
487488
rid, rid
488489
);
489
- sideBySide = !is_false(PD("sbs","1"));
490
+ zSbs = P("sbs"); /* Note that "sbs=1" is the default value */
491
+ sideBySide = (zSbs==0) || ((*zSbs!=0) && !is_false(zSbs));
490492
if( db_step(&q)==SQLITE_ROW ){
491493
const char *zUuid = db_column_text(&q, 0);
492494
char *zTitle = mprintf("Check-in [%.10s]", zUuid);
493495
char *zEUser, *zEComment;
494496
const char *zUser;
@@ -896,10 +898,11 @@
896898
const char *zBranch;
897899
const char *zFrom;
898900
const char *zTo;
899901
const char *zRe;
900902
const char *zVerbose;
903
+ const char *zSbs;
901904
ReCompiled *pRe = 0;
902905
903906
login_check_credentials();
904907
if( !g.perm.Read ){ login_needed(); return; }
905908
login_anonymous_available();
@@ -913,11 +916,12 @@
913916
}
914917
pTo = vdiff_parse_manifest("to", &ridTo);
915918
if( pTo==0 ) return;
916919
pFrom = vdiff_parse_manifest("from", &ridFrom);
917920
if( pFrom==0 ) return;
918
- sideBySide = !is_false(PD("sbs","1"));
921
+ zSbs = P("sbs"); /* Note that "sbs=1" is the default value */
922
+ sideBySide = (zSbs==0) || ((*zSbs!=0) && !is_false(zSbs));
919923
zVerbose = P("v");
920924
if( !zVerbose ){
921925
zVerbose = P("verbose");
922926
}
923927
if( !zVerbose ){
@@ -932,16 +936,16 @@
932936
"%R/vdiff?from=%T&to=%T&sbs=1",
933937
zFrom, zTo);
934938
}
935939
if( sideBySide || !verboseFlag ) {
936940
style_submenu_element("Unified Diff", "udiff",
937
- "%R/vdiff?from=%T&to=%T%s&sbs=0&v=1",
941
+ "%R/vdiff?from=%T&to=%T%s&sbs=0&v",
938942
zFrom, zTo);
939943
}
940944
style_submenu_element("Invert", "invert",
941945
"%R/vdiff?from=%T&to=%T&sbs=%d%s", zTo, zFrom,
942
- sideBySide, (verboseFlag && !sideBySide)?"&v=1":"");
946
+ sideBySide, (verboseFlag && !sideBySide)?"&v":"");
943947
style_header("Check-in Differences");
944948
@ <h2>Difference From:</h2><blockquote>
945949
checkin_description(ridFrom);
946950
@ </blockquote><h2>To:</h2><blockquote>
947951
checkin_description(ridTo);
@@ -1246,21 +1250,22 @@
12461250
int isPatch;
12471251
int sideBySide;
12481252
Blob c1, c2, diff, *pOut;
12491253
char *zV1;
12501254
char *zV2;
1251
- const char *zRe;
1255
+ const char *zRe, *zSbs;
12521256
ReCompiled *pRe = 0;
12531257
u64 diffFlags;
12541258
const char *zStyle = "sbsdiff";
12551259
12561260
login_check_credentials();
12571261
if( !g.perm.Read ){ login_needed(); return; }
12581262
v1 = name_to_rid_www("v1");
12591263
v2 = name_to_rid_www("v2");
12601264
if( v1==0 || v2==0 ) fossil_redirect_home();
1261
- sideBySide = !is_false(PD("sbs","1"));
1265
+ zSbs = P("sbs"); /* Note that "sbs=1" is the default value */
1266
+ sideBySide = (zSbs==0) || ((*zSbs!=0) && !is_false(zSbs));
12621267
zV1 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v1);
12631268
zV2 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v2);
12641269
isPatch = P("patch")!=0;
12651270
if( isPatch ){
12661271
pOut = cgi_output_blob();
12671272
--- src/info.c
+++ src/info.c
@@ -390,11 +390,11 @@
390 @ <pre style="white-space:pre;">
391 append_diff(zOld, zNew, diffFlags, pRe);
392 @ </pre>
393 }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
394 @ &nbsp;&nbsp;
395 @ %z(href("%R/fdiff?v1=%S&v2=%S",zOld,zNew))[diff]</a>
396 }
397 @ </p>
398 }
399 }
400
@@ -455,10 +455,11 @@
455 u64 diffFlags; /* Flag parameter for text_diff() */
456 const char *zName; /* Name of the checkin to be displayed */
457 const char *zUuid; /* UUID of zName */
458 const char *zParent; /* UUID of the parent checkin (if any) */
459 const char *zRe; /* regex parameter */
 
460 ReCompiled *pRe = 0; /* regex */
461
462 login_check_credentials();
463 if( !g.perm.Read ){ login_needed(); return; }
464 zName = P("name");
@@ -484,11 +485,12 @@
484 " FROM blob, event"
485 " WHERE blob.rid=%d"
486 " AND event.objid=%d",
487 rid, rid
488 );
489 sideBySide = !is_false(PD("sbs","1"));
 
490 if( db_step(&q)==SQLITE_ROW ){
491 const char *zUuid = db_column_text(&q, 0);
492 char *zTitle = mprintf("Check-in [%.10s]", zUuid);
493 char *zEUser, *zEComment;
494 const char *zUser;
@@ -896,10 +898,11 @@
896 const char *zBranch;
897 const char *zFrom;
898 const char *zTo;
899 const char *zRe;
900 const char *zVerbose;
 
901 ReCompiled *pRe = 0;
902
903 login_check_credentials();
904 if( !g.perm.Read ){ login_needed(); return; }
905 login_anonymous_available();
@@ -913,11 +916,12 @@
913 }
914 pTo = vdiff_parse_manifest("to", &ridTo);
915 if( pTo==0 ) return;
916 pFrom = vdiff_parse_manifest("from", &ridFrom);
917 if( pFrom==0 ) return;
918 sideBySide = !is_false(PD("sbs","1"));
 
919 zVerbose = P("v");
920 if( !zVerbose ){
921 zVerbose = P("verbose");
922 }
923 if( !zVerbose ){
@@ -932,16 +936,16 @@
932 "%R/vdiff?from=%T&to=%T&sbs=1",
933 zFrom, zTo);
934 }
935 if( sideBySide || !verboseFlag ) {
936 style_submenu_element("Unified Diff", "udiff",
937 "%R/vdiff?from=%T&to=%T%s&sbs=0&v=1",
938 zFrom, zTo);
939 }
940 style_submenu_element("Invert", "invert",
941 "%R/vdiff?from=%T&to=%T&sbs=%d%s", zTo, zFrom,
942 sideBySide, (verboseFlag && !sideBySide)?"&v=1":"");
943 style_header("Check-in Differences");
944 @ <h2>Difference From:</h2><blockquote>
945 checkin_description(ridFrom);
946 @ </blockquote><h2>To:</h2><blockquote>
947 checkin_description(ridTo);
@@ -1246,21 +1250,22 @@
1246 int isPatch;
1247 int sideBySide;
1248 Blob c1, c2, diff, *pOut;
1249 char *zV1;
1250 char *zV2;
1251 const char *zRe;
1252 ReCompiled *pRe = 0;
1253 u64 diffFlags;
1254 const char *zStyle = "sbsdiff";
1255
1256 login_check_credentials();
1257 if( !g.perm.Read ){ login_needed(); return; }
1258 v1 = name_to_rid_www("v1");
1259 v2 = name_to_rid_www("v2");
1260 if( v1==0 || v2==0 ) fossil_redirect_home();
1261 sideBySide = !is_false(PD("sbs","1"));
 
1262 zV1 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v1);
1263 zV2 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v2);
1264 isPatch = P("patch")!=0;
1265 if( isPatch ){
1266 pOut = cgi_output_blob();
1267
--- src/info.c
+++ src/info.c
@@ -390,11 +390,11 @@
390 @ <pre style="white-space:pre;">
391 append_diff(zOld, zNew, diffFlags, pRe);
392 @ </pre>
393 }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
394 @ &nbsp;&nbsp;
395 @ %z(href("%R/fdiff?v1=%S&v2=%S&sbs=1",zOld,zNew))[diff]</a>
396 }
397 @ </p>
398 }
399 }
400
@@ -455,10 +455,11 @@
455 u64 diffFlags; /* Flag parameter for text_diff() */
456 const char *zName; /* Name of the checkin to be displayed */
457 const char *zUuid; /* UUID of zName */
458 const char *zParent; /* UUID of the parent checkin (if any) */
459 const char *zRe; /* regex parameter */
460 const char *zSbs;
461 ReCompiled *pRe = 0; /* regex */
462
463 login_check_credentials();
464 if( !g.perm.Read ){ login_needed(); return; }
465 zName = P("name");
@@ -484,11 +485,12 @@
485 " FROM blob, event"
486 " WHERE blob.rid=%d"
487 " AND event.objid=%d",
488 rid, rid
489 );
490 zSbs = P("sbs"); /* Note that "sbs=1" is the default value */
491 sideBySide = (zSbs==0) || ((*zSbs!=0) && !is_false(zSbs));
492 if( db_step(&q)==SQLITE_ROW ){
493 const char *zUuid = db_column_text(&q, 0);
494 char *zTitle = mprintf("Check-in [%.10s]", zUuid);
495 char *zEUser, *zEComment;
496 const char *zUser;
@@ -896,10 +898,11 @@
898 const char *zBranch;
899 const char *zFrom;
900 const char *zTo;
901 const char *zRe;
902 const char *zVerbose;
903 const char *zSbs;
904 ReCompiled *pRe = 0;
905
906 login_check_credentials();
907 if( !g.perm.Read ){ login_needed(); return; }
908 login_anonymous_available();
@@ -913,11 +916,12 @@
916 }
917 pTo = vdiff_parse_manifest("to", &ridTo);
918 if( pTo==0 ) return;
919 pFrom = vdiff_parse_manifest("from", &ridFrom);
920 if( pFrom==0 ) return;
921 zSbs = P("sbs"); /* Note that "sbs=1" is the default value */
922 sideBySide = (zSbs==0) || ((*zSbs!=0) && !is_false(zSbs));
923 zVerbose = P("v");
924 if( !zVerbose ){
925 zVerbose = P("verbose");
926 }
927 if( !zVerbose ){
@@ -932,16 +936,16 @@
936 "%R/vdiff?from=%T&to=%T&sbs=1",
937 zFrom, zTo);
938 }
939 if( sideBySide || !verboseFlag ) {
940 style_submenu_element("Unified Diff", "udiff",
941 "%R/vdiff?from=%T&to=%T%s&sbs=0&v",
942 zFrom, zTo);
943 }
944 style_submenu_element("Invert", "invert",
945 "%R/vdiff?from=%T&to=%T&sbs=%d%s", zTo, zFrom,
946 sideBySide, (verboseFlag && !sideBySide)?"&v":"");
947 style_header("Check-in Differences");
948 @ <h2>Difference From:</h2><blockquote>
949 checkin_description(ridFrom);
950 @ </blockquote><h2>To:</h2><blockquote>
951 checkin_description(ridTo);
@@ -1246,21 +1250,22 @@
1250 int isPatch;
1251 int sideBySide;
1252 Blob c1, c2, diff, *pOut;
1253 char *zV1;
1254 char *zV2;
1255 const char *zRe, *zSbs;
1256 ReCompiled *pRe = 0;
1257 u64 diffFlags;
1258 const char *zStyle = "sbsdiff";
1259
1260 login_check_credentials();
1261 if( !g.perm.Read ){ login_needed(); return; }
1262 v1 = name_to_rid_www("v1");
1263 v2 = name_to_rid_www("v2");
1264 if( v1==0 || v2==0 ) fossil_redirect_home();
1265 zSbs = P("sbs"); /* Note that "sbs=1" is the default value */
1266 sideBySide = (zSbs==0) || ((*zSbs!=0) && !is_false(zSbs));
1267 zV1 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v1);
1268 zV2 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v2);
1269 isPatch = P("patch")!=0;
1270 if( isPatch ){
1271 pOut = cgi_output_blob();
1272

Keyboard Shortcuts

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