Fossil SCM

Remember the last Unified/Side-by-side diff in the display preferences cookie.

drh 2017-12-05 21:36 trunk
Commit 0a1f4ed6aa92f13077420e82b5723f11ee9fb09328c6d911247812493add675a
+4 -1
--- src/cgi.c
+++ src/cgi.c
@@ -209,11 +209,14 @@
209209
const char *zValue, /* Value of the cookie. Automatically escaped */
210210
const char *zPath, /* Path cookie applies to. NULL means "/" */
211211
int lifetime /* Expiration of the cookie in seconds from now */
212212
){
213213
char *zSecure = "";
214
- if( zPath==0 ) zPath = g.zTop;
214
+ if( zPath==0 ){
215
+ zPath = g.zTop;
216
+ if( zPath[0]==0 ) zPath = "/";
217
+ }
215218
if( g.zBaseURL!=0 && strncmp(g.zBaseURL, "https:", 6)==0 ){
216219
zSecure = " secure;";
217220
}
218221
if( lifetime>0 ){
219222
lifetime += (int)time(0);
220223
--- src/cgi.c
+++ src/cgi.c
@@ -209,11 +209,14 @@
209 const char *zValue, /* Value of the cookie. Automatically escaped */
210 const char *zPath, /* Path cookie applies to. NULL means "/" */
211 int lifetime /* Expiration of the cookie in seconds from now */
212 ){
213 char *zSecure = "";
214 if( zPath==0 ) zPath = g.zTop;
 
 
 
215 if( g.zBaseURL!=0 && strncmp(g.zBaseURL, "https:", 6)==0 ){
216 zSecure = " secure;";
217 }
218 if( lifetime>0 ){
219 lifetime += (int)time(0);
220
--- src/cgi.c
+++ src/cgi.c
@@ -209,11 +209,14 @@
209 const char *zValue, /* Value of the cookie. Automatically escaped */
210 const char *zPath, /* Path cookie applies to. NULL means "/" */
211 int lifetime /* Expiration of the cookie in seconds from now */
212 ){
213 char *zSecure = "";
214 if( zPath==0 ){
215 zPath = g.zTop;
216 if( zPath[0]==0 ) zPath = "/";
217 }
218 if( g.zBaseURL!=0 && strncmp(g.zBaseURL, "https:", 6)==0 ){
219 zSecure = " secure;";
220 }
221 if( lifetime>0 ){
222 lifetime += (int)time(0);
223
+1 -1
--- src/finfo.c
+++ src/finfo.c
@@ -597,11 +597,11 @@
597597
@ [annotate]</a>
598598
@ %z(href("%R/blame?filename=%h&checkin=%s",z,zCkin))
599599
@ [blame]</a>
600600
@ %z(href("%R/timeline?n=all&uf=%!S",zUuid))[check-ins&nbsp;using]</a>
601601
if( fpid>0 ){
602
- @ %z(href("%R/fdiff?sbs=1&v1=%!S&v2=%!S",zPUuid,zUuid))[diff]</a>
602
+ @ %z(href("%R/fdiff?v1=%!S&v2=%!S",zPUuid,zUuid))[diff]</a>
603603
}
604604
@ </span></span>
605605
}
606606
if( fDebug & FINFO_DEBUG_MLINK ){
607607
int ii;
608608
--- src/finfo.c
+++ src/finfo.c
@@ -597,11 +597,11 @@
597 @ [annotate]</a>
598 @ %z(href("%R/blame?filename=%h&checkin=%s",z,zCkin))
599 @ [blame]</a>
600 @ %z(href("%R/timeline?n=all&uf=%!S",zUuid))[check-ins&nbsp;using]</a>
601 if( fpid>0 ){
602 @ %z(href("%R/fdiff?sbs=1&v1=%!S&v2=%!S",zPUuid,zUuid))[diff]</a>
603 }
604 @ </span></span>
605 }
606 if( fDebug & FINFO_DEBUG_MLINK ){
607 int ii;
608
--- src/finfo.c
+++ src/finfo.c
@@ -597,11 +597,11 @@
597 @ [annotate]</a>
598 @ %z(href("%R/blame?filename=%h&checkin=%s",z,zCkin))
599 @ [blame]</a>
600 @ %z(href("%R/timeline?n=all&uf=%!S",zUuid))[check-ins&nbsp;using]</a>
601 if( fpid>0 ){
602 @ %z(href("%R/fdiff?v1=%!S&v2=%!S",zPUuid,zUuid))[diff]</a>
603 }
604 @ </span></span>
605 }
606 if( fDebug & FINFO_DEBUG_MLINK ){
607 int ii;
608
+2 -9
--- src/graph.js
+++ src/graph.js
@@ -291,20 +291,13 @@
291291
selRow = null;
292292
this.className = this.className.replace(" sel", "");
293293
canvasDiv.className = canvasDiv.className.replace(" sel", "");
294294
}else{
295295
if( tx.fileDiff ){
296
- location.href=tx.baseUrl + "/fdiff?v1="+selRow.h+"&v2="+p.h+"&sbs=1";
296
+ location.href=tx.baseUrl + "/fdiff?v1="+selRow.h+"&v2="+p.h
297297
}else{
298
-/*
299
-** if( db_get_boolean("show-version-diffs", 0)==0 ){
300
-** @ location.href="%R/vdiff?from="+selRow.h+"&to="+p.h+"&sbs=0";
301
-** }else{
302
-** @ location.href="%R/vdiff?from="+selRow.h+"&to="+p.h+"&sbs=1";
303
-** }
304
-*/
305
- location.href=tx.baseUrl+"/vdiff?from="+selRow.h+"&to="+p.h
298
+ location.href=tx.baseUrl + "/vdiff?from="+selRow.h+"&to="+p.h
306299
}
307300
}
308301
}
309302
function changeDisplay(selector,value){
310303
var x = document.getElementsByClassName(selector);
311304
--- src/graph.js
+++ src/graph.js
@@ -291,20 +291,13 @@
291 selRow = null;
292 this.className = this.className.replace(" sel", "");
293 canvasDiv.className = canvasDiv.className.replace(" sel", "");
294 }else{
295 if( tx.fileDiff ){
296 location.href=tx.baseUrl + "/fdiff?v1="+selRow.h+"&v2="+p.h+"&sbs=1";
297 }else{
298 /*
299 ** if( db_get_boolean("show-version-diffs", 0)==0 ){
300 ** @ location.href="%R/vdiff?from="+selRow.h+"&to="+p.h+"&sbs=0";
301 ** }else{
302 ** @ location.href="%R/vdiff?from="+selRow.h+"&to="+p.h+"&sbs=1";
303 ** }
304 */
305 location.href=tx.baseUrl+"/vdiff?from="+selRow.h+"&to="+p.h
306 }
307 }
308 }
309 function changeDisplay(selector,value){
310 var x = document.getElementsByClassName(selector);
311
--- src/graph.js
+++ src/graph.js
@@ -291,20 +291,13 @@
291 selRow = null;
292 this.className = this.className.replace(" sel", "");
293 canvasDiv.className = canvasDiv.className.replace(" sel", "");
294 }else{
295 if( tx.fileDiff ){
296 location.href=tx.baseUrl + "/fdiff?v1="+selRow.h+"&v2="+p.h
297 }else{
298 location.href=tx.baseUrl + "/vdiff?from="+selRow.h+"&to="+p.h
 
 
 
 
 
 
 
299 }
300 }
301 }
302 function changeDisplay(selector,value){
303 var x = document.getElementsByClassName(selector);
304
+62 -71
--- src/info.c
+++ src/info.c
@@ -512,11 +512,11 @@
512512
}
513513
if( diffFlags ){
514514
append_diff(zOld, zNew, diffFlags, pRe);
515515
}else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
516516
@ &nbsp;&nbsp;
517
- @ %z(href("%R/fdiff?v1=%!S&v2=%!S&sbs=1",zOld,zNew))[diff]</a>
517
+ @ %z(href("%R/fdiff?v1=%!S&v2=%!S",zOld,zNew))[diff]</a>
518518
}
519519
}
520520
@ </p>
521521
}
522522
@@ -530,15 +530,15 @@
530530
531531
/*
532532
** Construct an appropriate diffFlag for text_diff() based on query
533533
** parameters and the to boolean arguments.
534534
*/
535
-u64 construct_diff_flags(int verboseFlag, int sideBySide){
535
+u64 construct_diff_flags(int diffType){
536536
u64 diffFlags = 0; /* Zero means do not show any diff */
537
- if( verboseFlag!=0 ){
537
+ if( diffType>0 ){
538538
int x;
539
- if( sideBySide ){
539
+ if( diffType==2 ){
540540
diffFlags = DIFF_SIDEBYSIDE;
541541
542542
/* "dw" query parameter determines width of each column */
543543
x = atoi(PD("dw","80"))*(DIFF_CONTEXT_MASK+1);
544544
if( x<0 || x>DIFF_WIDTH_MASK ) x = DIFF_WIDTH_MASK;
@@ -568,22 +568,19 @@
568568
**
569569
** Display information about a particular check-in.
570570
**
571571
** We also jump here from /info if the name is a check-in
572572
**
573
-** If the /ci page is used (instead of /vinfo or /info) then the
574
-** default behavior is to show unified diffs of all file changes.
575
-** With /vinfo and /info, only a list of the changed files are
576
-** shown, without diffs. This behavior is inverted if the
577
-** "show-version-diffs" setting is turned on.
573
+** If the /ci and /vinfo pages used to differ in their default
574
+** diff settings, but now diff settings persist with a cookie and
575
+** so /ci and /vinfo behave the same.
578576
*/
579577
void ci_page(void){
580578
Stmt q1, q2, q3;
581579
int rid;
582580
int isLeaf;
583
- int verboseFlag; /* True to show diffs */
584
- int sideBySide; /* True for side-by-side diffs */
581
+ int diffType; /* 0: no diff, 1: unified, 2: side-by-side */
585582
u64 diffFlags; /* Flag parameter for text_diff() */
586583
const char *zName; /* Name of the check-in to be displayed */
587584
const char *zUuid; /* UUID of zName */
588585
const char *zParent; /* UUID of the parent check-in (if any) */
589586
const char *zRe; /* regex parameter */
@@ -617,11 +614,13 @@
617614
" FROM blob, event"
618615
" WHERE blob.rid=%d"
619616
" AND event.objid=%d",
620617
rid, rid
621618
);
622
- sideBySide = !is_false(PD("sbs","1"));
619
+
620
+ cookie_link_parameter("diff","diff","2");
621
+ diffType = atoi(PD("diff","2"));
623622
if( db_step(&q1)==SQLITE_ROW ){
624623
const char *zUuid = db_column_text(&q1, 0);
625624
int nUuid = db_column_bytes(&q1, 0);
626625
char *zEUser, *zEComment;
627626
const char *zUser;
@@ -731,11 +730,12 @@
731730
zPJ, zUuid, zUuid);
732731
@ </td></tr>
733732
@ <tr><th>Downloads:</th><td>
734733
@ %z(href("%s",zUrl))Tarball</a>
735734
@ | %z(href("%R/zip/%t-%S.zip?uuid=%!S",zPJ,zUuid,zUuid))ZIP archive</a>
736
- @ | %z(href("%R/sqlar/%t-%S.sqlar?uuid=%!S",zPJ,zUuid,zUuid))SQL archive</a>
735
+ @ | %z(href("%R/sqlar/%t-%S.sqlar?uuid=%!S",zPJ,zUuid,zUuid))\
736
+ @ SQL archive</a>
737737
fossil_free(zUrl);
738738
}
739739
@ </td></tr>
740740
@ <tr><th>Other&nbsp;Links:</th>
741741
@ <td>
@@ -763,40 +763,32 @@
763763
showTags(rid);
764764
@ <div class="section">Context</div>
765765
render_checkin_context(rid, 0);
766766
@ <div class="section">Changes</div>
767767
@ <div class="sectionmenu">
768
- verboseFlag = g.zPath[0]!='c';
769
- if( db_get_boolean("show-version-diffs", 0)==0 ){
770
- verboseFlag = !verboseFlag;
771
- zPage = "ci";
772
- zPageHide = "vinfo";
773
- }
774
- diffFlags = construct_diff_flags(verboseFlag, sideBySide);
768
+ diffFlags = construct_diff_flags(diffType);
775769
zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
776
- if( verboseFlag ){
777
- @ %z(chref("button","%R/%s/%T",zPageHide,zName))
770
+ if( diffType!=0 ){
771
+ @ %z(chref("button","%R/%s/%T?diff=0",zPageHide,zName))\
778772
@ Hide&nbsp;Diffs</a>
779
- if( sideBySide ){
780
- @ %z(chref("button","%R/%s/%T?sbs=0%s",zPage,zName,zW))
781
- @ Unified&nbsp;Diffs</a>
782
- }else{
783
- @ %z(chref("button","%R/%s/%T?sbs=1%s",zPage,zName,zW))
784
- @ Side-by-Side&nbsp;Diffs</a>
785
- }
773
+ }
774
+ if( diffType!=1 ){
775
+ @ %z(chref("button","%R/%s/%T?diff=1%s",zPage,zName,zW))\
776
+ @ Unified&nbsp;Diffs</a>
777
+ }
778
+ if( diffType!=2 ){
779
+ @ %z(chref("button","%R/%s/%T?diff=2%s",zPage,zName,zW))\
780
+ @ Side-by-Side&nbsp;Diffs</a>
781
+ }
782
+ if( diffType!=0 ){
786783
if( *zW ){
787
- @ %z(chref("button","%R/%s/%T?sbs=%d",zPage,zName,sideBySide))
784
+ @ %z(chref("button","%R/%s/%T",zPage,zName))
788785
@ Show&nbsp;Whitespace&nbsp;Changes</a>
789786
}else{
790
- @ %z(chref("button","%R/%s/%T?sbs=%d&w",zPage,zName,sideBySide))
787
+ @ %z(chref("button","%R/%s/%T?w",zPage,zName))
791788
@ Ignore&nbsp;Whitespace</a>
792789
}
793
- }else{
794
- @ %z(chref("button","%R/%s/%T?sbs=0",zPage,zName))
795
- @ Show&nbsp;Unified&nbsp;Diffs</a>
796
- @ %z(chref("button","%R/%s/%T?sbs=1",zPage,zName))
797
- @ Show&nbsp;Side-by-Side&nbsp;Diffs</a>
798790
}
799791
if( zParent ){
800792
@ %z(chref("button","%R/vpatch?from=%!S&to=%!S",zParent,zUuid))
801793
@ Patch</a>
802794
}
@@ -828,11 +820,12 @@
828820
const char *zNew = db_column_text(&q3,3);
829821
const char *zOldName = db_column_text(&q3, 4);
830822
append_file_change_line(zName, zOld, zNew, zOldName, diffFlags,pRe,mperm);
831823
}
832824
db_finalize(&q3);
833
- append_diff_javascript(sideBySide);
825
+ append_diff_javascript(diffType==2);
826
+ cookie_render();
834827
style_footer();
835828
}
836829
837830
/*
838831
** WEBPAGE: winfo
@@ -1047,12 +1040,11 @@
10471040
** Query parameters:
10481041
**
10491042
** from=TAG Left side of the comparison
10501043
** to=TAG Right side of the comparison
10511044
** branch=TAG Show all changes on a particular branch
1052
-** v=BOOLEAN Default true. If false, only list files that have changed
1053
-** sbs=BOOLEAN Side-by-side diff if true. Unified diff if false
1045
+** diff=INTEGER 0: none, 1: unified, 2: side-by-side
10541046
** glob=STRING only diff files matching this glob
10551047
** dc=N show N lines of context around each diff
10561048
** w=BOOLEAN ignore whitespace when computing diffs
10571049
** nohdr omit the description at the top of the page
10581050
**
@@ -1059,12 +1051,11 @@
10591051
**
10601052
** Show all differences between two check-ins.
10611053
*/
10621054
void vdiff_page(void){
10631055
int ridFrom, ridTo;
1064
- int verboseFlag;
1065
- int sideBySide;
1056
+ int diffType = 0; /* 0: none, 1: unified, 2: side-by-side */
10661057
u64 diffFlags = 0;
10671058
Manifest *pFrom, *pTo;
10681059
ManifestFile *pFileFrom, *pFileTo;
10691060
const char *zBranch;
10701061
const char *zFrom;
@@ -1075,10 +1066,13 @@
10751066
const char *zGlob;
10761067
ReCompiled *pRe = 0;
10771068
login_check_credentials();
10781069
if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
10791070
login_anonymous_available();
1071
+ cookie_link_parameter("diff","diff","2");
1072
+ diffType = atoi(PD("diff","2"));
1073
+ cookie_render();
10801074
zRe = P("regex");
10811075
if( zRe ) re_compile(&pRe, zRe, 0);
10821076
zBranch = P("branch");
10831077
if( zBranch && zBranch[0] ){
10841078
cgi_replace_parameter("from", mprintf("root:%s", zBranch));
@@ -1086,58 +1080,46 @@
10861080
}
10871081
pTo = vdiff_parse_manifest("to", &ridTo);
10881082
if( pTo==0 ) return;
10891083
pFrom = vdiff_parse_manifest("from", &ridFrom);
10901084
if( pFrom==0 ) return;
1091
- sideBySide = !is_false(PD("sbs","1"));
1092
- zVerbose = P("v");
1093
- if( !zVerbose ){
1094
- zVerbose = P("verbose");
1095
- }
1096
- if( !zVerbose ){
1097
- zVerbose = P("detail"); /* deprecated */
1098
- }
1099
- verboseFlag = (zVerbose!=0) && !is_false(zVerbose);
1100
- if( !verboseFlag && sideBySide ) verboseFlag = 1;
11011085
zGlob = P("glob");
11021086
zFrom = P("from");
11031087
zTo = P("to");
11041088
if(zGlob && !*zGlob){
11051089
zGlob = NULL;
11061090
}
1107
- diffFlags = construct_diff_flags(verboseFlag, sideBySide);
1091
+ diffFlags = construct_diff_flags(diffType);
11081092
zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
11091093
style_submenu_element("Path", "%R/timeline?me=%T&you=%T", zFrom, zTo);
1110
- if( sideBySide || verboseFlag ){
1111
- style_submenu_element("Hide Diff", "%R/vdiff?from=%T&to=%T&sbs=0%s%T%s",
1094
+ if( diffType!=0 ){
1095
+ style_submenu_element("Hide Diff", "%R/vdiff?from=%T&to=%T&diff=0%s%T%s",
11121096
zFrom, zTo,
11131097
zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
11141098
}
1115
- if( !sideBySide ){
1099
+ if( diffType!=2 ){
11161100
style_submenu_element("Side-by-Side Diff",
1117
- "%R/vdiff?from=%T&to=%T&sbs=1%s%T%s",
1101
+ "%R/vdiff?from=%T&to=%T&diff=2%s%T%s",
11181102
zFrom, zTo,
11191103
zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
11201104
}
1121
- if( sideBySide || !verboseFlag ) {
1105
+ if( diffType!=1 ) {
11221106
style_submenu_element("Unified Diff",
1123
- "%R/vdiff?from=%T&to=%T&sbs=0&v%s%T%s",
1107
+ "%R/vdiff?from=%T&to=%T&diff=1%s%T%s",
11241108
zFrom, zTo,
11251109
zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
11261110
}
11271111
style_submenu_element("Invert",
1128
- "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T%s", zTo, zFrom,
1129
- sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1112
+ "%R/vdiff?from=%T&to=%T&%s%T%s", zTo, zFrom,
11301113
zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
11311114
if( zGlob ){
11321115
style_submenu_element("Clear glob",
1133
- "%R/vdiff?from=%T&to=%T&sbs=%d%s%s", zFrom, zTo,
1134
- sideBySide, (verboseFlag && !sideBySide)?"&v":"", zW);
1116
+ "%R/vdiff?from=%T&to=%T&%s", zFrom, zTo, zW);
11351117
}else{
11361118
style_submenu_element("Patch", "%R/vpatch?from=%T&to=%T%s", zFrom, zTo, zW);
11371119
}
1138
- if( sideBySide || verboseFlag ){
1120
+ if( diffType!=0 ){
11391121
style_submenu_checkbox("w", "Ignore Whitespace", 0, 0);
11401122
}
11411123
style_header("Check-in Differences");
11421124
if( P("nohdr")==0 ){
11431125
@ <h2>Difference From:</h2><blockquote>
@@ -1196,11 +1178,11 @@
11961178
pFileTo = manifest_file_next(pTo, 0);
11971179
}
11981180
}
11991181
manifest_destroy(pFrom);
12001182
manifest_destroy(pTo);
1201
- append_diff_javascript(sideBySide);
1183
+ append_diff_javascript(diffType==2);
12021184
style_footer();
12031185
}
12041186
12051187
#if INTERFACE
12061188
/*
@@ -1527,21 +1509,24 @@
15271509
** w=BOOLEAN Ignore whitespace
15281510
*/
15291511
void diff_page(void){
15301512
int v1, v2;
15311513
int isPatch = P("patch")!=0;
1532
- int sideBySide = PB("sbs");
1533
- int verbose = PB("verbose");
1514
+ int diffType; /* 0: none, 1: unified, 2: side-by-side */
15341515
char *zV1;
15351516
char *zV2;
15361517
const char *zRe;
15371518
ReCompiled *pRe = 0;
15381519
u64 diffFlags;
15391520
u32 objdescFlags = 0;
1521
+ int verbose = PB("verbose");
15401522
15411523
login_check_credentials();
15421524
if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
1525
+ cookie_link_parameter("diff","diff","2");
1526
+ diffType = atoi(PD("diff","2"));
1527
+ cookie_render();
15431528
if( P("from") && P("to") ){
15441529
v1 = artifact_from_ci_and_filename(0, "from");
15451530
v2 = artifact_from_ci_and_filename(0, "to");
15461531
}else{
15471532
Stmt q;
@@ -1593,18 +1578,24 @@
15931578
return;
15941579
}
15951580
15961581
zV1 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v1);
15971582
zV2 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v2);
1598
- diffFlags = construct_diff_flags(1, sideBySide) | DIFF_HTML;
1583
+ diffFlags = construct_diff_flags(diffType) | DIFF_HTML;
15991584
16001585
style_header("Diff");
16011586
style_submenu_checkbox("w", "Ignore Whitespace", 0, 0);
1602
- style_submenu_checkbox("sbs", "Side-by-Side Diff", 0, 0);
1587
+ if( diffType==2 ){
1588
+ style_submenu_element("Unified Diff", "%R/fdiff?v1=%T&v2=%T&diff=1",
1589
+ P("v1"), P("v2"));
1590
+ }else{
1591
+ style_submenu_element("Side-by-side Diff", "%R/fdiff?v1=%T&v2=%T&diff=2",
1592
+ P("v1"), P("v2"));
1593
+ }
16031594
style_submenu_checkbox("verbose", "Verbose", 0, 0);
1604
- style_submenu_element("Patch", "%s/fdiff?v1=%T&v2=%T&patch",
1605
- g.zTop, P("v1"), P("v2"));
1595
+ style_submenu_element("Patch", "%R/fdiff?v1=%T&v2=%T&patch",
1596
+ P("v1"), P("v2"));
16061597
16071598
if( P("smhdr")!=0 ){
16081599
@ <h2>Differences From Artifact
16091600
@ %z(href("%R/artifact/%!S",zV1))[%S(zV1)]</a> To
16101601
@ %z(href("%R/artifact/%!S",zV2))[%S(zV2)]</a>.</h2>
@@ -1619,11 +1610,11 @@
16191610
@ <b>Only differences that match regular expression "%h(zRe)"
16201611
@ are shown.</b>
16211612
}
16221613
@ <hr />
16231614
append_diff(zV1, zV2, diffFlags, pRe);
1624
- append_diff_javascript(sideBySide);
1615
+ append_diff_javascript(diffType);
16251616
style_footer();
16261617
}
16271618
16281619
/*
16291620
** WEBPAGE: raw
16301621
--- src/info.c
+++ src/info.c
@@ -512,11 +512,11 @@
512 }
513 if( diffFlags ){
514 append_diff(zOld, zNew, diffFlags, pRe);
515 }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
516 @ &nbsp;&nbsp;
517 @ %z(href("%R/fdiff?v1=%!S&v2=%!S&sbs=1",zOld,zNew))[diff]</a>
518 }
519 }
520 @ </p>
521 }
522
@@ -530,15 +530,15 @@
530
531 /*
532 ** Construct an appropriate diffFlag for text_diff() based on query
533 ** parameters and the to boolean arguments.
534 */
535 u64 construct_diff_flags(int verboseFlag, int sideBySide){
536 u64 diffFlags = 0; /* Zero means do not show any diff */
537 if( verboseFlag!=0 ){
538 int x;
539 if( sideBySide ){
540 diffFlags = DIFF_SIDEBYSIDE;
541
542 /* "dw" query parameter determines width of each column */
543 x = atoi(PD("dw","80"))*(DIFF_CONTEXT_MASK+1);
544 if( x<0 || x>DIFF_WIDTH_MASK ) x = DIFF_WIDTH_MASK;
@@ -568,22 +568,19 @@
568 **
569 ** Display information about a particular check-in.
570 **
571 ** We also jump here from /info if the name is a check-in
572 **
573 ** If the /ci page is used (instead of /vinfo or /info) then the
574 ** default behavior is to show unified diffs of all file changes.
575 ** With /vinfo and /info, only a list of the changed files are
576 ** shown, without diffs. This behavior is inverted if the
577 ** "show-version-diffs" setting is turned on.
578 */
579 void ci_page(void){
580 Stmt q1, q2, q3;
581 int rid;
582 int isLeaf;
583 int verboseFlag; /* True to show diffs */
584 int sideBySide; /* True for side-by-side diffs */
585 u64 diffFlags; /* Flag parameter for text_diff() */
586 const char *zName; /* Name of the check-in to be displayed */
587 const char *zUuid; /* UUID of zName */
588 const char *zParent; /* UUID of the parent check-in (if any) */
589 const char *zRe; /* regex parameter */
@@ -617,11 +614,13 @@
617 " FROM blob, event"
618 " WHERE blob.rid=%d"
619 " AND event.objid=%d",
620 rid, rid
621 );
622 sideBySide = !is_false(PD("sbs","1"));
 
 
623 if( db_step(&q1)==SQLITE_ROW ){
624 const char *zUuid = db_column_text(&q1, 0);
625 int nUuid = db_column_bytes(&q1, 0);
626 char *zEUser, *zEComment;
627 const char *zUser;
@@ -731,11 +730,12 @@
731 zPJ, zUuid, zUuid);
732 @ </td></tr>
733 @ <tr><th>Downloads:</th><td>
734 @ %z(href("%s",zUrl))Tarball</a>
735 @ | %z(href("%R/zip/%t-%S.zip?uuid=%!S",zPJ,zUuid,zUuid))ZIP archive</a>
736 @ | %z(href("%R/sqlar/%t-%S.sqlar?uuid=%!S",zPJ,zUuid,zUuid))SQL archive</a>
 
737 fossil_free(zUrl);
738 }
739 @ </td></tr>
740 @ <tr><th>Other&nbsp;Links:</th>
741 @ <td>
@@ -763,40 +763,32 @@
763 showTags(rid);
764 @ <div class="section">Context</div>
765 render_checkin_context(rid, 0);
766 @ <div class="section">Changes</div>
767 @ <div class="sectionmenu">
768 verboseFlag = g.zPath[0]!='c';
769 if( db_get_boolean("show-version-diffs", 0)==0 ){
770 verboseFlag = !verboseFlag;
771 zPage = "ci";
772 zPageHide = "vinfo";
773 }
774 diffFlags = construct_diff_flags(verboseFlag, sideBySide);
775 zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
776 if( verboseFlag ){
777 @ %z(chref("button","%R/%s/%T",zPageHide,zName))
778 @ Hide&nbsp;Diffs</a>
779 if( sideBySide ){
780 @ %z(chref("button","%R/%s/%T?sbs=0%s",zPage,zName,zW))
781 @ Unified&nbsp;Diffs</a>
782 }else{
783 @ %z(chref("button","%R/%s/%T?sbs=1%s",zPage,zName,zW))
784 @ Side-by-Side&nbsp;Diffs</a>
785 }
 
 
 
786 if( *zW ){
787 @ %z(chref("button","%R/%s/%T?sbs=%d",zPage,zName,sideBySide))
788 @ Show&nbsp;Whitespace&nbsp;Changes</a>
789 }else{
790 @ %z(chref("button","%R/%s/%T?sbs=%d&w",zPage,zName,sideBySide))
791 @ Ignore&nbsp;Whitespace</a>
792 }
793 }else{
794 @ %z(chref("button","%R/%s/%T?sbs=0",zPage,zName))
795 @ Show&nbsp;Unified&nbsp;Diffs</a>
796 @ %z(chref("button","%R/%s/%T?sbs=1",zPage,zName))
797 @ Show&nbsp;Side-by-Side&nbsp;Diffs</a>
798 }
799 if( zParent ){
800 @ %z(chref("button","%R/vpatch?from=%!S&to=%!S",zParent,zUuid))
801 @ Patch</a>
802 }
@@ -828,11 +820,12 @@
828 const char *zNew = db_column_text(&q3,3);
829 const char *zOldName = db_column_text(&q3, 4);
830 append_file_change_line(zName, zOld, zNew, zOldName, diffFlags,pRe,mperm);
831 }
832 db_finalize(&q3);
833 append_diff_javascript(sideBySide);
 
834 style_footer();
835 }
836
837 /*
838 ** WEBPAGE: winfo
@@ -1047,12 +1040,11 @@
1047 ** Query parameters:
1048 **
1049 ** from=TAG Left side of the comparison
1050 ** to=TAG Right side of the comparison
1051 ** branch=TAG Show all changes on a particular branch
1052 ** v=BOOLEAN Default true. If false, only list files that have changed
1053 ** sbs=BOOLEAN Side-by-side diff if true. Unified diff if false
1054 ** glob=STRING only diff files matching this glob
1055 ** dc=N show N lines of context around each diff
1056 ** w=BOOLEAN ignore whitespace when computing diffs
1057 ** nohdr omit the description at the top of the page
1058 **
@@ -1059,12 +1051,11 @@
1059 **
1060 ** Show all differences between two check-ins.
1061 */
1062 void vdiff_page(void){
1063 int ridFrom, ridTo;
1064 int verboseFlag;
1065 int sideBySide;
1066 u64 diffFlags = 0;
1067 Manifest *pFrom, *pTo;
1068 ManifestFile *pFileFrom, *pFileTo;
1069 const char *zBranch;
1070 const char *zFrom;
@@ -1075,10 +1066,13 @@
1075 const char *zGlob;
1076 ReCompiled *pRe = 0;
1077 login_check_credentials();
1078 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
1079 login_anonymous_available();
 
 
 
1080 zRe = P("regex");
1081 if( zRe ) re_compile(&pRe, zRe, 0);
1082 zBranch = P("branch");
1083 if( zBranch && zBranch[0] ){
1084 cgi_replace_parameter("from", mprintf("root:%s", zBranch));
@@ -1086,58 +1080,46 @@
1086 }
1087 pTo = vdiff_parse_manifest("to", &ridTo);
1088 if( pTo==0 ) return;
1089 pFrom = vdiff_parse_manifest("from", &ridFrom);
1090 if( pFrom==0 ) return;
1091 sideBySide = !is_false(PD("sbs","1"));
1092 zVerbose = P("v");
1093 if( !zVerbose ){
1094 zVerbose = P("verbose");
1095 }
1096 if( !zVerbose ){
1097 zVerbose = P("detail"); /* deprecated */
1098 }
1099 verboseFlag = (zVerbose!=0) && !is_false(zVerbose);
1100 if( !verboseFlag && sideBySide ) verboseFlag = 1;
1101 zGlob = P("glob");
1102 zFrom = P("from");
1103 zTo = P("to");
1104 if(zGlob && !*zGlob){
1105 zGlob = NULL;
1106 }
1107 diffFlags = construct_diff_flags(verboseFlag, sideBySide);
1108 zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
1109 style_submenu_element("Path", "%R/timeline?me=%T&you=%T", zFrom, zTo);
1110 if( sideBySide || verboseFlag ){
1111 style_submenu_element("Hide Diff", "%R/vdiff?from=%T&to=%T&sbs=0%s%T%s",
1112 zFrom, zTo,
1113 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1114 }
1115 if( !sideBySide ){
1116 style_submenu_element("Side-by-Side Diff",
1117 "%R/vdiff?from=%T&to=%T&sbs=1%s%T%s",
1118 zFrom, zTo,
1119 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1120 }
1121 if( sideBySide || !verboseFlag ) {
1122 style_submenu_element("Unified Diff",
1123 "%R/vdiff?from=%T&to=%T&sbs=0&v%s%T%s",
1124 zFrom, zTo,
1125 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1126 }
1127 style_submenu_element("Invert",
1128 "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T%s", zTo, zFrom,
1129 sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1130 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1131 if( zGlob ){
1132 style_submenu_element("Clear glob",
1133 "%R/vdiff?from=%T&to=%T&sbs=%d%s%s", zFrom, zTo,
1134 sideBySide, (verboseFlag && !sideBySide)?"&v":"", zW);
1135 }else{
1136 style_submenu_element("Patch", "%R/vpatch?from=%T&to=%T%s", zFrom, zTo, zW);
1137 }
1138 if( sideBySide || verboseFlag ){
1139 style_submenu_checkbox("w", "Ignore Whitespace", 0, 0);
1140 }
1141 style_header("Check-in Differences");
1142 if( P("nohdr")==0 ){
1143 @ <h2>Difference From:</h2><blockquote>
@@ -1196,11 +1178,11 @@
1196 pFileTo = manifest_file_next(pTo, 0);
1197 }
1198 }
1199 manifest_destroy(pFrom);
1200 manifest_destroy(pTo);
1201 append_diff_javascript(sideBySide);
1202 style_footer();
1203 }
1204
1205 #if INTERFACE
1206 /*
@@ -1527,21 +1509,24 @@
1527 ** w=BOOLEAN Ignore whitespace
1528 */
1529 void diff_page(void){
1530 int v1, v2;
1531 int isPatch = P("patch")!=0;
1532 int sideBySide = PB("sbs");
1533 int verbose = PB("verbose");
1534 char *zV1;
1535 char *zV2;
1536 const char *zRe;
1537 ReCompiled *pRe = 0;
1538 u64 diffFlags;
1539 u32 objdescFlags = 0;
 
1540
1541 login_check_credentials();
1542 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
 
 
 
1543 if( P("from") && P("to") ){
1544 v1 = artifact_from_ci_and_filename(0, "from");
1545 v2 = artifact_from_ci_and_filename(0, "to");
1546 }else{
1547 Stmt q;
@@ -1593,18 +1578,24 @@
1593 return;
1594 }
1595
1596 zV1 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v1);
1597 zV2 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v2);
1598 diffFlags = construct_diff_flags(1, sideBySide) | DIFF_HTML;
1599
1600 style_header("Diff");
1601 style_submenu_checkbox("w", "Ignore Whitespace", 0, 0);
1602 style_submenu_checkbox("sbs", "Side-by-Side Diff", 0, 0);
 
 
 
 
 
 
1603 style_submenu_checkbox("verbose", "Verbose", 0, 0);
1604 style_submenu_element("Patch", "%s/fdiff?v1=%T&v2=%T&patch",
1605 g.zTop, P("v1"), P("v2"));
1606
1607 if( P("smhdr")!=0 ){
1608 @ <h2>Differences From Artifact
1609 @ %z(href("%R/artifact/%!S",zV1))[%S(zV1)]</a> To
1610 @ %z(href("%R/artifact/%!S",zV2))[%S(zV2)]</a>.</h2>
@@ -1619,11 +1610,11 @@
1619 @ <b>Only differences that match regular expression "%h(zRe)"
1620 @ are shown.</b>
1621 }
1622 @ <hr />
1623 append_diff(zV1, zV2, diffFlags, pRe);
1624 append_diff_javascript(sideBySide);
1625 style_footer();
1626 }
1627
1628 /*
1629 ** WEBPAGE: raw
1630
--- src/info.c
+++ src/info.c
@@ -512,11 +512,11 @@
512 }
513 if( diffFlags ){
514 append_diff(zOld, zNew, diffFlags, pRe);
515 }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
516 @ &nbsp;&nbsp;
517 @ %z(href("%R/fdiff?v1=%!S&v2=%!S",zOld,zNew))[diff]</a>
518 }
519 }
520 @ </p>
521 }
522
@@ -530,15 +530,15 @@
530
531 /*
532 ** Construct an appropriate diffFlag for text_diff() based on query
533 ** parameters and the to boolean arguments.
534 */
535 u64 construct_diff_flags(int diffType){
536 u64 diffFlags = 0; /* Zero means do not show any diff */
537 if( diffType>0 ){
538 int x;
539 if( diffType==2 ){
540 diffFlags = DIFF_SIDEBYSIDE;
541
542 /* "dw" query parameter determines width of each column */
543 x = atoi(PD("dw","80"))*(DIFF_CONTEXT_MASK+1);
544 if( x<0 || x>DIFF_WIDTH_MASK ) x = DIFF_WIDTH_MASK;
@@ -568,22 +568,19 @@
568 **
569 ** Display information about a particular check-in.
570 **
571 ** We also jump here from /info if the name is a check-in
572 **
573 ** If the /ci and /vinfo pages used to differ in their default
574 ** diff settings, but now diff settings persist with a cookie and
575 ** so /ci and /vinfo behave the same.
 
 
576 */
577 void ci_page(void){
578 Stmt q1, q2, q3;
579 int rid;
580 int isLeaf;
581 int diffType; /* 0: no diff, 1: unified, 2: side-by-side */
 
582 u64 diffFlags; /* Flag parameter for text_diff() */
583 const char *zName; /* Name of the check-in to be displayed */
584 const char *zUuid; /* UUID of zName */
585 const char *zParent; /* UUID of the parent check-in (if any) */
586 const char *zRe; /* regex parameter */
@@ -617,11 +614,13 @@
614 " FROM blob, event"
615 " WHERE blob.rid=%d"
616 " AND event.objid=%d",
617 rid, rid
618 );
619
620 cookie_link_parameter("diff","diff","2");
621 diffType = atoi(PD("diff","2"));
622 if( db_step(&q1)==SQLITE_ROW ){
623 const char *zUuid = db_column_text(&q1, 0);
624 int nUuid = db_column_bytes(&q1, 0);
625 char *zEUser, *zEComment;
626 const char *zUser;
@@ -731,11 +730,12 @@
730 zPJ, zUuid, zUuid);
731 @ </td></tr>
732 @ <tr><th>Downloads:</th><td>
733 @ %z(href("%s",zUrl))Tarball</a>
734 @ | %z(href("%R/zip/%t-%S.zip?uuid=%!S",zPJ,zUuid,zUuid))ZIP archive</a>
735 @ | %z(href("%R/sqlar/%t-%S.sqlar?uuid=%!S",zPJ,zUuid,zUuid))\
736 @ SQL archive</a>
737 fossil_free(zUrl);
738 }
739 @ </td></tr>
740 @ <tr><th>Other&nbsp;Links:</th>
741 @ <td>
@@ -763,40 +763,32 @@
763 showTags(rid);
764 @ <div class="section">Context</div>
765 render_checkin_context(rid, 0);
766 @ <div class="section">Changes</div>
767 @ <div class="sectionmenu">
768 diffFlags = construct_diff_flags(diffType);
 
 
 
 
 
 
769 zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
770 if( diffType!=0 ){
771 @ %z(chref("button","%R/%s/%T?diff=0",zPageHide,zName))\
772 @ Hide&nbsp;Diffs</a>
773 }
774 if( diffType!=1 ){
775 @ %z(chref("button","%R/%s/%T?diff=1%s",zPage,zName,zW))\
776 @ Unified&nbsp;Diffs</a>
777 }
778 if( diffType!=2 ){
779 @ %z(chref("button","%R/%s/%T?diff=2%s",zPage,zName,zW))\
780 @ Side-by-Side&nbsp;Diffs</a>
781 }
782 if( diffType!=0 ){
783 if( *zW ){
784 @ %z(chref("button","%R/%s/%T",zPage,zName))
785 @ Show&nbsp;Whitespace&nbsp;Changes</a>
786 }else{
787 @ %z(chref("button","%R/%s/%T?w",zPage,zName))
788 @ Ignore&nbsp;Whitespace</a>
789 }
 
 
 
 
 
790 }
791 if( zParent ){
792 @ %z(chref("button","%R/vpatch?from=%!S&to=%!S",zParent,zUuid))
793 @ Patch</a>
794 }
@@ -828,11 +820,12 @@
820 const char *zNew = db_column_text(&q3,3);
821 const char *zOldName = db_column_text(&q3, 4);
822 append_file_change_line(zName, zOld, zNew, zOldName, diffFlags,pRe,mperm);
823 }
824 db_finalize(&q3);
825 append_diff_javascript(diffType==2);
826 cookie_render();
827 style_footer();
828 }
829
830 /*
831 ** WEBPAGE: winfo
@@ -1047,12 +1040,11 @@
1040 ** Query parameters:
1041 **
1042 ** from=TAG Left side of the comparison
1043 ** to=TAG Right side of the comparison
1044 ** branch=TAG Show all changes on a particular branch
1045 ** diff=INTEGER 0: none, 1: unified, 2: side-by-side
 
1046 ** glob=STRING only diff files matching this glob
1047 ** dc=N show N lines of context around each diff
1048 ** w=BOOLEAN ignore whitespace when computing diffs
1049 ** nohdr omit the description at the top of the page
1050 **
@@ -1059,12 +1051,11 @@
1051 **
1052 ** Show all differences between two check-ins.
1053 */
1054 void vdiff_page(void){
1055 int ridFrom, ridTo;
1056 int diffType = 0; /* 0: none, 1: unified, 2: side-by-side */
 
1057 u64 diffFlags = 0;
1058 Manifest *pFrom, *pTo;
1059 ManifestFile *pFileFrom, *pFileTo;
1060 const char *zBranch;
1061 const char *zFrom;
@@ -1075,10 +1066,13 @@
1066 const char *zGlob;
1067 ReCompiled *pRe = 0;
1068 login_check_credentials();
1069 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
1070 login_anonymous_available();
1071 cookie_link_parameter("diff","diff","2");
1072 diffType = atoi(PD("diff","2"));
1073 cookie_render();
1074 zRe = P("regex");
1075 if( zRe ) re_compile(&pRe, zRe, 0);
1076 zBranch = P("branch");
1077 if( zBranch && zBranch[0] ){
1078 cgi_replace_parameter("from", mprintf("root:%s", zBranch));
@@ -1086,58 +1080,46 @@
1080 }
1081 pTo = vdiff_parse_manifest("to", &ridTo);
1082 if( pTo==0 ) return;
1083 pFrom = vdiff_parse_manifest("from", &ridFrom);
1084 if( pFrom==0 ) return;
 
 
 
 
 
 
 
 
 
 
1085 zGlob = P("glob");
1086 zFrom = P("from");
1087 zTo = P("to");
1088 if(zGlob && !*zGlob){
1089 zGlob = NULL;
1090 }
1091 diffFlags = construct_diff_flags(diffType);
1092 zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
1093 style_submenu_element("Path", "%R/timeline?me=%T&you=%T", zFrom, zTo);
1094 if( diffType!=0 ){
1095 style_submenu_element("Hide Diff", "%R/vdiff?from=%T&to=%T&diff=0%s%T%s",
1096 zFrom, zTo,
1097 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1098 }
1099 if( diffType!=2 ){
1100 style_submenu_element("Side-by-Side Diff",
1101 "%R/vdiff?from=%T&to=%T&diff=2%s%T%s",
1102 zFrom, zTo,
1103 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1104 }
1105 if( diffType!=1 ) {
1106 style_submenu_element("Unified Diff",
1107 "%R/vdiff?from=%T&to=%T&diff=1%s%T%s",
1108 zFrom, zTo,
1109 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1110 }
1111 style_submenu_element("Invert",
1112 "%R/vdiff?from=%T&to=%T&%s%T%s", zTo, zFrom,
 
1113 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1114 if( zGlob ){
1115 style_submenu_element("Clear glob",
1116 "%R/vdiff?from=%T&to=%T&%s", zFrom, zTo, zW);
 
1117 }else{
1118 style_submenu_element("Patch", "%R/vpatch?from=%T&to=%T%s", zFrom, zTo, zW);
1119 }
1120 if( diffType!=0 ){
1121 style_submenu_checkbox("w", "Ignore Whitespace", 0, 0);
1122 }
1123 style_header("Check-in Differences");
1124 if( P("nohdr")==0 ){
1125 @ <h2>Difference From:</h2><blockquote>
@@ -1196,11 +1178,11 @@
1178 pFileTo = manifest_file_next(pTo, 0);
1179 }
1180 }
1181 manifest_destroy(pFrom);
1182 manifest_destroy(pTo);
1183 append_diff_javascript(diffType==2);
1184 style_footer();
1185 }
1186
1187 #if INTERFACE
1188 /*
@@ -1527,21 +1509,24 @@
1509 ** w=BOOLEAN Ignore whitespace
1510 */
1511 void diff_page(void){
1512 int v1, v2;
1513 int isPatch = P("patch")!=0;
1514 int diffType; /* 0: none, 1: unified, 2: side-by-side */
 
1515 char *zV1;
1516 char *zV2;
1517 const char *zRe;
1518 ReCompiled *pRe = 0;
1519 u64 diffFlags;
1520 u32 objdescFlags = 0;
1521 int verbose = PB("verbose");
1522
1523 login_check_credentials();
1524 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
1525 cookie_link_parameter("diff","diff","2");
1526 diffType = atoi(PD("diff","2"));
1527 cookie_render();
1528 if( P("from") && P("to") ){
1529 v1 = artifact_from_ci_and_filename(0, "from");
1530 v2 = artifact_from_ci_and_filename(0, "to");
1531 }else{
1532 Stmt q;
@@ -1593,18 +1578,24 @@
1578 return;
1579 }
1580
1581 zV1 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v1);
1582 zV2 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v2);
1583 diffFlags = construct_diff_flags(diffType) | DIFF_HTML;
1584
1585 style_header("Diff");
1586 style_submenu_checkbox("w", "Ignore Whitespace", 0, 0);
1587 if( diffType==2 ){
1588 style_submenu_element("Unified Diff", "%R/fdiff?v1=%T&v2=%T&diff=1",
1589 P("v1"), P("v2"));
1590 }else{
1591 style_submenu_element("Side-by-side Diff", "%R/fdiff?v1=%T&v2=%T&diff=2",
1592 P("v1"), P("v2"));
1593 }
1594 style_submenu_checkbox("verbose", "Verbose", 0, 0);
1595 style_submenu_element("Patch", "%R/fdiff?v1=%T&v2=%T&patch",
1596 P("v1"), P("v2"));
1597
1598 if( P("smhdr")!=0 ){
1599 @ <h2>Differences From Artifact
1600 @ %z(href("%R/artifact/%!S",zV1))[%S(zV1)]</a> To
1601 @ %z(href("%R/artifact/%!S",zV2))[%S(zV2)]</a>.</h2>
@@ -1619,11 +1610,11 @@
1610 @ <b>Only differences that match regular expression "%h(zRe)"
1611 @ are shown.</b>
1612 }
1613 @ <hr />
1614 append_diff(zV1, zV2, diffFlags, pRe);
1615 append_diff_javascript(diffType);
1616 style_footer();
1617 }
1618
1619 /*
1620 ** WEBPAGE: raw
1621
+1 -2
--- src/skins.c
+++ src/skins.c
@@ -766,12 +766,11 @@
766766
@ Baseline: \
767767
skin_emit_skin_selector("basis", zBasis, zDraft);
768768
@ <input type="submit" name="diff" value="Unified Diff" />
769769
@ <input type="submit" name="sbsdiff" value="Side-by-Side Diff" />
770770
if( P("diff")!=0 || P("sbsdiff")!=0 ){
771
- u64 diffFlags = construct_diff_flags(0,0) |
772
- DIFF_STRIP_EOLCR;
771
+ u64 diffFlags = construct_diff_flags(1) | DIFF_STRIP_EOLCR;
773772
Blob from, to, out;
774773
if( P("sbsdiff")!=0 ) diffFlags |= DIFF_SIDEBYSIDE;
775774
blob_init(&to, zContent, -1);
776775
blob_init(&from, skin_file_content(zBasis, zFile), -1);
777776
blob_zero(&out);
778777
--- src/skins.c
+++ src/skins.c
@@ -766,12 +766,11 @@
766 @ Baseline: \
767 skin_emit_skin_selector("basis", zBasis, zDraft);
768 @ <input type="submit" name="diff" value="Unified Diff" />
769 @ <input type="submit" name="sbsdiff" value="Side-by-Side Diff" />
770 if( P("diff")!=0 || P("sbsdiff")!=0 ){
771 u64 diffFlags = construct_diff_flags(0,0) |
772 DIFF_STRIP_EOLCR;
773 Blob from, to, out;
774 if( P("sbsdiff")!=0 ) diffFlags |= DIFF_SIDEBYSIDE;
775 blob_init(&to, zContent, -1);
776 blob_init(&from, skin_file_content(zBasis, zFile), -1);
777 blob_zero(&out);
778
--- src/skins.c
+++ src/skins.c
@@ -766,12 +766,11 @@
766 @ Baseline: \
767 skin_emit_skin_selector("basis", zBasis, zDraft);
768 @ <input type="submit" name="diff" value="Unified Diff" />
769 @ <input type="submit" name="sbsdiff" value="Side-by-Side Diff" />
770 if( P("diff")!=0 || P("sbsdiff")!=0 ){
771 u64 diffFlags = construct_diff_flags(1) | DIFF_STRIP_EOLCR;
 
772 Blob from, to, out;
773 if( P("sbsdiff")!=0 ) diffFlags |= DIFF_SIDEBYSIDE;
774 blob_init(&to, zContent, -1);
775 blob_init(&from, skin_file_content(zBasis, zFile), -1);
776 blob_zero(&out);
777
+1 -1
--- src/timeline.c
+++ src/timeline.c
@@ -693,11 +693,11 @@
693693
if( zOldName!=0 ){
694694
@ <li>%h(zOldName) &rarr; %s(zA)%h(zFilename)%s(zId)</a> %s(zUnpub)
695695
}else{
696696
@ <li>%s(zA)%h(zFilename)</a>%s(zId) &nbsp; %s(zUnpub)
697697
}
698
- @ %z(href("%R/fdiff?sbs=1&v1=%!S&v2=%!S",zOld,zNew))[diff]</a></li>
698
+ @ %z(href("%R/fdiff?v1=%!S&v2=%!S",zOld,zNew))[diff]</a></li>
699699
}
700700
fossil_free(zA);
701701
}
702702
db_reset(&fchngQuery);
703703
if( inUl ){
704704
--- src/timeline.c
+++ src/timeline.c
@@ -693,11 +693,11 @@
693 if( zOldName!=0 ){
694 @ <li>%h(zOldName) &rarr; %s(zA)%h(zFilename)%s(zId)</a> %s(zUnpub)
695 }else{
696 @ <li>%s(zA)%h(zFilename)</a>%s(zId) &nbsp; %s(zUnpub)
697 }
698 @ %z(href("%R/fdiff?sbs=1&v1=%!S&v2=%!S",zOld,zNew))[diff]</a></li>
699 }
700 fossil_free(zA);
701 }
702 db_reset(&fchngQuery);
703 if( inUl ){
704
--- src/timeline.c
+++ src/timeline.c
@@ -693,11 +693,11 @@
693 if( zOldName!=0 ){
694 @ <li>%h(zOldName) &rarr; %s(zA)%h(zFilename)%s(zId)</a> %s(zUnpub)
695 }else{
696 @ <li>%s(zA)%h(zFilename)</a>%s(zId) &nbsp; %s(zUnpub)
697 }
698 @ %z(href("%R/fdiff?v1=%!S&v2=%!S",zOld,zNew))[diff]</a></li>
699 }
700 fossil_free(zA);
701 }
702 db_reset(&fchngQuery);
703 if( inUl ){
704
+1 -1
--- src/wiki.c
+++ src/wiki.c
@@ -922,11 +922,11 @@
922922
blob_zero(&w2);
923923
if( rid2 && (pW2 = manifest_get(rid2, CFTYPE_WIKI, 0))!=0 ){
924924
blob_init(&w2, pW2->zWiki, -1);
925925
}
926926
blob_zero(&d);
927
- diffFlags = construct_diff_flags(1,0);
927
+ diffFlags = construct_diff_flags(1);
928928
text_diff(&w2, &w1, &d, 0, diffFlags | DIFF_HTML | DIFF_LINENO);
929929
@ <pre class="udiff">
930930
@ %s(blob_str(&d))
931931
@ <pre>
932932
manifest_destroy(pW1);
933933
--- src/wiki.c
+++ src/wiki.c
@@ -922,11 +922,11 @@
922 blob_zero(&w2);
923 if( rid2 && (pW2 = manifest_get(rid2, CFTYPE_WIKI, 0))!=0 ){
924 blob_init(&w2, pW2->zWiki, -1);
925 }
926 blob_zero(&d);
927 diffFlags = construct_diff_flags(1,0);
928 text_diff(&w2, &w1, &d, 0, diffFlags | DIFF_HTML | DIFF_LINENO);
929 @ <pre class="udiff">
930 @ %s(blob_str(&d))
931 @ <pre>
932 manifest_destroy(pW1);
933
--- src/wiki.c
+++ src/wiki.c
@@ -922,11 +922,11 @@
922 blob_zero(&w2);
923 if( rid2 && (pW2 = manifest_get(rid2, CFTYPE_WIKI, 0))!=0 ){
924 blob_init(&w2, pW2->zWiki, -1);
925 }
926 blob_zero(&d);
927 diffFlags = construct_diff_flags(1);
928 text_diff(&w2, &w1, &d, 0, diffFlags | DIFF_HTML | DIFF_LINENO);
929 @ <pre class="udiff">
930 @ %s(blob_str(&d))
931 @ <pre>
932 manifest_destroy(pW1);
933

Keyboard Shortcuts

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